2014-04-28 2 views
2

NAudio MixingSampleProvider의 AddMixerInput 메서드를 사용하여 여러 사운드 파일을 동시에 재생하려고합니다. 이 페이지에있는 AudioPlaybackEngine을 사용하고 있습니다 : https://gist.github.com/markheath/8783999NAudio에서 여러 사운드를 함께 재생하면 "모든 믹서 입력에 동일한 WaveFormat이 있어야합니다"라는 예외가 발생합니다.

그러나 다른 파일을 재생하려고하면 일부 사운드를 재생할 때 예외가 발생합니다. "모든 믹서 입력에는 동일한 WaveFormat이 있어야합니다. 내가 가지고있는 파일들은 동일한 샘플 속도를 가지고 있지 않습니다 (일부 파일은 44100 대신 샘플 속도로 7046을가집니다).

파일을 읽을 때 샘플 속도가 모두 44100으로 변환되도록 CachedSound 클래스를 수정하는 방법이 있습니까?

감사합니다.

답변

2

오디오 스트림을 동일한 샘플 속도로 변환하지 않고 함께 믹스 할 수 없습니다. NAudio에는 리샘플러에 액세스하는 세 가지 방법이 있습니다.

  • WaveFormatConversionStream - 이것은 후드 아래에 ACM 리샘플러 구성 요소를 사용합니다. IEEE float을 리샘플링하는 데 문제가있을 수 있습니다.
  • MediaFoundationResampler - MediaFoundation을 사용합니다. 리샘플링 품질을 조정할 수 있습니다.
  • WdlResamplingSampleProvider - 최신 NAudio의 새로운 기능으로 완전히 관리되는 리샘플링을 제공합니다.

일치하는 샘플 속도는 물론 일치하는 채널 수도 필요합니다. NAudio는 모노를 스테레오로 또는 그 반대로 변환하는 다양한 방법을 가지고 있습니다.

+0

안녕하세요! 당신은 AudioPlaybackEngine의 "fire and forget"의 저자입니다! 나는 너에게 직접 도움을 청한다. 불행히도 나는 NAudio에서 완전히 초보자이며, 실제로 이것을 처음 사용했습니다. MediaFoundationResampler에 대한 약간의 검색을 수행했으며 MixingSampleProvider와 함께 사용하는 예제를 발견했습니다. 그러나 AudioPlaybackEngine과 함께 사용하는 방법을 잘 모르겠습니다. 어떻게하는지 가르쳐 주시겠습니까? 정말 고맙습니다! – noir

+0

나는 그것을하는 방법을 이해했다. MediaFoundationResampler는 IWaveProvider를 가져 와서 IWaveProvider를 출력 할 수 있습니다. 그래서 우리는 AudioFileReader를 얻은 후에 CachedSound 클래스에서 그것을 사용할 수 있고 원래의 AudioFileReader 대신에 리 샘플러를 사용할 수 있습니다. AudioPlaybackEngine에는 이미 실제로 // 리사이클러를 추가 할 수있는 위치를 표시하는 TODO가있었습니다. Mark 고맙습니다! NAudio는 멋지다! – noir

관련 문제