有没有一种干净的方法可以在紧凑框架 3.5 中播放 mp3 声音

发布于 2024-07-07 21:01:45 字数 254 浏览 11 评论 0原文

我使用 p/invoke 方法来播放 wav 声音。 有多种方法可以调用 Windows Media Player 来播放 mp3 声音,但速度慢而且速度慢。 麻烦。

有没有一种简单的方法来播放短 mp3 文件?

这主要用于当您不看屏幕也不听音乐时应用程序提示声音提示

谢谢!

I use the p/invoke method to play wav sounds. There are ways of calling windows media player to play an mp3 sound, but its slow & cumbersome.

Is there an easy way to play a short mp3 file?

This is primarily for application prompting and audible cues when you are not looking at the screen and not music.

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

以歌曲疗慰 2024-07-14 21:01:45

如果您正在寻找播放 mp3 的方法:

public class Sound
{
    [DllImport("aygshell.dll", SetLastError = true)]
    private static 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 startup path... where you'll hold temp mp3s
    private static string _startupPath;
    public static string StartupPath
    {
        get { return Sound._startupPath; }
        set { Sound._startupPath = value; }
    }

    private enum SND
    {
        SYNC = 0x0000,
        ASYNC = 0x0001,
        NODEFAULT = 0x0002,
        MEMORY = 0x0004,
        LOOP = 0x0008,
        NOSTOP = 0x0010,
        NOWAIT = 0x00002000,
        ALIAS = 0x00010000,
        ALIAS_ID = 0x00110000,
        FILENAME = 0x00020000,
        RESOURCE = 0x00040004
    }

    public static void PlaySound(string fileName)
    {
        PlaySound(fileName, null);
    }

    public static void PlaySound(string fileName, WaitCallback callback)
    {
        SndStop(SND_SCOPE_PROCESS, IntPtr.Zero);
        ThreadPool.QueueUserWorkItem(playSoundProcess, 
            new object[] {fileName, callback });
    }

    private static void playSoundProcess(object o)
    {
        object[] par = (object[])o;
        string fileName = (string)par[0];
        WaitCallback callback = (WaitCallback)par[1];
        SndPlaySync(fileName, 0);

        try
        {
            File.Delete(fileName);
        }
        catch
        { }

        if (callback != null)
            callback.Invoke(fileName);
    }

    public static void ClearSounds()
    {
        SndStop(SND_SCOPE_PROCESS, IntPtr.Zero);
        try
        {
            string[] oldFiles = Directory.GetFiles(StartupPath, "*.mp3");
            foreach (string f in oldFiles)
                File.Delete(f);
        }
        catch
        { }
    }



    public static void PlaySound(byte[] mp3, WaitCallback callback)
    {
        string temp = string.Format("{0}\\{1}-{2}.mp3", StartupPath, DateTime.Now.Ticks, _random.Next());
        using (FileStream fs = File.Create(temp))
        {
            fs.Write(mp3, 0, mp3.Length);
        }

        PlaySound(temp, callback);
    }
}

If you are looking for a way to play mp3s:

public class Sound
{
    [DllImport("aygshell.dll", SetLastError = true)]
    private static 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 startup path... where you'll hold temp mp3s
    private static string _startupPath;
    public static string StartupPath
    {
        get { return Sound._startupPath; }
        set { Sound._startupPath = value; }
    }

    private enum SND
    {
        SYNC = 0x0000,
        ASYNC = 0x0001,
        NODEFAULT = 0x0002,
        MEMORY = 0x0004,
        LOOP = 0x0008,
        NOSTOP = 0x0010,
        NOWAIT = 0x00002000,
        ALIAS = 0x00010000,
        ALIAS_ID = 0x00110000,
        FILENAME = 0x00020000,
        RESOURCE = 0x00040004
    }

    public static void PlaySound(string fileName)
    {
        PlaySound(fileName, null);
    }

    public static void PlaySound(string fileName, WaitCallback callback)
    {
        SndStop(SND_SCOPE_PROCESS, IntPtr.Zero);
        ThreadPool.QueueUserWorkItem(playSoundProcess, 
            new object[] {fileName, callback });
    }

    private static void playSoundProcess(object o)
    {
        object[] par = (object[])o;
        string fileName = (string)par[0];
        WaitCallback callback = (WaitCallback)par[1];
        SndPlaySync(fileName, 0);

        try
        {
            File.Delete(fileName);
        }
        catch
        { }

        if (callback != null)
            callback.Invoke(fileName);
    }

    public static void ClearSounds()
    {
        SndStop(SND_SCOPE_PROCESS, IntPtr.Zero);
        try
        {
            string[] oldFiles = Directory.GetFiles(StartupPath, "*.mp3");
            foreach (string f in oldFiles)
                File.Delete(f);
        }
        catch
        { }
    }



    public static void PlaySound(byte[] mp3, WaitCallback callback)
    {
        string temp = string.Format("{0}\\{1}-{2}.mp3", StartupPath, DateTime.Now.Ticks, _random.Next());
        using (FileStream fs = File.Create(temp))
        {
            fs.Write(mp3, 0, mp3.Length);
        }

        PlaySound(temp, callback);
    }
}
一枫情书 2024-07-14 21:01:45

CF Framework 3.5 现在支持播放 .WAV 文件:

命名空间系统.Media.SoundPlayer

用于提示和声音效果的短 WAV 文件甚至可能比 MP3 播放更快,因为它们“可以播放”...

CF Framework 3.5 now includes support for playing .WAV files:

Namespace System.Media.SoundPlayer

Short WAV files for cues and sound-effects might even play faster than MP3s since they're "ready-to-play"...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文