从第二个声卡捕获音频的问题

时间:2010-01-08 18:48:57

标签: c++

我编写了一个程序,通过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;
}

2 个答案:

答案 0 :(得分:0)

您是否检查了麦克风增益设置,调音台设置,您使用的麦克风硬件是否与您连接的输入兼容等?将大多数麦克风连接到连接线上并不能很好地工作。麦克风没有足够的输出电压来驱动这种输入。

答案 1 :(得分:0)

我的猜测(纯粹猜测)是位深度或采样率在某种程度上是不正确的。如果您使用的是16/44100,那么我认为它是受支持的(很常见)。但也许声卡没有为那些费率设置。我有一个外部Edirol声卡,当我改变位深度时,我必须在物理上打开和关闭它(并在其上调整一个单独的开关)。