2008-09-19 3 views
3

DirectSound를 통해 간단한 wav 파일을 재생하는 C# 응용 프로그램이 있습니다. 테스트 데이터를 사용하여 코드가 정상적으로 작동했습니다. 그러나 실제 데이터를 사용하면 보조 버퍼 생성시 매우 도움이되지 않는 오류가 발생합니다. "ArgumentException : 값이 예상 범위 내에 들지 않습니다."일부 wav 파일은 내 C# directsound 앱에서 재생되지만 일부는 재생되지 않는 이유는 무엇입니까?

테스트 wav에는 512kbps 비트 전송률, 16 비트 오디오 샘플 크기 및 32kHz 오디오 샘플 속도가 있습니다. 새로운 웨이브는 각각 1152kbps, 24bit 및 48kHz입니다. 이러한 큰 값을 처리하기 위해 directsound를 얻으려면 어떻게해야합니까? 그렇지 않으면 파일을 재생하기 전에 프로그래밍 방식으로 이러한 값을 검색 할 수 있습니까?

그것은 내가 사용의 DirectX v9.00.1126 관리, 그리고 나는 다음과 같은 몇 가지 샘플 코드를 포함 시켰습니다 :

using DS = Microsoft.DirectX.DirectSound; 
... 
DS.Device device = new DS.Device(); 
device.SetCooperativeLevel(this, CooperativeLevel.Normal); 
... 
BufferDescription bufferDesc = new BufferDescription(); 
bufferDesc.ControlEffects = false; 
... 
try 
{ 
    SecondaryBuffer sound = new SecondaryBuffer(path, bufferDesc, device); 
    sound.Play(0, BufferPlayFlags.Default); 
} 
... 

추가 정보 : 실제의 wav 파일 중 하나를 윈도우 미디어 플레이어에서 재생되지 않습니다 , 그들은 코덱이 winamp에서 정상적으로 플레이하는 동안 파일 재생에 필요하다는 것을 알려줍니다.

추가 정보 2 : 실제 테스트 데이터의 바이트와 실제 데이터가 나쁜 것을 비교하면 RIFF 청크가 지나간 후에 잘못된 데이터가 "bext"덩어리로 표시되어 인터넷에서 메타 데이터라는 것을 알 수 있습니다 브로드 캐스트 오디오 확장과 관련된 테스트 데이터는 곧바로 fmt 청크로 이동합니다. 나쁜 데이터에 fmt 청크가 있기 때문에 나쁘게 형성되었는지 또는 로더가 fmt 데이터를 더 자세히 조사해야하는지는 알 수 없습니다. 나는이 루즈베예요 청크에 대한 정보를 나에게 공급하는 사람들로부터 정보를 얻을 수 있는지를 알 수 있습니다. 데이터를 제거 할 수 있다면 코드가 여전히 작동 할 수 있습니다.

+0

추가 정보 : WAV 파일에 대한 정보는 해당 파일이 모노 파일임을 나타냅니다. – tzot

답변

6

모든 사운드 카드가 24 비트 샘플 재생을 지원하는 것은 아니며 때로는 해당 사운드 카드가 해당 모드에서 독점적으로 열어야하는 경우가 있습니다. 샘플 속도와 비슷한 문제가 있습니다. 사운드 카드가 44.1kHz에서 작동 중일 수 있습니다.이 경우 48kHz를 다시 샘플링하여 재생해야합니다.

저는 주어진 WAV 파일의 샘플 속도와 비트 깊이를 알아낼 수있는 NAudio이라는 오픈 소스 .NET 오디오 라이브러리를 작성했습니다. 또한 오디오를 재생하는 다른 방법 (예 : Wav ... API)과 DMO 리샘플링 객체를 사용하여 파일을 리샘플링하는 기능을 제공합니다.

+0

건배 표시. 당신의 앱을 살펴볼 것입니다. – tenpn

+0

샘플 앱을 사용해도 여전히로드되지 않습니다. 이제는 더 나은 오류 메시지가 나타납니다. "웨이브 파일이 아니고 fmt 헤더가 없습니다" 자세한 내용은 내 질문을 참조하십시오 ... – tenpn

4

샘플링 문제 외에도 WAV는 단지 컨테이너 형식이며 수많은 오디오 형식 (AVI는 비디오 컨테이너처럼)에서 오디오를 압축 할 수 있습니다. 따라서 GSpot과 같은 도구를 사용하여 WAV가 비표준 형식으로 인코딩되고 코덱을 설치하는지 확인할 수 있습니다. Winamp에는 WMP보다 기본적으로 설치된 코덱이 더 많습니다.이 코덱은 Winamp에서 재생되며 WMP에서는 재생되지 않습니다.

+0

감사합니다. 파일 형식은 PCM입니다. 원본 게시물의 통계가 다릅니다. 그래도 좋은 응용 프로그램. – tenpn

관련 문제