2012-12-19 9 views
6
나는 오디오 샘플이 NAudio을 통해 추출한

, 난 매개 변수를 알고 :닷넷 직접

  • 채널 샘플 당
  • 바이트,
  • samplerate을 게임 방법

.Net API 또는 기타 .NET 라이브러리를 사용하여 샘플링하십시오.

여기 코드 :

먼저
openFileDialog1.ShowDialog(); 
    using (var reader = new Mp3FileReader(openFileDialog1.FileName)) 
    { 
     var pcmLength = (int)reader.Length; 
     var _leftBuffer = new byte[pcmLength/2]; 
     var buffer = new byte[pcmLength]; 
     var bytesRead = reader.Read(buffer, 0, pcmLength); 
     int index = 0; 
     for (int i = 0; i < bytesRead; i += 4) 
     { 
      //extracting only left channel 
      _leftBuffer[index] = buffer[i]; 
      index++; 
      _leftBuffer[index] = buffer[i + 1]; 
      index++; 
     } 

     // How to play _leftBuffer (Single channel, 2 bytes per sample, 44100 samples per secound) 
} 
+0

에 대한 나의 대답 http://stackoverflow.com/questions/1284322/playing-a-wav-file- in-net/20010577 # 20010577은 NAudio를 사용하여 파일을 재생합니다. – Pat

답변

1

YES, 내가 찾은 해결책 : A low-level audio player in C#

전체 근무 코드 :

public partial class Form1 : Form 
    { 
     private byte[] _leftBuffer; 
     private BiQuadFilter _leftFilter; 
     private BiQuadFilter _rightFilter; 
     public Form1() 
     { 
      InitializeComponent(); 
     } 


     private void button1_Click(object sender, EventArgs e) 
     { 
      openFileDialog1.ShowDialog(); 
      using (var reader = new Mp3FileReader(openFileDialog1.FileName)) 
      { 
       var pcmLength = (int)reader.Length; 
       _leftBuffer = new byte[pcmLength/2]; 
       var buffer = new byte[pcmLength]; 
       var bytesRead = reader.Read(buffer, 0, pcmLength); 

       int index = 0; 
       for (int i = 0; i < bytesRead; i += 4) 
       { 
        _leftBuffer[index] = buffer[i]; 
        index++; 
        _leftBuffer[index] = buffer[i + 1]; 
        index++; 
       } 
       var player = new WaveLib.WaveOutPlayer(-1, new WaveLib.WaveFormat(44100, 16, 1), _leftBuffer.Length, 1, (data, size) => 
                               { 
                                byte[] b = _leftBuffer; 
                                System.Runtime.InteropServices.Marshal.Copy(b, 0, data, size); 
                               }); 
      } 
     } 
    } 
1

, 당신은 예를 들어, WaveProvider16처럼 NAudio와 함께 제공되는 IWaveProvider 구현 IWaveProvider 또는 사용자를 구현해야합니다. 그런 다음 IWaveProvider을 사용하여 개체를 초기화하고 WaveOut.Init(IWaveProvider Provider)을 사용하고 마지막으로 WaveOut.Play()을 호출합니다.