0

API を使用System.Media.SoundPlayerしてアプリケーションでサウンド ファイルを再生しています。

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 ファイルで完全に機能します。ただし、ファイル サイズが 4GB を超える可能性がある場合に備えて、 RF64タイプの 1 つのタイプの wav ファイルがあることがわかりましたSoundPlayer(これには余分な (ただし、私の場合は常に空の) 'JUNK' チャンクがあります)。例外はスローされませんが、再生されません. 一方、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 ファイルを完全に再生しますが、「Ding!」というエラーが発生します。RF64 ファイルを取得したとき。

これらの API を取得してファイルを再生する方法はありますか? または、RF64 WAV ファイルを再生する別の Windows API はありますか?

4

1 に答える 1

1

SoundPlayer の機能は非常に限られています。標準の WAV ファイルのみを再生し、位置を変更したり音量を設定したりする手段は提供しません。MediaElementfrom WPF が WAV ファイルを再生するかどうかを試してみることができます。

それが機能しない場合、1 つのオプションはNAudio です。これは私が管理しているオープン ソース ライブラリであり、WaveFileReaderクラスは RF64 ファイルを読み取ることができます。

于 2013-10-24T19:25:30.587 に答える