2013-07-24 5 views
0

웨이브 뷰어를 사용하여 녹음 중에 웨이브 폼을 그릴 수 있습니까? 내가 파일을 기록하는 코드 문을 사용하여 파일을 waveViewer.However에 타이머와 플롯 파형의 모든 틱 간격을 읽을 수 있어요NAudio WaveViewer 컨트롤에서 녹음하는 동안 웨이브 폼을 플롯

private NAudio.Wave.WaveIn wi = null; 
    int waveInDevices = NAudio.Wave.WaveIn.DeviceCount; 
    WaveFileWriter waveWriter = null; 
    SaveFileDialog save; 
    private void button2_Click(object sender, EventArgs e) 
    { 
     save = new SaveFileDialog(); 
     save.Filter = "Wave File (*.wav)|*.wav;"; 
     if (save.ShowDialog() != System.Windows.Forms.DialogResult.OK) return; 

     int deviceNumber = 0; 

     wi = new WaveIn(); 
     wi.DeviceNumber = deviceNumber; 
     wi.WaveFormat = new WaveFormat(44100, WaveIn.GetCapabilities(deviceNumber).Channels); 
     wi.DataAvailable += new EventHandler<WaveInEventArgs>(wi_DataAvailable); 
     waveWriter = new NAudio.Wave.WaveFileWriter(save.FileName, wi.WaveFormat); 
     wi.StartRecording(); 
     timer1.Start(); 
    } 
    private void wi_DataAvailable(object sender, WaveInEventArgs e) 
    { 
     if (waveWriter == null) return; 

     waveWriter.WriteData(e.Buffer, 0, e.BytesRecorded); 
     waveWriter.Flush(); 

    } 
    private void timer1_Tick(object sender, EventArgs e) 
    { 

     waveViewer1.WaveStream = new WaveFileReader(save.Filename); 
    } 

는 "파일은 다른 프로세스에서 사용하고 있습니다"라는 오류가 있습니다. 어쨌든 이것을 할 수 있습니까? WaveFileReader (StreamInput Stream)의 첫 번째 오버로드를 사용해야합니까? 그렇다면 첫 번째 과부하에 대한 예를 들어주십시오.

답변

0

코드 복사본을 취하여 기본으로 사용할 수 있지만 waveViewer를 사용하지 않는 것이 좋습니다. NAudio 저장소의 WPF 데모 코드를 보면 녹음하는 동안 파형 그리기를 지원합니다.

기본 원칙은 DataAvailable 이벤트가 발생할 때마다 녹음 된 오디오의 최대 피크를 계산하고이를 파형 디스플레이에 추가하는 것입니다.