在现代计算机系统中,实时音频捕获是一个常见的需求。无论是录制在线会议、音乐表演还是游戏声音,都需要一种有效的方式来捕获和处理音频数据。本文将介绍如何使用特定的音频卡和软件来实现高质量的音频捕获。
音频捕获通常涉及到从计算机的音频输出设备中捕获声音。这可以通过多种方式实现,包括使用麦克风、音频接口卡或直接从电脑的音频输出端口捕获。在追求最佳音质时,使用带有“立体声混音”功能的音频卡是最佳选择。
要开始使用音频捕获软件,首先需要启动软件并播放带有声音的电影或音频文件。然后,按下“开始捕获”按钮,将看到音频信号的波形图。如果想要创建一个音频文件,比如“capture.wav”,可以选择“捕获到WAV”选项;如果只想查看峰值水平,可以选择“仅监控”选项。
音频捕获软件的原始版本是在Windows XP时代使用PowerBASIC编写的。随着时间的推移,软件已经发展和改进,以适应新的操作系统和硬件。
以下是“OpenWaveIn”函数的示例,该函数可以定制以使用特定的设备。可以在代码中搜索特定的设备名称,如“麦克风”或“立体声混音”,并根据需要进行选择。
DWORD OpenWaveIn(IN HWND hParent, IN long UseWaveFormat, IN long DeviceToUse) {
WAVEINCAPS wic = {0};
WORD zBitsPerSample = 0, zChannels = 0;
LONG zSamplesPerSec = 0, I = 0;
DWORD nRet = 0;
switch (UseWaveFormat) {
case WAVE_FORMAT_1M08: // 单声道 11025 8位
zChannels = 1; zSamplesPerSec = 11025; zBitsPerSample = 8;
break;
case WAVE_FORMAT_1S08: // 立体声 11025 8位
zChannels = 2; zSamplesPerSec = 11025; zBitsPerSample = 8;
break;
// ... 更多格式 ...
default:
zChannels = 1; zSamplesPerSec = 22050; zBitsPerSample = 16;
}
LONG nDev = (LONG) waveInGetNumDevs();
for (I = 0; I < nDev; I++) {
nRet = waveInGetDevCaps(I, &wic, sizeof(wic));
if (nRet == 0) {
if (wic.dwFormats & UseWaveFormat) {
gCap.wfx.nChannels = zChannels;
gCap.wfx.nSamplesPerSec = zSamplesPerSec;
gCap.wfx.wFormatTag = WAVE_FORMAT_PCM;
gCap.wfx.wBitsPerSample = zBitsPerSample;
gCap.wfx.nBlockAlign = gCap.wfx.nChannels * gCap.wfx.wBitsPerSample / 8;
gCap.wfx.nAvgBytesPerSec = gCap.wfx.nSamplesPerSec * gCap.wfx.nBlockAlign;
gCap.wfx.cbSize = 0;
nRet = waveInOpen(&gCap.hWaveIn, I, &gCap.wfx, (DWORD_PTR) gCap.hAudioWnd, (DWORD_PTR)gCap.hAudioWnd, CALLBACK_WINDOW);
if (nRet == 0) {
if ((DeviceToUse == MICROPHONE) && (StrStrI(wic.szPname, L"micro"))) {
break;
}
if ((DeviceToUse == STEREO_MIX) && (StrStrI(wic.szPname, L"stereo"))) {
break;
}
}
} else {
nRet = 22;
}
}
}
return nRet;
}