如何在c#中播放低延迟/非常小延迟的音频文件

本文关键字:延迟 非常 文件 音频 播放 | 更新日期: 2023-09-27 17:54:21

如何在c#中播放音频文件(.mp3)并具有很小的延迟?我的意思是,文件应该在用户输入后立即开始播放。

另外,我怎么能在同一时间并行播放两个音频文件?

如何在c#中播放低延迟/非常小延迟的音频文件

看看NAudio库。

同时播放多个文件,参见这篇文章

为了获得最小可能的延迟,您需要在没有/沉默数据的情况下运行音频播放,并且在感兴趣的事件上,您将向已经激活的设备提供真实的播放数据。通过这种方式,您可以消除可能发生的激活音频播放设备的开销。开销并不是很大,所以你最好不要让你的应用过于复杂。

可以选择播放音频的api: DirectShow。. NET,特别是NAudio .

除非你要在独占模式下使用播放设备(你不太可能想要这样做),所有的api都支持多个独立流的播放,所有的混合都是在后台自动为你完成的。

我向您展示如何使用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;
    }
}