如何在 C# 中以很少的延迟播放音频文件(.mp3)?我的意思是,文件应该在提供用户输入之后才开始播放。
另外,如何同时播放两个音频文件?
如何在 C# 中以很少的延迟播放音频文件(.mp3)?我的意思是,文件应该在提供用户输入之后才开始播放。
另外,如何同时播放两个音频文件?
为了尽可能减少延迟,您需要在没有/静音数据的情况下运行音频播放,并且在感兴趣的事件中,您将向已经活动的设备提供真实的播放数据。通过这种方式,您可以消除可能发生的激活音频播放设备的开销。开销并没有那么大,因此您可能希望不要使您的应用程序过于复杂。
可以选择播放音频的 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;
}
}
你可以从这个片段开始。