2017-04-14 1 views
0

NAudio 및 winforms를 사용하여 C#에서 매우 간단한 DAW를 만들려고합니다. 이 단계에서 프로그램의 목표는 두 개의 오디오 파일을 재생하면서 마이크에서 녹음 할 수있게하는 것입니다. 지금까지의 프로젝트는 NAudio와 함께 제공되는 ASIO 샘플과 인터넷 정보를 결합한 것입니다.NAudio ASIO 믹싱

은 내가 플레이 할 각 audiofile 하나 AudioFileReader은 객체가 있습니다

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

나는 동시에 여러 파일을 재생할 수 있도록 mixingwave 공급자를 사용합니다. 독자의 오디오 파일이 스테레오 오디오 인 경우 믹서에 파일 판독기를 추가하기 전후에 두 스피커 및 mix.WaveFormat.Channels에서 사운드를 얻으면 다소 효과가 있습니다. 파일이 모노 오디오 일 경우 0 또는 1로 설정된 asioOut.ChannelOffset에 따라 왼쪽 또는 오른쪽 스피커에서 모두 재생됩니다. 각 오디오 파일이 재생되는 채널을 설정하는 방법을 모르며 패닝을 조정할 수 있습니다. 모노 사운드는 양쪽 스피커에서 어느 정도 재생됩니다. 내가 잃어버린 뭔가가 있다는 것을 느낀다. 나는 마크 히스 (Mark Heath)가 작성한 패치 베이 (Patchbay) 예제 프로그램을 보았으나 그것을 실제로 프로젝트에 적용하는 방법을 모른다. 모든 오디오 파일은 같은 형식으로되어 있습니다.

관련된 다른 문제인, 그렇지 않으면 새로운 질문을 게시 할 것입니다. 녹음되는 오디오 (즉, 잘 작동 함)는 녹음 중에 스피커에서 들리지 않습니다. 녹음 중에는 모니터링하지 않습니다. 파일을 전송할 때이 신호를 같은 믹서에 녹음하려면 어떻게해야합니까?

감사합니다.

답변

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)