C# で音声ファイル (.mp3) をほとんど遅延なく再生するにはどうすればよいですか? つまり、ユーザー入力が提供された直後とそれ以降にファイルの再生が開始されるはずです。
また、同時に 2 つのオーディオ ファイルを同時に再生するにはどうすればよいですか?
C# で音声ファイル (.mp3) をほとんど遅延なく再生するにはどうすればよいですか? つまり、ユーザー入力が提供された直後とそれ以降にファイルの再生が開始されるはずです。
また、同時に 2 つのオーディオ ファイルを同時に再生するにはどうすればよいですか?
DirectXAudioVideoPlaybackを使用してこれを行う方法を示します。
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;
}
}
このスニペットから始めることができます。
可能な限り遅延を最小限に抑えるには、データなし/無音でオーディオ再生を実行する必要があり、関心のあるイベントでは、実際の再生データを既にアクティブなデバイスに提供します。このようにして、発生する可能性のあるオーディオ再生デバイスをアクティブにするオーバーヘッドを排除します。オーバーヘッドはそれほど大きくないため、アプリを過度に複雑にしないことをお勧めします。
オーディオを再生するための API の選択肢があります:特にDirectShow.NET、 NAudio 。
排他モードで再生デバイスを操作する場合を除いて (これはあまりやりたくありません)、すべての API は複数の独立したストリームの再生をサポートし、すべてのミキシングはバックグラウンドで自動的に行われます。