내 C# directsound 앱에서 일부 wav 파일은 재생되지만 일부는 재생되지 않는 이유는 무엇입니까?

StackOverflow https://stackoverflow.com/questions/100654

  •  01-07-2019
  •  | 
  •  

문제

directsound를 통해 간단한 wav 파일을 재생하는 C# 응용 프로그램이 있습니다.내가 가지고 있는 테스트 데이터를 사용하면 코드가 제대로 작동했습니다.그러나 실제 데이터를 사용했을 때 보조 버퍼 생성 시 매우 도움이 되지 않는 오류가 발생했습니다."인수예외:값이 예상 범위에 속하지 않습니다."

테스트 wav의 비트 전송률은 512kbps, 오디오 샘플 크기는 16비트, 오디오 샘플 속도는 32kHz였습니다.새로운 wav는 각각 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 파일은 Windows Media Player에서도 재생되지 않습니다. 파일을 재생하려면 코덱이 필요하지만 Winamp에서는 잘 재생된다는 뜻입니다.

추가 정보 2:작업 중인 테스트 데이터와 잘못된 실제 데이터의 바이트를 비교하면 RIFF 청크를 지나면 잘못된 데이터에 "bext" 청크가 있고 인터넷에서 나에게 알려주는 것은 방송 오디오 확장과 관련된 메타데이터라는 것을 알 수 있습니다. 테스트 데이터는 곧바로 fmt 청크로 들어갑니다.잘못된 데이터에 fmt 청크가 있습니다. 그래서 그것이 잘못된 형식인지 또는 로더가 fmt 데이터를 더 찾아야 하는지 알 수 없습니다.나에게 데이터를 제공하는 사람들로부터 이 루즈 벡스트 청크에 대한 정보를 얻을 수 있는지 확인할 수 있습니다. 만약 그들이 그것을 제거할 수 있다면 내 코드는 여전히 작동할 수 있습니다.

도움이 되었습니까?

해결책

모든 사운드 카드가 24비트 샘플 재생을 지원하는 것은 아니며, 지원하더라도 해당 모드에서만 열어야 하는 경우가 많습니다.샘플링 속도에도 비슷한 문제가 있습니다.사운드 카드가 44.1kHz에서 작동할 수 있으며, 이 경우 재생하려면 48kHz를 리샘플링해야 합니다.

저는 다음과 같은 오픈 소스 .NET 오디오 라이브러리를 작성했습니다. NAudio 이를 통해 주어진 WAV 파일의 샘플링 속도와 비트 심도를 확인할 수 있습니다.또한 오디오를 재생하는 대체 방법도 제공합니다(예:웨이브를 통해서...API) 및 DMO 리샘플러 개체를 사용하여 파일을 리샘플링하는 기능이 있습니다.

다른 팁

샘플링 문제 외에도 WAV는 컨테이너 형식일 뿐이며 오디오는 다양한 오디오 형식으로 압축될 수 있습니다(AVI가 비디오의 컨테이너인 것처럼).따라서 다음과 같은 도구를 사용할 수 있습니다. 지스팟 WAV가 비표준 형식으로 인코딩되었는지 확인하고 코덱을 설치하십시오.Winamp에는 기본적으로 WMP보다 더 많은 코덱이 설치되어 있습니다. 이는 Winamp가 이를 재생하고 WMP는 재생하지 않는다는 것을 설명합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top