2017-04-14 48 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)