2012-10-31 3 views
2

사용자 지정 코덱을 사용하여 녹음 된 WAV 파일이 있습니다. 코덱이 내 컴퓨터에 설치되어 있고 Windows Media Player를 사용하여 내 컴퓨터에서 WAV 파일이 정상적으로 재생됩니다. NAudio 루틴을 사용하여 일부 C# 코드를 통해 WAV 파일을 재생하려고합니다. 사용자 정의 형식의 값은 이상하게 보였지만 WAV 파일 헤더를 분석하여 고심하게 검사했습니다.NAudio를 사용하여 사용자 지정 코덱으로 WAV 재생

WaveFormat wfOKI = WaveFormat.CreateCustomFormat(WaveFormatEncoding.DialogicOkiAdpcm, 8000, 1, 3000, 48, 3); 
WaveStream wsRaw = new WaveFileReader(txtFileName.Text); 
wsRaw = WaveFormatConversionStream.CreatePcmStream(wsRaw); // Line A 
wsRaw = new BlockAlignReductionStream(wsRaw);     // Line B 
WaveStream wsOKI = new RawSourceWaveStream(wsRaw, wfOKI); 

WaveOut woCall = new WaveOut(); 
woCall.Init(wsOKI); // <-- This line gives an error. 
woCall.Play(); 

while (woCall.PlaybackState == PlaybackState.Playing) 
{ 
    System.Threading.Thread.Sleep(300); 
} 

초기화()는 다음과 같은 오류가 발생합니다 : 'NAudio.MmException는'NAudio.dll에서 발생 유형의 처리되지 않은 예외 여기에 내가 파일을 재생하기 위해 함께 온 최고의 C# 코드입니다. 추가 정보 : waveButFormat은 waveOutOpen을 호출합니다.

코드가 사용자 지정 코덱을 사용하여 WAV를 재생하기위한 올바른 전략입니까? 나는 네 줄의 모든 주석을/라인 A와 B에서 (에러 메시지와 아무런 차이없이) 시도했다.

저는 Windows 7 64 비트, Visual Studio 2010 Professional (프로젝트는 x86으로 설정 됨) 및 NAudio 버전 1.6을 사용하고 있습니다. 저는 NAudio를 처음 접했지만 "표준"WAV (즉, 사용자 정의 코덱을 사용하지 않는 파일)를 재생하는 몇 줄을 보았습니다.

답변

2

WAV 파일이있는 경우 RawSourceWaveStream이 필요하지 않습니다. 변환 된 스트림을 직접 재생할 수 있습니다.

var wsRaw = new WaveFileReader(txtFileName.Text); 
wsRaw = WaveFormatConversionStream.CreatePcmStream(wsRaw); 
WaveOut woCall = new WaveOut(); 
woCall.Init(wsRaw); 
woCall.Play(); 

WaveSuite를 사용하는 경우 thread.sleep을 호출하여 기다리지 않아야합니다. GUI가있는 응용 프로그램에서 이것을 사용하지 않는다면 대신 WaveOutEvent를 시도하십시오.

+0

나는 내일까지 이것을 시도 할 수 없지만, 응답 할 시간을내어 주셔서 감사합니다. 코드는 Windows Form 응용 프로그램에서 실행됩니다. 한 가지 더요, 전용 Waveformat을 정의하고 사용해야 할 필요가 없다는 말입니까? (전용 코덱으로 Windows에서 재생되는 WAV 파일 용)? –

+0

WaveFormat은 이미 WAV 파일에 있으므로 WAV 파일 판독기가이를 처리하고 PC에 설치된 모든 코덱에 대해 시도 할 CreatePcmStream에 올바르게 전달해야합니다. –

+0

좋아, 그 말이 맞는 것 같아. 당신의 제안 된 코드를 시도했지만 ("var"를 "WaveStream"으로 변경하여 컴파일해야 함), Play() 행에 다음과 같은 오류가 발생했습니다. NAudio.MmException 유형의 처리되지 않은 예외가 NAudio.dll에서 발생했습니다. . 추가 정보 : acmStreamSize를 호출하는 AcmNotPossible. –

관련 문제