NAudio ASIO混音

时间:2017-04-14 12:44:57

标签: c# .net audio naudio mixer

我试图用NAudio和winforms在C#中制作一个非常简单的DAW。该阶段该程序的目标是能够在播放几个音频文件时从麦克风录制。到目前为止,该项目结合了NAudio附带的ASIO样本和互联网上的信息。

我想要播放的每个音频文件都有一个audiofilereader-object:

reader = new AudioFileReader("Audio 8_01.wav");

reader2 = new AudioFileReader("Audio 9_04.wav");
reader3 = new AudioFileReader("Click.L.wav");
reader4 = new AudioFileReader("Click.R.wav");

按下播放按钮时,音频剪辑应开始播放,录制应从频道1开始:

private void Play()
    {
        // allow change device
        if (asioOut != null &&
            (asioOut.DriverName != GetDriverOutComboBoxText() ||
            asioOut.ChannelOffset != 0))
        {
            asioOut.Dispose();
            asioOut = null;
        }

        int recordChannelCount = 0;


        mix = new MixingWaveProvider32();

        //Console.WriteLine("CHannels: " + mix.WaveFormat.Channels );
        mix.AddInputStream(reader);
        mix.AddInputStream(reader2);
        mix.AddInputStream(reader3);
        mix.AddInputStream(reader4);
        Console.WriteLine("CHannels: " + mix.WaveFormat.Channels);

         if (asioOut == null)
        {
            asioOut = new AsioOut(GetDriverOutComboBoxText());
            recordChannelCount = 1;
            asioOut.ChannelOffset = 0;
            asioOut.InitRecordAndPlayback(mix , recordChannelCount, 96000);
            asioOut.AudioAvailable += OnAsioOutAudioAvailable;

        }

        outFileName = Path.Combine(Path.GetTempPath(), Guid.NewGuid() + ".wav");
        Console.WriteLine("File: " + outFileName);
        writer = new WaveFileWriter(outFileName, new WaveFormat(96000, recordChannelCount));

        reader.Position = 0;
        asioOut.Play();
        timer1.Enabled = true;
        //SetButtonStates();
    }

我使用mixedwaveprovider可以同时播放多个文件。它有点工作,如果读卡器中的音频文件是立体声音频,我在两个扬声器和混音器中都会发出声音。在将文件读取器添加到调音台之前和之后,它是2 .WaveFormat.Channels。如果文件是单声道音频,则它们都可以在左或右扬声器中播放,具体取决于asioOut.ChannelOffset设置为零或一。我不知道如何设置每个音频文件播放到哪个频道,我希望能够调整平移,即。在一定程度上在两个扬声器中播放单声道。我觉得有些东西我不知道......我已经看过Mark Heath编写的Patchbay示例程序,但我真的不知道如何将它应用到我的项目中。顺便说一句,所有音频文件都采用相同的格式。

可能相关的另一个问题,否则我将发布一个新问题,即录制的音频(顺便说一下工作正常)在录音期间在扬声器中是听不见的,即。录音期间无需监控。如何将记录的信号发送到与发送文件相同的混音器?

谢谢!

1 个答案:

答案 0 :(得分:0)

这可能是一个迟到的答案,但是当我必须平移音频时,我使用NAudio中的WaveChannel32类。这是一个简单的VB.NET示例:

  Dim mixer As New MixingWaveProvider32()
  Dim audioreader As New AudioFileReader("SourceFile.mp3")
  Dim wav32 As New WaveChannel32(audioreader)

  wav32.Pan = -0.5

  mixer.AddInputStream(wav32)