2011-04-04 2 views
2

Je n'ai jamais été capable de comprendre comment les données audio sont stockées. Cependant, j'aimerais savoir comment trouver la hauteur des données PCM. Disons, par exemple, que j'ai enregistré une seule touche sur un piano, en format mono PCM 16 bits à une fréquence d'échantillonnage donnée. Comment pourrais-je trouver la fréquence, en hertz, de l'audio? Un code simple pour obtenir la fréquence moyenne fonctionne pour moi, mais une explication plus détaillée de la façon de mieux comprendre le format serait idéal.Obtention d'informations audio à partir de données PCM

Merci!

Répondre

5

L'audio PCM n'est pas stocké sous forme de pas. Pour comprendre cela, vous avez besoin d'une transformation de Fourier rapide, ou FFT. Voir https://stackoverflow.com/search?q=pitch+detection, il y a 10s de messages à ce sujet déjà.

Pensez à une forme d'onde audio. Le codage PCM consiste simplement à échantillonner les ondes un certain nombre de fois par seconde et à utiliser un nombre spécifique de bits par échantillon.

Waveform

Image de http://en.wikipedia.org/wiki/Pulse-code_modulation

16-bit Mono PCM à 44,1 signifie que 44.100 fois par seconde, une valeur de 16 bits (2 octets) seront stockées qui représente la forme d'onde spécifique à la l'heure à laquelle l'échantillon a été prélevé. 44,1 kHz est suffisamment rapide pour stocker des fréquences proches de 22 kHz (voir Nyquist Frequency). FFT transforme ces échantillons du domaine temporel en domaine fréquentiel. Autrement dit, vous pouvez trouver ce que sont les niveaux de toutes les fréquences pour une période de temps donnée. Plus vous regardez de groupes, plus c'est intensif.

+0

Merci! Je me suis arraché les cheveux pendant un moment, le stockage audio est généralement une porte fermée pour moi. –

+0

J'ai donc pu implémenter le code que j'ai trouvé [ici] (http://www.codeproject.com/KB/audio-video/FftGuitarTuner.aspx), mais j'obtiens des résultats inexacts. Par exemple, lorsque vous jouez du do médian sur un piano (à la fois virtuellement et dans le monde réel), il signale que la fréquence est d'environ 484 Hz, alors qu'en réalité un C moyen est plus proche de 261 Hz. Une idée de pourquoi cela serait le cas? –

+1

@Drew: la détection de hauteur est assez difficile - la plupart des instruments de musique ont des spectres de puissance complexes et souvent le fondamental n'est pas le composant le plus fort - l'oreille "remplit" le fondamental basé sur les informations des harmoniques. Recherche SO pour "détection de hauteur" car il y a déjà beaucoup de questions avec de bonnes réponses sur tout ce sujet. –

Questions connexes