2015-04-16 1 views
0

Dans le cadre d'une application plus large, je travaille actuellement sur un décibel mètres qui prend le niveau sonore moyen d'une durée de 10 secondes.Création d'un décibelmètre (première application Android), problèmes de conversion d'amplitude en décibels

Pour ce faire, j'ai fait un CountDownTimer de 10 000 milisecondes qui tourne toutes les 100 millisecondes.

Dans chaque événement onTick, je mets à jour le champ de texte indiquant le temps restant, et je mets également à jour la valeur du décibel en temps réel.

Mon problème est cependant de convertir l'amplitude maximale en décibels. J'ai trouvé le "power_db = 20 * log10 (amp/amp_ref);" La formule ici sur StackOverflow et je comprends comment cela fonctionne, mais il me semble toujours se retrouver avec une valeur décibel négative. Je comprends que cela est dû à une mauvaise valeur amp_ref, mais je suis absolument perplexe sur lequel je devrais utiliser. J'ai trouvé beaucoup de différentes valeurs sur le web et aucun ne semble faire l'affaire.

Quelqu'un at-il une idée de l'amplitude de référence que je devrais utiliser pour obtenir la lecture de décibels correcte sur mon compteur? Le téléphone que je suis en train de tester est un Google Nexus 5. Pour l'instant ce serait assez bon si c'était seulement une valeur vraiment précise sur ce téléphone si c'est de l'aide.

Le code que j'ai dans mon cas onTick est la suivante (j'ai enlevé la formule pour l'instant, car il semblait tort de toute façon):

public void onTick(long ms) { 
 

 
       meetBtn.setText(String.valueOf((ms/1000)+1)); 
 
       amplitude = mRecorder.getMaxAmplitude(); 
 

 
       decibelView.setText(String.valueOf(amplitude)); 
 
      }

Si quelqu'un a des conseils ou a besoin de plus d'informations, s'il vous plaît faites le moi savoir!

Merci d'avance! :)

Répondre

0

Les décibels négatifs sont bien, parce que c'est une mesure relative de toute façon. En fait, il est courant de prendre comme point de référence l'amplitude maximale possible et, par conséquent, les décibels vont de 0 jusqu'à l'espace négatif. Les systèmes Pro indiquent généralement que les décibels positifs sont une surcharge lorsque l'écrêtage et les distorsions de son peuvent se produire. Donc, par exemple, si votre gamme d'amplitude est de 0 à 1 (un standard PCM flottant accepté), alors votre amp_ref serait 1 et vos valeurs de décibels passeront d'une valeur négative qui dépend de la résolution de votre source (par exemple -186dB pour 32 bits, ou -90 dB pour une source 16 bits), jusqu'à 0 dB. C'est normal! Edit: en fait, votre plage d'amplitude de flottement-PCM est de -1 à 1, mais le calcul de décibels "baisse" le signe moins et donne le même résultat pour les amplitudes négatives et positives.