2017-03-14 7 views
0

기본 오디오 장치를 사용하지 않는 waveOut에서 .init()를 호출 할 때마다 WaveBadFormat 예외가 발생합니다. 기본 장치를 변경하면 드라마없이 웨이브 아웃을 열 수 있습니다. 모든 경우의 웨이브 프로 바이더는 ieee 44.1k 2 채널 웨이브 형식을 사용하는 동일한 믹서입니다.WaveBadFormat .Init()를 호출 할 때 기본값이 아닌 오디오 장치 Naudio

아래 코드는 응용 프로그램이 시작될 때 호출됩니다.

MixingWaveProvider32 mixer = new MixingWaveProvider32(); 
WaveOut wavOut = new WaveOut(); 
wavOut.DesiredLatency=100; 
wavOut.Init(mixer); 

그러나 사용자가 다음 다른 재생 장치를 선택하면 다음 코드
wavOut.Stop(); 
wavOut.Dispose(); 
wavOut = new WaveOut(); 
wavOut.DeviceNumber = ((WaveCapabilities)comboBox2.SelectedItem).Index; 
wavOut.Init(mixer); 

그리고 wavOut.Init (믹서)

이라고 나쁜 포맷 예외를 발생.

디바이스의 비공개 멤버를 검사해도 supportedWaveFormats에 차이가없는 것 같지만, SupportedWaveFormat 열거 가능 옵션 중 어떤 것도 MixingWaveProvider32가 사용하는 32 비트 ieee 웨이브 형식과 일치하지 않는다고 생각합니다.

다른 기기의 waveOut 옵션에 대한 ID가 무엇이든지간에이 기기가 문제가되지 않는 이유는 누구나 알 수 있습니다.

답변

0

예, 경우에 따라 WaveOut 장치 드라이버는 특정 형식 만 허용합니다. NAudio에는 WaveFloatTo16Provider과 같은 도우미 클래스가 포함되어 있으며 MixingWaveProvider32을 랩핑하여 WaveOut.Init 메서드

으로 전달하기 전에 사용할 수 있습니다.