2011-02-26 6 views
1

나는 다음과 같은 코드가 있습니다 :NAudio C# IWavePlayer에서 읽은 바이트 수를 제어하는 ​​방법은 무엇입니까?

IWavePlayer player = new WaveOut(); 
WaveStream reader = new WaveFileReader(filePath); 
WaveChannel32 input = new WaveChannel32(reader); 

AmplitudeStream ampStream = new AmplitudeStream(input); 
ampStream.AmplitudeEventHandler += new EventHandler<AmplitudeArgs>(AmplitudeStreamHandler); 

player.Init(ampStream); 
player.Play(); 

AmplitudeStream 내가 그렇게 만든 클래스가 WaveStream를 구현이다 내가 '트랙 수와 데이터가 파일에서 읽을 때마다 이벤트를 보낼 수 있도록. 그러나, 내 문제는 얼마나 많은 바이트를 읽을지를 제어하고 싶다. AmplitudeStream의 Read 함수가 Play() 함수에 의해 호출되므로, 읽은 바이트 수를 제한하는 방법에 대해서는 알지 못합니다 (항상 35,280).

어떻게 하시겠습니까? 내가 볼 수 있도록 내 파일을 재생하기 때문에 Play() 명령을 사용하고 있습니다. 그래서 Read() 명령 중에 파일을 재생할 다른 방법이 있다면 다음과 같습니다.

byte[] buffer = byte[8192] 
int bytesRead = 0; 

do{ 

bytesRead = ampStream.Read(buffer,0,buffer.Length); 

}while(bytesRead != 0); 

@override 
private int Read(byte[] buffer, int offset, int count) 
{ 

//some command to play the file here 

} 

나는 알고 싶습니다. 감사! 그 외에, AmplitudeStream의 입력으로 WaveChannel32 클래스를 사용하지 않는 방법이 있습니까?

답변

2

은 NAudio 데모에서 파형 드로잉이 어떻게 이루어 졌는지 보여줍니다.이 작업은 원하는대로 정확하게 수행됩니다. 그것은 기본적으로 Read를 가로 채고, 그리기 코드가 구독 할 수있는 n 샘플마다 이벤트를 보냅니다.

업데이트 읽기 바이트 수는 재생 대기 시간의 함수입니다. 낮은 대기 시간 = 적은 읽기 바이트 수입니다. 소스 스트림을 8192 블록 크기로만 읽을 수 있다면 중간 버퍼링 스트림을 도입하는 것이 좋습니다.

+0

안녕하세요. 실제로, 내가 의미하는 바는 .play() 함수를 사용하여 읽는 바이트 수를 제어 할 수 있기를 원했던 것입니다. 현재 play 함수를 사용할 때마다 항상 35280 바이트를 읽습니다. 한 번에 8192 바이트 만 읽길 원합니다. – user488792

관련 문제