Я использую System.Media.SoundPlayer
API для воспроизведения звуковых файлов в своем приложении.
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 type (у которого есть дополнительный (но в моем случае всегда пустой) фрагмент «JUNK» на тот случай, если размер файла может превысить 4 ГБ. SoundPlayer
загружает этот файл просто отлично, не выдает никаких исключений, но не воспроизводится. Проигрыватель Windows Media, с другой стороны, воспроизводит его просто отлично, поэтому файл кажется правильным.
В качестве альтернативы я попробовал другой способ воспроизведения файла:
[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, который воспроизводит WAV-файл RF64?