2010-12-06 17 views
3

Je suis novice en analyse audio, mais je dois effectuer une tâche (apparemment) simple. J'ai un tableau d'octets contenant un enregistrement de 16 bits (canal unique) et un taux d'échantillonnage de 44100. Comment effectuer une analyse rapide pour obtenir le volume à un moment donné? J'ai besoin de calculer un seuil, donc une fonction pour retourner true si elle est au dessus d'une certaine amplitude (volume) et false sinon. J'ai pensé que je pouvais parcourir le tableau d'octets et vérifier sa valeur, 255 étant le plus fort, mais cela ne semble pas fonctionner même quand je n'enregistre rien, le bruit de fond entre et une partie du tableau est remplie 255. Toutes les suggestions seraient bonnes. MerciVolume du tableau d'octets

+0

S'il s'agit de données 16 bits, vous devez vérifier les paires d'octets. –

+0

J'ai essayé de le convertir en un ensemble de shorts. J'ai commencé à avoir des valeurs négatives et des valeurs supérieures à 255. Est-ce normal? Si oui, que représentent les valeurs négatives dans un canal unique et quelle serait la valeur maximale du volume? merci – Brap

Répondre

4

Comme vous disposez de données 16 bits, vous devez vous attendre à ce que le signal varie entre -32768 et +32767. Pour calculer le volume, vous pouvez prendre des intervalles de 1 000 échantillons, par exemple, et calculer leur valeur efficace. Additionnez les valeurs de l'échantillon au carré divisez par 1000 et prenez la racine carrée. vérifiez ce nombre par rapport à votre seuil.

3

Typiquement, on mesure l'énergie des vagues en utilisant root mean square. Si vous voulez être plus précis sur le plan de la perception, vous pouvez utiliser le signal discrete fourier transform dans le domaine fréquentiel pour intégrer le signal dans le domaine temporel, et intégrer une fonction de pondération (puisque les ondes de basse fréquence sont plus perceptives que hautes). ondes de fréquence à la même énergie).

Mais je ne connais pas les éléments audio non plus alors je fais juste des trucs. ☺

+0

Pour "faire des choses," ça sonnait plutôt bien! –

+0

merci. RMS est intéressant. Je n'ai pas besoin d'être précis, juste une approximation approximative. Je n'ai essentiellement besoin d'appeler un événement que si l'utilisateur parle au-dessus d'un certain seuil. Par conséquent, la méthode la plus rapide est tout ce dont j'ai besoin. – Brap

0

Je pourrais essayer d'appliquer une fenêtre coulissante à écart-type. OTOH, je n'aurais pas supposé que 255 = plus fort. Peut-être, mais je voudrais savoir quel encodage est utilisé. Si une compression est présente, alors je doute 255 est "le plus fort".

+0

J'utilise la classe Microphone à partir de MSDN - http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.audio.microphone_members.aspx Dit qu'il nécessite des données Wave PCM. – Brap