J'essaie de calculer le volume d'une piste audio que j'ai stockée dans un tampon. Le tampon contient des données PCM du signal et je veux obtenir à quel point il est «fort» en utilisant Root Mean Squared. Je suppose que je peux le faire dans le domaine temporel au lieu de devoir passer au domaine fréquentiel. Quel serait le pseudo-code pour faire cela?
Dois-je simplement échantillonner pendant une seconde (audio [0] - audio [44099], audio [44099] - audio [88199] etc.) et calculer le RMS de ces valeurs? Donc, par exemple, dois-je faire ceci:
pour chaque seconde?
<!-- html comment -->
pour contourner la restriction de caractère dans le cas rare où une publication par ailleurs parfaite a une erreur minuscule mais très importante. Ce besoin se produit très rarement: il y a généralement plus de 6 caractères d'amélioration à faire. Par exemple, lorsqu'il manque des crochets, il est généralement préférable d'utiliser les constructions\sqrt{}
et\frac{}{}
dans TeX.Réponses:
Une autre chose est que la valeur RMS n'est pas très bien corrélée avec l'intensité sonore perçue. Vous voudrez peut-être plutôt l'appeler niveau ou volume. Il y a quelque chose appelé contours d'intensité égale qui quantifie la sensibilité de l'oreille à une fréquence particulière par rapport à une autre fréquence, voir l'article Wikipedia . Ces courbes dépendent du niveau. Par exemple, l'oreille est très sensible à une tonalité de 1 kHz par rapport à une tonalité de 100 Hz, comme le montre cette image (l'axe horizontal est la fréquence en Hz):
L'une des choses relativement simples que vous pouvez faire est de filtrer vos données PCM avec une courbe de sonie inversée. Ou vous pouvez appliquer la pondération A standard, voir l'article Wikipedia sur les filtres de pondération . Ensuite, vous pouvez calculer la valeur RMS de la sortie du filtre pondéré à intensité égale.
la source