我正在尝试使用 NAudio 构建多轨播放器。
我已经成功加载了 4 个 MP3 并同步播放它们。
using NAudio.Wave;
using NAudio_Test.Properties;
using System;
using System.Windows.Forms;
namespace NAudio_Test
{
public partial class Form1 : Form
{
public WaveOut outputDevice1;
public MixingWaveProvider32 waveProvider;
public AudioFileReader audioFile1;
public AudioFileReader audioFile2;
public AudioFileReader audioFile3;
public AudioFileReader audioFile4;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
lbDirectory.Text = Settings.Default.StartingDirectory;
lbFile.Text = Settings.Default.File;
}
private void btnStop_Click(object sender, EventArgs e)
{
outputDevice1?.Stop();
}
private void OnPlaybackStopped(object sender, StoppedEventArgs args)
{
outputDevice1?.Dispose();
outputDevice1 = null;
audioFile1?.Dispose();
audioFile2?.Dispose();
audioFile3?.Dispose();
audioFile4?.Dispose();
audioFile1 = null;
audioFile2 = null;
audioFile3 = null;
audioFile4 = null;
}
private void btnPlay_Click(object sender, EventArgs e)
{
string file1 = lbDirectory.Text + "\\" + lbFile.Text + "_1.mp3";
string file2 = lbDirectory.Text + "\\" + lbFile.Text + "_2.mp3";
string file3 = lbDirectory.Text + "\\" + lbFile.Text + "_3.mp3";
string file4 = lbDirectory.Text + "\\" + lbFile.Text + "_4.mp3";
Console.WriteLine(file1);
Console.WriteLine(file2);
Console.WriteLine(file3);
Console.WriteLine(file4);
audioFile1 = new AudioFileReader(file1);
audioFile2 = new AudioFileReader(file2);
audioFile3 = new AudioFileReader(file3);
audioFile4 = new AudioFileReader(file4);
waveProvider = new MixingWaveProvider32(new IWaveProvider[] { audioFile1, audioFile2, audioFile3, audioFile4 });
outputDevice1 = new WaveOut();
outputDevice1.Init(waveProvider);
outputDevice1.Play();
}
}
}
我尝试了几种转发播放的方法,但最成功的是
private void btnFwd_Click(object sender, EventArgs e)
{
outputDevice1?.Stop();
Console.WriteLine(audioFile1.CurrentTime.ToString());
audioFile1.CurrentTime = audioFile1.CurrentTime + TimeSpan.FromSeconds(5);
audioFile2.CurrentTime = audioFile2.CurrentTime + TimeSpan.FromSeconds(5);
audioFile3.CurrentTime = audioFile3.CurrentTime + TimeSpan.FromSeconds(5);
audioFile4.CurrentTime = audioFile4.CurrentTime + TimeSpan.FromSeconds(5);
Console.WriteLine(audioFile1.CurrentTime.ToString());
outputDevice1?.Play();
}
但是用这种方法我得到了
07:04:52:409 Exception thrown: 'NAudio.MmException' in NAudio.WinMM.dll
07:04:52:409 Exception thrown: 'NAudio.MmException' in NAudio.WinMM.dll
我知道我可能过度简化了过程,需要使用 MixingWaveProvider32 做更多,但我找不到如何做。我到处寻找此类问题的样本,但找不到任何样本。如果有人能指出我正确的方向,我将不胜感激。