waveInPrepareHeader
pWaveHdr2->lpData = (LPSTR)pBuffer2;pWaveHdr2->dwBufferLength = dwDataLength;
pWaveHdr2->dwBytesRecorded = 0;
pWaveHdr2->dwUser = 0;
pWaveHdr2->dwFlags = 0;
pWaveHdr2->dwLoops = 1;
pWaveHdr2->lpNext = NULL;
pWaveHdr2->reserved = 0;
waveInPrepareHeader(hWaveIn, pWaveHdr2, sizeof(WAVEHDR));
我的问题:一个输入设备为何要两个缓冲区 ? 一个输入设备通常需要两个缓冲区是为了实现连续的音频数据采集。当一个缓冲区正在被设备使用来接收音频数据时,应用程序可以同时准备另一个缓冲区以便在第一个缓冲区被填满后立即切换到第二个缓冲区,以保证连续的数据采集。
在给定的代码中,pBuffer2是第二个缓冲区,pWaveHdr2是第二个缓冲区的WAVEHDR结构。当调用waveInPrepareHeader函数时,通过将第二个缓冲区的信息传递给该函数,设备会为第二个缓冲区做好准备,以便在需要时可以立即使用。
使用两个缓冲区可以实现无间断的数据采集,因为当一个缓冲区被填满时,应用程序可以开始处理已经被填充的缓冲区的数据,而设备可以继续在另一个缓冲区中接收新的音频数据。这样可以避免数据丢失或中断,确保音频数据的连续性。 在音频输入设备中使用两个缓冲区的主要目的是实现连续的音频数据录制。
音频输入设备(如麦克风)会以一定的速率生成音频数据,并将其存储到缓冲区中供应用程序读取。当录制的音频数据填满一个缓冲区后,应用程序会将该缓冲区传递给设备驱动程序进行处理,同时另一个空闲的缓冲区被用来继续录制音频数据。
使用两个缓冲区可以实现无间断地录制音频数据。当一个缓冲区用于存储音频数据时,应用程序可以处理另一个缓冲区中的数据,并准备好下一次录制。这样,即使在处理和读取缓冲区数据的过程中,音频输入设备仍然可以持续录制。
在代码示例中,pWaveHdr2 是第二个缓冲区的 WAVEHDR 结构,用于存储录制的音频数据。当第一个缓冲区的数据填满后,设备驱动程序会将其回调给应用程序并发送相应的消息,应用程序可以通过处理这些消息来获取录制的音频数据,并同时将第二个空闲的缓冲区传递给设备驱动程序,以继续录制音频数据。
通过交替使用两个缓冲区,可以确保录制的音频数据在应用程序中的处理和读取过程中不会中断,从而实现连续的音频录制。
球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}
页:
[1]