2017-04-02 3 views
0

Je suis actuellement nouveau à ce sujet, alors s'il vous plaît gardez simple pour moi de comprendre.Comment obtenir la fréquence et la hauteur d'un fichier .wav pcm byte array en utilisant java?

J'ai un projet dans lequel je dois classer la voix comme bonne, mauvaise ou neutre. Mon plan est d'obtenir toutes les fréquences et la hauteur de l'ensemble de données d'échantillons et de les former en utilisant SVM.

Afin d'obtenir la hauteur et la fréquence de tous les fichiers .wav. J'ai fait le code jusqu'à trouver les données PCM à partir d'un fichier audio. Maintenant, comment dois-je appliquer ces données à l'algorithme de transformation de Fourier rapide pour obtenir des fréquences? Y at-il plus de choses à considérer avant d'appliquer le tableau d'octets à l'algorithme FFT?

Voici mon code pour le convertion de fichier wav à un tableau pcm octets:

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

Je pense que vous devez prendre en compte le nombre d'octets représentant un seul échantillon d'audio. La plupart des fichiers audio actuels seront de 16 bits par échantillon. – john16384

+0

Il existe déjà de nombreuses questions similaires sur StackOverflow, avec de bonnes réponses - essayez [recherche de jtransforms + audio] (http://stackoverflow.com/search?q=Jtransforms+audio). –

+0

Votre bibliothèque FFT aura probablement besoin de regarder en flottant ses exigences d'entrée et de convertir les données d'onde en conséquence. –

Répondre

0

Il y a beaucoup de choses à considérer après ou autre qu'une FFT, puisque les pics de fréquence FFT ne sont pas nécessairement la fréquence de pas. Rechercher des algorithmes de détection/estimation de hauteur au lieu de simplement utiliser une magnitude FFT nue.