2013-03-14 4 views
4

wav 파일의 모든 샘플을 배열에 저장하는 빠른 방법이 필요합니다. 현재 음악을 재생하고 샘플 공급자의 값을 저장하여이 문제를 해결하기 위해 노력하고 있지만 매우 우아하지는 않습니다.배열에 wav 파일 저장

내가 파일을 재생하는 동안 샘플 값을 받고이 과정을 건너 뛸
private ISampleProvider CreateInputStream(string fileName) 
    { 
     if (fileName.EndsWith(".wav")) 
     { 
      fileStream = OpenWavStream(fileName); 
     } 
      throw new InvalidOperationException("Unsupported extension"); 
     } 
     var inputStream = new SampleChannel(fileStream, true); 
     var sampleStream = new NotifyingSampleProvider(inputStream); 
     SampleRate = sampleStream.WaveFormat.SampleRate; 
     sampleStream.Sample += (s, e) => { aggregator.Add(e.Left); }; // at this point the aggregator gets the current sample value, while playing the wav file 
     return sampleStream; 
    } 

, 대신 나는 때까지 기다리지 않고 immediatly 값을 원하는 다음 NAudio 데모에서

나는이 방법으로 Audioplayer 클래스를 파일의 끝. 기본적으로 matlab에있는 wavread 명령을 좋아한다.

+0

왜 우아하지 않습니까? 지금까지 해봤 던 항목을 붙여 넣을 수 있습니까? 다른 사람에게 도움을 줄 때 뭔가를 제공 할 수 있습니까? –

+0

wav 파일에서 STFT를 만들고 싶으므로 버튼 클릭으로 계산하고 싶습니다. 그 목적을 위해 나는 모든 샘플 값을 필요로합니다. 코드를 추가하고 첫 번째 게시물을 편집하려고 시도합니다 –

답변

1

AudioFileReader을 사용하여 파일을 읽으십시오. 이것은 IEEE float 샘플로 자동 변환됩니다. 그런 다음 Read 메서드를 반복적으로 호출하여 샘플 블록을 float [] 배열로 읽습니다.

+0

고맙습니다. 나중에 시험해 보겠습니다! –

+0

AudioFileReader.ReadAsync() 및 바이트 배열로 작업하지만 AudioFileReader.Read() 및 float 배열로 올바르게 처리하는 데 어려움이 있습니다. 나는 항상 범위를 벗어나는 인덱스로 끝난다. float 배열 샘플에 처음 1024 개의 float 값을 저장하려고합니다. SampleReader.Read (samples, 0, 1024); 다음 단계는 다음과 같습니다. SampleReader.Read (samples, 1024, 2048); 하지만이 단계는 항상 충돌합니다. –

+0

일반적으로 (샘플, 0, 1024)와 통화를 계속합니다. –