///////////////////////////////////////////////////////////////////////////////
/* //
*** //
// Функция открытия устройства SB для захвата(приема) звука с микрофона //
*** //
*/ //
///////////////////////////////////////////////////////////////////////////////
bool WINAPI WAVEInOpen ()
{
/////////////////////////////////////////////////
// Allокируем память для Wave In Header
/////////////////////////////////////////////////
INT i;
for (i = 0; i < MAXNUMOFBUFFER; i++)
{
// Allокируем два участка памяти, результат — хедл участка кучи
hWaveInHdr[i] = (GLOBALHANDLE) GlobalAlloc(GPTR, sizeof(WAVEHDR));
// Блокируем участок памяти на себя и получаем указатель на хедл выделеной кучи
lpWaveInHdr[i] = (LPWAVEHDR) GlobalLock(hWaveInHdr[i]);
// Выделяем хедл памяти для буфера
hInBuffer[i] = GlobalAlloc(GPTR, BUFFER_SIZE);
// В результате мы должны получить не хедл,
// а указатель и заблокировать память
lpInBuffer[i] = (LPBYTE)GlobalLock(hInBuffer[i]);
lpWaveInHdr[i]->lpData = (LPSTR)lpInBuffer[i]; // Адрес буфера для записи данных
lpWaveInHdr[i]->dwBufferLength = BUFFER_SIZE ; // Длина буфера в байтах
lpWaveInHdr[i]->dwBytesRecorded = 0L ; // Для режима загрузки данных опр. кол-во загруженных в буфер байт
lpWaveInHdr[i]->dwUser = 0L ; // Пользовательские данные
lpWaveInHdr[i]->dwFlags = 0L ; // Флаги
lpWaveInHdr[i]->dwLoops = 0L ; // Исп. только при воспроизведении (запись — 0)
lpWaveInHdr[i]->lpNext = NULL ; //
lpWaveInHdr[i]->reserved = 0L ; //
}
// открываем устройство!
if (!waveInOpen(&hWaveIn, WAVE_MAPPER,(LPWAVEFORMATEX)&frmAudio,0L,CALLBACK_NULL,0L))
ErrorLast();//return false;
for (i = 0; i < MAXNUMOFBUFFER; i++)
{
// Выполняем подготовку буферов для операции загрузки данных:
if (!waveInPrepareHeader(&hWaveIn, lpWaveInHdr[i], sizeof(WAVEHDR)))
return false;
// Устанавливаем в очередь на загрузку данными буфера память.
if (!waveInAddBuffer(&hWaveIn, lpWaveInHdr[i], sizeof(WAVEHDR)))
return false;
}
return true; // без ошибок
}
Вопрос в следующем. Как анализировать буфера памяти выделенных из кучи, на предмет заполнения такового и сброса в файл?
Не понятно как осуществлять захват именно с микрофона?
Код:
......
if (lpWaveInHdr[0]->dwFlags == WHDR_DONE)
{
playFile.write(lpInBuffer[0], BUFFER_SIZE);
}
......
не работает! Может есть ошибка? :user:
Пишите: PCMagog@mail.ru
Зарание благодарю! Александр.
Гораций, в мире много кой-чего,
Что вашей философии не снилось.
У. Шекспир.