2017-02-26 2 views
0

NAudio 및 ASIO를 사용하여 일련의 wav 파일을 재생하고 있습니다. 오디오 카드가 지원하기 때문에 ASIO를 사용해야합니다. 나는 각각의 wav를 이런 식으로 연주 할 수 있었다 :NAudio ASIO 재생 wav

 waveRead = new WaveFileReader(completeStreamMS); //completeStreamMS is a memorystream 
    waveRead.Position = 0; 
    pcm = new WaveChannel32(waveRead); 
    reductionStream = new BlockAlignReductionStream(pcm); 
    reductionStream.Position = 0; 
    waveOutDevice.Init(reductionStream); 
    waveOutDevice.Play(); 

이제 wav가 시작되기 전에 1 초의 침묵을 삽입해야한다. 내가 찾은 유일한 방법은 OffsetSampleProvider를 사용하는 것입니다,하지만이

 ISampleProvider isp = WaveExtensionMethods.ToSampleProvider(waveRead); 
    var offset = new SampleProviders.OffsetSampleProvider(isp); 
    offset.DelayBy = TimeSpan.FromSeconds(1); 
    var wp = new SampleProviders.SampleToWaveProvider(offset); 
    waveOutDevice.Init(wp);` 
    waveOutDevice.Play(); 

같이 할 경우 첫 번째 WAV는 잘 재생하지만, 최대한 빨리 (중지)을 waveOutDevice 또는 나는 새로운 하나를 reinstantiate하려고 그 위치에서 프로그램 실행이

System.ExecutionEngineException 
Cannot intercept exception. Debugged program can not be continued and properties can not be evaluated. 

으로 이해할 수 없습니다. 도와주세요. 감사합니다

답변

0

ASIO가있는 경우, 출력 장치를 한 번 열어 두었다가 연주 한 채로두고 입력을 변경하는 것이 좋습니다. 예를 들어 입력으로 사용 된 MixingSampleProvider에서 항목을 추가하거나 제거 할 수 있습니다.