DirectSound(8)劣质MP3

我有一个类(旧的免费软件),它很好地包装了DirectX的声音功能,并允许我控制声音的音量和立体声。但是声音(来自MP3文件)听起来“被冲洗”,压缩,质量不好,我也不知道为什么。在任何播放器中播放时,文件本身听起来都不错。 从我可以阅读的代码中,它使用DirectX8,创建一个16位立体声主缓冲区并加载文件。

一些代码片段...

加载文件

// creates IAMMultiMediaStream instance
  SCheck( CoCreateInstance( CLSID_AMMultiMediaStream,nil,CLSCTX_INPROC_SERVER,IID_IAMMultiMediaStream,FAMMultiMediaStream ) );

  SCheck( FAMMultiMediaStream.Initialize(STREAMTYPE_READ,AMMSF_NOGRAPHTHREAD,nil) );

  // creates IMediaStream instance
  SCheck( FAMMultiMediaStream.AddMediaStream(nil,@MSPID_PrimaryAudio,FMediaStream) );

  SCheck( FAMMultiMediaStream.GetMediaStream(MSPID_PrimaryAudio,FMediaStream) );

  // opens the file
  v := FileName;
  SCheck( FAMMultiMediaStream.OpenFile(PWideChar(v),0) );

  // Get IMediaControl instance
  SCheck( FAMMultiMediaStream.GetFilterGraph(FGraphBuilder) );
  SCheck( FGraphBuilder.QueryInterface(IID_IMediaControl,FMediaControl) );
  SCheck( FGraphBuilder.QueryInterface(IID_IMediaSeeking,FMediaSeeking) );

  // creates IAudioMediaStream instance
  SCheck( FMediaStream.QueryInterface(IID_IAudioMediaStream,FAudioMediaStream) );

  SCheck( FAudioMediaStream.GetFormat(FFormat) );

  // creates IAudioData instance
  SCheck( CoCreateInstance(CLSID_AMAudioData,IID_IAudioData,FAudioData) );

  SCheck( FAudioData.setformat(FFormat) );

  // creates IAudioStreamSample instance
  SCheck( FAudioMediaStream.CreateSample(FAudioData,FAudioStreamSample) );

  SCheck( FAMMultiMediaStream.GetDuration(FDuration) );

  SCheck( FAMMultiMediaStream.SetState( STREAMSTATE_RUN ) );

初始化directsound

   DSCheck(FPrimaryBuffer.GetFormat(@wfx,sizeof(wfx),nil));
    if FStereo then
      wfx.nChannels:=2
    else
      wfx.nChannels:=1;
    wfx.wBitsPerSample:=(8 shl Ord(FBitsPerSample));
    wfx.nSamplesPerSec:=FSamplesPerSec;
    wfx.nBlockAlign:=(wfx.wBitsPerSample*wfx.nChannels)shr 3;
    wfx.nAvgBytesPerSec:=wfx.nSamplesPerSec*wfx.nBlockAlign;
    DSCheck(FPrimaryBuffer.setformat(@wfx));

    // get real format
    DSCheck(FPrimaryBuffer.GetFormat(@wfx,nil));
    FStereo:=wfx.nChannels=2;
    FBitsPerSample:=TacahBitsPerSample(wfx.wBitsPerSample shr 4);
    FSamplesPerSec:=wfx.nSamplesPerSec;

谁能给我一个从哪里开始寻找问题的线索?切换到DirectX 9或10/11有多困难?

更新: 我发现了一个新的难题,也许有人可以帮忙吗? fileloader方法报告44khz MP3的以下比特率:

每秒采样数:11025,每个采样位数:16

虽然16位有意义,但11025个采样是无意义的。

有什么想法吗?

yychuan123456 回答:DirectSound(8)劣质MP3

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2511404.html

大家都在问