2012-03-05 3 views
2

나는 런타임시 음파를 생성하고 재생하기 위해 NAudio를 사용하고 있습니다.NAudio를 사용하여 WaveProviders를 믹스

나는이 자습서를 사용하여 생성 사인파를 얻기 위해 관리했습니다 : http://mark-dot-net.blogspot.com/2009/10/playback-of-sine-wave-in-naudio.html

그러나 - 내가 정말 필요로하는 런타임하는 WaveMixerStream 많은 개별 파도를 추가 할 수 있습니다.

이 작업을 수행하려면 개별 WaveStream이 필요하지만 WaveProvider의 출력을 WaveStream으로 변환하여 WaveMixerStream에 추가하는 방법을 모르겠습니다.

나는 이것이 가능하지 않으므로 파생 된 WaveStream 클래스를 제공하도록 코드가 변경되었다고 가정합니다.

public override long Length 
    { 
     get { return long.MaxValue; } 
    } 

을하지만 위치하는 방법을 잘 모르겠어요 :

내가 추가 한

public override long Position 
{ 
    get 
    { 
     return //What here? 
    } 
    set 
    { 
     // What here? = value; 
    } 

} 

그래서 질문은 : 1. 윌이 작품을? 2. 위치를 얻거나 설정하는 방법은 무엇입니까?

미리 감사드립니다.

답변

2

IWaveProviderWaveStream의 차이점은보고 길이와 위치 및 위치 설정을 지원한다는 것입니다. 그러나 IWaveProvider을 전달하면 길이를 알 수 없으므로 위치를 설정할 수 없습니다. Position 설정 도구에서 아무 것도하지 않고 Position 게터의 경우 지금까지 Read 메서드에서 반환 된 총 바이트 수를 반환합니다.이 값을 저장하려면 long 유형의 전용 변수 만 있으면됩니다.

다른 접근법은 WaveMixerStream의 코드를 복사하여 WaveStream 대신 IWaveProvider으로 만드는 것입니다. 이렇게하면 실제로는 간단 해집니다. 다시 배치 할 때 WaveMixerStream의 복잡성으로 인해 모든 믹서 입력의 위치가 올바르게 조정됩니다.

(덧붙여 말하자면, 나는 사람들이 ISampleProvider 인터페이스를 사용하도록 장려 할 것이며 이미 정확히 MixingSampleProvider이 있습니다. 아직이 튜토리얼을 작성하는 데는 어려움이 있습니다. 모든 곳에서)

+0

귀하의 빠르고 유용한 도움에 감사드립니다. 나는 그것을 가지고 있다고 생각하지만 추악 해지면이 질문으로 돌아갈 수 있습니다! 다시 한번 감사드립니다. – jwddixon

+1

지난밤에 (완전히 테스트되지 않은) MixingWaveProvider32를 실제로 체크인 했으므로 IWaveProvider 라우트로 가고 싶다면 그것을 볼 수 있습니다. –

+0

@MarkHeath : ISampleProvider 및 MixingSampleProvider 사용에 대한 자습서가 있습니까? – user523234

관련 문제