我编写了一个程序,通过Wuindows中的waveInOpen()捕获声音。它在主板上的michrophone设备上运行良好,但是当我尝试从第二个声卡中捕获时,我只得到[静态]噪声。使用SoundRecorder进行录制对两张卡都很有效。 any1知道waveInOpen()和多个输入设备是否存在任何已知问题?
打开输入设备的代码如下所示:
void Audio::OpenDevice(const int device,
const Audio::SamplingRate samplingRate)
throw (Exception, std::exception)
{
switch(samplingRate)
{
...
case AUDIO_16BIT_44KHZ_STEREO:
bits_per_sample_ = 16;
hertz_ = 44100;
channels_ = 2;
break;
...
default:
throw Exception("Audio::OpenDevice(): Invalid enum value");
}
// Open the device
const UINT_PTR dev = (-1 == device) ? (UINT_PTR)WAVE_MAPPER : (UINT_PTR)device;
WAVEFORMATEX wf = {0};
wf.wFormatTag = WAVE_FORMAT_PCM;
wf.nChannels = channels_;
wf.wBitsPerSample = bits_per_sample_;
wf.nSamplesPerSec = hertz_;
wf.nBlockAlign = wf.nChannels * wf.wBitsPerSample / 8;
`
const MMRESULT result = waveInOpen(&hwi_, dev, &wf,
(DWORD_PTR)OnWaveEvent, (DWORD_PTR)this, CALLBACK_FUNCTION);
if (MMSYSERR_NOERROR != result)
throw Exception("waveInOpen()");
std::cout << "Audio: Sampling at " << hertz_ << " hertz from "
<< channels_ << " channel(s) with " << bits_per_sample_
<< " bits per sample. "
<< std::endl;
}
答案 0 :(得分:0)
您是否检查了麦克风增益设置,调音台设置,您使用的麦克风硬件是否与您连接的输入兼容等?将大多数麦克风连接到连接线上并不能很好地工作。麦克风没有足够的输出电压来驱动这种输入。
答案 1 :(得分:0)
我的猜测(纯粹猜测)是位深度或采样率在某种程度上是不正确的。如果您使用的是16/44100,那么我认为它是受支持的(很常见)。但也许声卡没有为那些费率设置。我有一个外部Edirol声卡,当我改变位深度时,我必须在物理上打开和关闭它(并在其上调整一个单独的开关)。