2017-04-02 71 views
0

저는 현재이 책을 처음 접하기 때문에 친절하게 이해하기 쉽습니다.java를 사용하여 pcm 바이트 배열 .wav 파일에서 주파수 및 피치를 얻는 방법?

나는 음성을 좋거나 나쁘거나 중립적 인 것으로 분류해야하는 프로젝트가 있습니다. 제 계획은 샘플 데이터 세트의 모든 주파수와 피치를 얻고 SVM을 사용하여 트레이닝하는 것입니다.

모든 .wav 파일의 음조 및 주파수를 얻기 위해. 오디오 파일에서 PCM 데이터를 찾는 코드를 작성했습니다. 이제이 데이터를 고속 푸리에 변환 알고리즘에 적용하여 주파수를 얻는 방법은 무엇입니까? FFT 알고리즘에 바이트 배열을 적용하기 전에 고려해야 할 사항이 더 있습니까? 고려해야 할 많은있다

int totalFramesRead = 0; 
File fileIn = new File(inputFile); 
try { 
    AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(fileIn); 
    int bytesPerFrame = audioInputStream.getFormat().getFrameSize(); 
    if (bytesPerFrame == AudioSystem.NOT_SPECIFIED) { 
     // some audio formats may have unspecified frame size 
     // in that case we may read any amount of bytes 
     bytesPerFrame = 1; 
    } 
    // Set an arbitrary buffer size of 1024 frames. 
    int numBytes = 1024 * bytesPerFrame; 
    byte[] audioBytes = new byte[numBytes]; 
    try { 
     int numBytesRead = 0; 
     int numFramesRead = 0; 
     // Try to read numBytes bytes from the file. 


     while ((numBytesRead = audioInputStream.read(audioBytes)) != -1) { 
      // Calculate the number of frames actually read. 
      numFramesRead = numBytesRead/bytesPerFrame; 
      totalFramesRead += numFramesRead; 
     } 
     return audioBytes[]; 
    } 
+1

오디오의 단일 샘플을 나타내는 바이트 수를 고려해야한다고 생각합니다. 요즘 대부분의 오디오 파일은 샘플 당 16 비트입니다. – john16384

+0

StackOverflow에 대한 비슷한 질문이 많습니다. 좋은 답변은 - [jtransforms + audio 검색] (http://stackoverflow.com/search?q=Jtransforms+audio)입니다. –

+0

FFT 라이브러리는 입력 요구 사항을 float-look해야하고 이에 따라 웨이브 데이터를 변환해야합니다. –

답변

0

FFT 주파수 피크가 반드시 피치 주파수 아니기 때문에, 후 또는 FFT 이외 :

여기 PCM 바이트 배열에 wav 파일의 convertion 내 코드입니다. 벌거 벗은 FFT 크기를 사용하는 대신 피치 감지/추정 알고리즘을 찾으십시오.