4

p/invoke メソッドを使用してwavサウンドを再生します。Windows Media Player を呼び出してmp3サウンドを再生する方法はいくつかありますが、遅くて面倒です。

mp3短いファイルを再生する簡単な方法はありますか?

これは主に、画面や音楽を見ていないときに、アプリケーションのプロンプト可聴キューを提供するためのものです。

ありがとう!

4

2 に答える 2

14

mp3 を再生する方法を探している場合:

パブリック クラス サウンド
{
    [DllImport("aygshell.dll", SetLastError = true)]
    プライベート スタティック extern IntPtr SndPlaySync(string pszSoundFile, uint dwFlags);
    [DllImport("aygshell.dll")]
    private static extern uint SndOpen(string pszSoundFile, ref IntPtr phSound);
    [DllImport("aygshell.dll")]
    private static extern uint SndPlayAsync(IntPtr hSound, uint dwFlags);
    [DllImport("aygshell.dll")]
    private static extern uint SndClose(IntPtr hSound);
    [DllImport("aygshell.dll")]
    private static extern uint SndStop(int SoundScope, IntPtr hSound);

    const int SND_SCOPE_PROCESS = 0x1;
    private static Random _random = new Random();

    // init スタートアップ パス...一時的な mp3 を保持する場所
    プライベート静的文字列 _startupPath;
    public static string StartupPath
    {
        get { return Sound._startupPath; }
        設定 { Sound._startupPath = 値; }
    }

    プライベート列挙型 SND
    {
        同期 = 0x0000、
        非同期 = 0x0001、
        NODEFAULT = 0x0002、
        メモリ = 0x0004、
        ループ = 0x0008、
        停止 = 0x0010、
        今待機 = 0x00002000、
        エイリアス = 0x00010000、
        エイリアス_ID = 0x00110000、
        ファイル名 = 0x00020000、
        リソース = 0x00040004
    }

    public static void PlaySound(string fileName)
    {
        PlaySound(ファイル名, null);
    }

    public static void PlaySound(string fileName, WaitCallback callback)
    {
        SndStop(SND_SCOPE_PROCESS, IntPtr.Zero);
        ThreadPool.QueueUserWorkItem(playSoundProcess,
            新しいオブジェクト[] {ファイル名、コールバック});
    }

    private static void playSoundProcess(オブジェクト o)
    {
        object[] par = (object[])o;
        文字列ファイル名 = (文字列)par[0];
        WaitCallback コールバック = (WaitCallback)par[1];
        SndPlaySync(ファイル名, 0);

        試す
        {
            File.Delete(ファイル名);
        }
        キャッチ
        { }

        if (コールバック != null)
            callback.Invoke(ファイル名);
    }

    public static void ClearSounds()
    {
        SndStop(SND_SCOPE_PROCESS, IntPtr.Zero);
        試す
        {
            string[] oldFiles = Directory.GetFiles(StartupPath, "*.mp3");
            foreach (oldFiles の文字列 f)
                File.Delete(f);
        }
        キャッチ
        { }
    }



    public static void PlaySound(byte[] mp3, WaitCallback コールバック)
    {
        string temp = string.Format("{0}\\{1}-{2}.mp3", StartupPath, DateTime.Now.Ticks, _random.Next());
        使用 (FileStream fs = File.Create(temp))
        {
            fs.Write(mp3, 0, mp3.Length);
        }

        PlaySound(一時、コールバック);
    }
}
于 2009-12-28T23:15:21.943 に答える
5

CF Framework 3.5には、.WAVファイルの再生のサポートが含まれるようになりました。

名前空間System.Media.SoundPlayer

キューと効果音用の短いWAVファイルは、 「すぐに再生できる」ため、MP3よりも高速に再生される可能性があります...

于 2008-10-15T18:44:00.193 に答える