2017-04-14 45 views
0

我试图在C#与n音讯和WinForms一个非常简单的DAW。该阶段的目标是在播放一对音频文件时从麦克风录音。到目前为止,该项目是NAudio附带的ASIO样本和Internet上的信息的组合。n音讯ASIO混合

我有一个audiofilereader对象为每个audiofile的我要玩:

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(); 
    } 

我用mixingwaveprovider能够在同一时间播放多个文件。它的工作原理有点,如果读者对语音文件的立体声音频我在两个扬声器播放声音和mix.WaveFormat.Channels是2之前和添加文件阅读器到调音台后。如果这些文件是单声道音频,则根据asioOut.ChannelOffset被设置为零或者一个,它们都可以在左扬声器或右扬声器中播放。我不知道如何设置每个audiofile播放哪个频道,我希望能够调整平移,即。两个扬声器在一定程度上播放单声道声音。我觉得有些东西我错过了......我看过Mark Heath编写的Patchbay示例程序,但我不知道如何将它应用到我的项目中。顺便说一句,所有的音频文件都是相同的格式。

可能相关的其他问题,否则我会发布一个新的问题,就是被记录音频(其中的方式正常工作)录制过程中不会在扬声器发声提示,即。在录制过程中没有监视如何将这个信号录制到同一台调音台中,以便将文件发送到?

谢谢!

回答

0

这可能是一个迟到的回答,但是当我要平移音频,我用的是WaveChannel32类的n音讯。这是一个简单的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)