0

我正在使用System.Media.SoundPlayerAPI 在我的应用程序中播放声音文件。

using System.Media;

public class MySoundPlayer
{
     private SoundPlayer player = new SoundPlayer();

     public PlayFile(string file)
     {
          try 
          {
              player.SoundLocation = fileName;
              player.Load();
              player.Play();
          }
          catch (Exception e) { Debug.WriteLine(e.Message); }
     }
}

这几乎适用于所有 WAV 文件。但是,我发现有一种类型的 wav 文件,RF64类型(它有一个额外的(但在我的情况下总是空的)'JUNK'块,以防文件大小可能超过 4GB。SoundPlayer加载这个文件就好了,不会抛出任何异常,但不会播放。另一方面,Windows Media Player 可以正常播放,所以文件看起来是正确的。

作为替代方案,我尝试了另一种播放文件的方式:

[DllImport("winmm.dll", SetLastError = true, CallingConvention = CallingConvention.Winapi)]
static extern bool PlaySound(string pszSound,IntPtr hMod,SoundFlags sf);

public PlayFile(string file)
{
    // (These flags have been defined as 0x00020000 and 0x0001)
    PlaySound(filename, IntPtr.Zero, SoundFlags.SOUND_FILENAME | SoundFlags.SOUND_ASYNC); 
}

同样,这可以很好地播放正常的 WAV 文件,但会出现错误“叮!” 当它得到一个 RF64 文件时。

有没有办法让这些 API 来播放我的文件?或者是否还有另一个 Windows API 可以播放 RF64 WAV 文件?

4

1 回答 1

1

SoundPlayer 的功能极其有限。它仅播放标准 WAV 文件,无法重新定位或设置音量。您可以尝试查看MediaElement来自 WPF 的文件是否会播放您的 WAV 文件。

如果这不起作用,一个选项是NAudio,这是我维护的一个开源库,WaveFileReader该类可以读取 RF64 文件。

于 2013-10-24T19:25:30.587 回答