2012-10-17 2 views
2

응용 프로그램의 수명 내내 비동기 적으로 오디오 파일에 사운드 파일을 덤프 할 수 있어야합니다. 나는 재생할 파일을 요청하고 이미 재생중인 파일과 섞여 있어야합니다. 동일한 파일이 여러 번 호출 될 수 있습니다. WaveMixerStream은 갈 길입니까? 응용 프로그램 수명 동안 플레이어 또는 믹서 스트림을 열어 두는 것이 안전합니까? 아니면 성능 문제가 발생할 수 있습니다.NAudio 비동기 오디오

//globals 
IWavePlayer _Context; 
WaveMixerStream32 _Mixer; 

//constructor 
_Context = new DirectSoundOut(); 
_Mixer = new WaveMixerStream32(); 
_Context.Init(Instance._Mixer); 
_Context.Play(); 

//asynchronous sound output, on demand from user interface 
_Mixer.AddInputStream(sound.FileWaveStream); 

답변

0

여기에는 여러 가지 방법이 있지만 여기에는 하나의 옵션이 있습니다. 항상 플레이어와 믹서를 만듭니다. MixingSampleProvider를 믹서로 사용하여 SampleToWaveProvider 또는 SampleToWaveProvider16을 플레이어에 대한 입력으로 전달합니다.

재생을 멈추지 않으려면 MixingSampleProvider를 사용자 정의하여 활성화 된 입력이 없어도 읽은 샘플의 수를 항상 반환하거나 무음의 무언가 스트림 인 더미 입력을 추가해야합니다 .

소리를 재생하려면 믹서의 AddMixerInput에 ISampleProvider (예 : AudioFileReader)를 전달하면됩니다. 입력이 끝나면 입력을 자동 제거합니다.

대신 다른 사운드를 재생할 새 플레이어 개체를 만드는 것이 좋습니다. 단점은 재생이 중지 될 때까지 플레이어 객체를 활성 상태로 유지하는 방법을 찾는 것입니다 (아마 사전에 저장 한 다음 PlaybackStopped 이벤트가 발생하면 Disposing and takeing). 장점은 필요하지 않을 때 사운드 장치를 열어 두지 않고 다른 샘플 속도/채널 수로 사운드를 쉽게 재생할 수 있다는 것입니다.