c# - NAudio ASIO 混音

标签 c# .net audio naudio mixer

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

我要播放的每个音频文件都有一个 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");

按下播放按钮时,音频剪辑应开始播放,并且应在 channel 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();
    }

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

另一个可能相关的问题,否则我会发布一个新问题,即在录制过程中,正在录制的音频(顺便说一句,效果很好)在扬声器中听不到,即。录制过程中没有监控。我怎样才能将这个正在录制的信号发送到文件发送到的同一个混音器?

谢谢!

最佳答案

这可能是一个迟到的答案,但是当我必须平移音频时,我使用 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)

关于c# - NAudio ASIO 混音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43411785/

相关文章:

android - 在Android中实时录制和混合音频

c# - 搜索 1GB CSV 文件

c# - WPF - 如何使用键(如字典)实现 ObservableCollection<K,T>?

c# - 计算缩放级别以使图像适合面板

c++ - 从 wav 文件头读取采样率

linux - linux如何播放一段音乐(ALSA)

c# - 执行反序列化时无法发现程序集异常

c# - 如何查找导致.NET方法导致工作人员停止的原因

c# - TextBox TextChanged 事件问题

c# - 使用 C# 和 wpf 创建一个类似应用程序的停靠点