从立体声输入录制单声道

时间:2017-02-27 08:09:35

标签: winapi audio winmm

我有一个带两个输入的音频接口:麦克风和乐器。在Windows中,它由单个立体声音频输入表示,左声道获得麦克风输入,右声道获得乐器输入。

我打开这样的录音会话:

void CALLBACK waveIn(HWAVEIN hwi, UINT uMsg, DWORD_PTR dwInstance, DWORD_PTR dwParam1, DWORD_PTR dwParam2);

// ...

const int nchannels = 2;
const int sr = 48000;

HWAVEIN hwi;
WAVEFORMATEX wfe = 
{
    WAVE_FORMAT_IEEE_FLOAT,         // wFormatTag
    nchannels,                      // nChannels
    sr,                             // nSamplesPerSec
    sr * sizeof(float) * nchannels, // nAvgBytesPerSec
    sizeof(float) * nchannels,      // nBlockAlign
    32,                             // wBitsPerSample
    0                               // cbSize
};
MMRESULT openResult = waveInOpen(&hwi, 0, &wfe, (DWORD_PTR)waveIn, 0, CALLBACK_FUNCTION);
// ..set up buffers..
MMRESULT startResult = waveInStart(hwi);

然后在waveIn函数中处理样本。它工作正常,但我只需要使用仪器(右声道)数据,而对麦克风不感兴趣。我尝试在上面的代码中设置nchannels=1,希望它会混合两个频道,但我只从麦克风(左)频道获取数据。有没有办法从立体声输入设置录音,以获得恰到好处(或两者兼而有之)的音频通道数据(作为单声道录音)?

0 个答案:

没有答案