2010-01-08 2 views
0

Wuindows의 waveInOpen()을 통해 사운드를 캡처하는 프로그램을 작성했습니다. 메인 보드의 마이크론 장치에서 잘 작동하지만 두 번째 사운드 카드에서 캡처하려고하면 잡음이 들립니다. 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

yow! 코드를 다시 포맷하십시오. 사람들은 그것을 읽을 기회가 훨씬 많을 것입니다. :) –

답변

0

당신이 확인 했 마이크 게인 설정, 믹서 설정, 사용중인 마이크 하드웨어 입력과 호환되는지 당신이 그것을 가지고 에 푹 빠져서? 연결 상태에서 대부분의 마이크를 회선에 연결하면 제대로 작동하지 않습니다. 마이크에 이러한 종류의 입력을 구동 할만큼 충분한 출력 전압이 없습니다.

0

내 생각에 (순수하게 추측하면) 비트 깊이 또는 샘플 속도가 어떻게 든 올바르지 않습니다. 16/44100을 사용하고 있다면, 지원된다고 생각합니다. 하지만 사운드 카드가이 속도로 설정되지 않았을 수 있습니다. 비트 깊이를 변경할 때 물리적으로 켜고 끄는 외부 Edirol 사운드 카드가 있습니다 (그리고 별도의 스위치를 조정하십시오).

관련 문제