3

如何在 C# 中以很少的延迟播放音频文件(.mp3)?我的意思是,文件应该在提供用户输入之后才开始播放。

另外,如何同时播放两个音频文件?

4

3 回答 3

0

为了尽可能减少延迟,您需要在没有/静音数据的情况下运行音频播放,并且在感兴趣的事件中,您将向已经活动的设备提供真实的播放数据。通过这种方式,您可以消除可能发生的激活音频播放设备的开销。开销并没有那么大,因此您可能希望不要使您的应用程序过于复杂。

可以选择播放音频的 API:DirectShow.NET,尤其是 NAudio。

除非您打算在独占模式下使用播放设备(您不太可能想要这样做),否则所有 API 都支持多个独立流的播放,并且所有混合都是在幕后自动为您完成的。

于 2013-01-19T12:27:13.620 回答
0

看看NAudio库。

要同时播放多个文件,请参阅这篇文章

于 2013-01-19T12:22:01.807 回答
0

我将向您展示我是如何使用 DirectX AudioVideoPlayback 做到这一点的:

public class MusicPlayer
{
    private static Audio m_Audio;

    private static void Loop(Object Sender, EventArgs e)
    {
        ((Audio)Sender).SeekCurrentPosition(0d, SeekPositionFlags.AbsolutePositioning);
    }

    public static void Dispose()
    {
        if (m_Audio != null)
        {
            m_Audio.Stop();
            m_Audio.Dispose();
            m_Audio = null;
        }
    }

    public static void Mute()
    {
        if ((m_Audio != null) && m_Audio.Playing)
            m_Audio.Volume = -10000;
    }

    public static void Play(String filePath, Boolean loop)
    {
        if (File.Exists(filePath))
        {
            Dispose();

            if (m_Audio == null)
                m_Audio = new Audio(filePath);
            else
                m_Audio.Open(filePath);

            if (loop)
                m_Audio.Ending += Loop;

            m_Audio.Volume = MusicSettings.Volume - 10000;
            m_Audio.Play();
        }
    }

    public static void Unmute()
    {
        if (m_Audio != null)
            m_Audio.Volume = MusicSettings.Value - 10000;
    }
}

你可以从这个片段开始。

于 2013-01-19T14:10:25.797 回答