NAudio 使用 MixingWaveProvider32 向前跳和向后跳

问题描述 投票:0回答:0

我正在尝试使用 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 做更多,但我找不到如何做。我到处寻找此类问题的样本,但找不到任何样本。如果有人能指出我正确的方向,我将不胜感激。

c# audio mp3 naudio
© www.soinside.com 2019 - 2024. All rights reserved.