2013-02-11 3 views
1

Я реализую простую запись, приложение для воспроизведения, которое может воспроизводить и записывать WAV-файл.
требования заключаются в следующем:Получите уровень звука микрофона во время записи в Windows 7

1) Windows 7, Visual Studio 2010 (или 2012), C#
2) Запись, воспроизведение Wav файл спецификации информация: SAMPLERATE 22050, моно, BitsPerSample 16
3) может отображать микро уровня звука во время записи

с 1) и 2), я могу использовать LIB (Winmm.dll) и mciSendString() следующим образом

[DllImport("winmm.dll")] 
private static extern long mciSendString(string lpstrCommand, string lpstrReturnString, int uReturnLength, int hwndCallback); 

// Open file to play 
public void open(string file) 
{ 
    string command = "open \"" + file + "\" type waveaudio alias MyWav"; 
    mciSendString(command, null, 0, 0); 
} 

// Start playing 
public void play() 
{ 
    string command = "play MyWav"; 
    mciSendString(command, null, 0, 0); 
} 

// Stop playing 
public void stop() 
{ 
    string command = "stop MyWav"; 
    mciSendString(command, null, 0, 0); 

    command = "close MyWav"; 
    mciSendString(command, null, 0, 0); 
} 

// Start recording 
public void record() 
{ 
    string command = "open new Type waveaudio Alias MyRec"; 
    mciSendString(command, "", 0, 0); 

    command = "set capture time format ms bitspersample 16 channels 1 samplespersec 22050 alignment 4"; 
    mciSendString(command, "", 0, 0); 

    command = "record MyRec"; 
    mciSendString(command, "", 0, 0); 
} 

// Stop recording 
public void stoprec() 
{ 
    string fileName = @"""D:\Rec1.wav"""; 

    string command = "stop MyRec"; 
    mciSendString(command, "", 0, 0); 

    command = @"save MyRec " + fileName; 

    Debug.WriteLine(command); 
    mciSendString(command, "", 0, 0); 

    command = "close MyRec"; 
    mciSendString(command, "", 0, 0); 
} 

с 3), я также хочу использовать mciSendString. Я нашел следующую команду (статус):

string command = "status MyRec level "; 
long mci_ret = mciSendString(command, "", 0, 0); 

Но я не знаю, чтобы получить объем указанной команды, может кто-нибудь сказать мне путь?

Ref: команда статус от mciSendString() находится в Microsoft документ: http://msdn.microsoft.com/en-us/library/windows/desktop/dd798683%28v=vs.85%29.aspx
Он говорит: Уровень: Возвращает текущее значение звукового образца PCM.

+0

Есть некоторые большие articales в CodeProject [Vista, Core Audio API Master Volume Control] (HTTP: //www.codeproject. com/Статьи/18520/Vista-Core-Audio-API-Master-Volume-Control? fid = 410669 & fr = 126 # xx0xx) – sees

+0

или [Изменить основной том в Visual C++] (http://www.codeproject.com/Tips/233484/Change-Master-Volume-in-Visual-Cplusplus) – sees

ответ

0

Я контролирую уровни, открывая два устройства, один для записи/воспроизведения (дорожка 1) и один для получения уровней (waveLevel). Ниже приведено значение foxpro.

* OPEN WAVE DEVICE FOR LEVEL READINGS 
= mciSendString("open new type waveaudio alias waveLevel", '0&', 0, 0) 

* START RECORDING 
= mciSendString("open new type waveaudio alias track1", '0&', 0, 0) 

затем, чтобы получить уровень Track1 я использовать устройство waveLevel

= mciSendString("status waveLevel level", @cBuff, LEN(cBuff) ,0) 
+0

спасибо за совет. Я в конечном итоге использую NAudio для своей задачи. Читая весь код и узнайте, как правильно это сделать. Это нормально для Windows 7 и 8 (проверено в некоторых версиях, таких как Professional, Enterprise, Home Premium, .etc) – sees

Смежные вопросы