J'utilise la classe audiorecord pour analyser les octets de PCM RAW, comme il se trouve dans le micro. P>
Alors c'est bien fonctionner. Maintenant, j'ai besoin de convertir les octets PCM en Decibel. P>
J'ai une formule qui prend la présure sonore en PA en dB. p>
dB = 20 * log10 (pa / ref PA) p>
La question est donc la question des octets que je reçois de l'audiorecorder depuis le tampon est-ce que c'est la pression acoustique ou quoi. P>
J'ai essayé de mettre la valeur dans la formule Te, mais elle revient avec très hauteur dB donc je ne pense pas que son droit p>
merci p>
5 Réponses :
Le problème est probablement la définition de la pression acoustique "référence" au micro. Je n'ai aucune idée de ce que ce serait ou si c'est disponible.
La seule application audio que j'ai jamais utilisée, définie 0db en tant que "volume complet", lorsque les échantillons étaient à une valeur + ou-max (dans 16 bits non signés (dans 16 bits non signés, ce serait 0 et 65535). Pour obtenir cela dans DB, je ferais probablement quelque chose comme ceci: p>
// assume input_sample is in the range 0 to 65535 sample = (input_sample * 10.0) - 327675.0 db = log10(sample / 327675.0)
Fermer, à l'exception des échantillons PCM sont Signé i> 16 bits (afin que vous n'ayez pas besoin de la soustraction offset). Aussi - dans mon univers au moins - vous ne pouvez pas prendre le journal d'un numéro négatif. :)
Ha hah bon points tous. Ils sont toujours signés? Je pensais que j'ai eu une fois avoir dû traiter avec des données PCM qui n'était pas signée (pourrait être erronée, bien sûr).
J'aurais dû dire que PCM est généralement i> signé - des formats PCM et PCM RAW de 1 octet-par échantillon (comme ce que vous avez probablement travaillé avec) sont non signés, mais ils sont assez rares dans la nature ( CD Audio est signé).
Disclaimer: Je connais peu à propos de Android.
Votre appareil enregistre probablement en mono à 44 100 échantillons par seconde (peut-être moins) en utilisant deux octets par échantillon. Donc, votre première étape consiste à combiner des paires d'octets dans vos données d'origine dans les entiers de deux octets (je ne sais pas comment cela se fait dans Android). P>
Vous pouvez alors calculer la valeur déposée (par rapport à Le pic) de chaque échantillon en prenant d'abord la valeur absolue normalisée de l'échantillon et le transmettant à votre fonction de base de données: p> une valeur près du pic (par exemple +32767 ou - 32768) aura une valeur de dB près de 0. Une valeur de 3277 (0,1) aura une valeur de dB de -20; Une valeur de 327 (0,01) aura une valeur de DB de -40 etc. p> p>
Bonjour, merci tout semble de travailler avec cette formule. Les valeurs sont +32767 ou -32768.
Une question juste pour mettre mon esprit à résoudre. Quelle unité de mesure est l'échantillonValue
Strictement parlant, la valeur de l'échantillon représente la sortie de tension instantanée à partir d'un microphone (où +32767 représente la tension positive maximale et -32768 représente la tension négative minimale). En raison de la manière dont les microphones fonctionnent, cette tension est liée à changements i> dans la pression acoustique de la moyenne locale - lorsqu'un microphone enregistre un son, la pression d'air autour du micro monte légèrement, ce qui déplace une membrane bilan et ventre produisant une tension alternée positive alors négative. Un échantillon ADC (analogique-numérique-convertisseur) Cette tension 44100 fois par seconde ...
... et la convertit à une valeur courte signée (-32768 au +32767) qui est enregistrée dans les données.
La pression de référence dans LEQ (niveau de pression acoustique) Les calculs sont de 20 micro-Pascal (RMS). Pour mesurer les niveaux de LEQ absolus, vous devez calibrer votre microphone à l'aide d'un étalonnage. La plupart des calibrateurs contiennent des capsules de microphone 1/2 "ou 1/4", j'ai donc mes doutes sur l'étalonnage du microphone sur un téléphone Android. Sinon, vous pourrez peut-être utiliser la sensibilité du microphone (PA / MV), puis étalonnez le niveau de tension dans l'ADC. Des résultats encore moins fiables auraient pu être dû à la comparaison des valeurs Android avec le niveau sonore mesuré d'un champ sontique variable diffus à l'aide d'un compteur de niveau sonore. Notez que dans les calculs de Leq, vous utilisez normalement les valeurs RMS. La valeur d'un seul échantillon ne signifie pas beaucoup. p>
Ce que je veux réellement faire avec le dB consiste à comprendre le volume (charnité) de l'audio s'il devient plus élevé qu'un certain volume (la charge dans dB) que je veux faire quelque chose. J'ai une table de référence de DB's en.wikipedia.org/wiki/...
D'une manière ou d'une autre, vous devrez calibrer le système. Au moins, vous auriez besoin de comparer vos valeurs calculées à un niveau sonore connu. Les valeurs données dans l'entrée de Wikipedia sont des niveaux sonores très probablement pondérés, où le niveau de son dans chaque bande d'octave est pondéré pour entraîner une valeur globale. Le Leq est généralement donné pour chaque bande d'octave.
La valeur de l'échantillon que je reçois est +32767 à -32768 Quelle unité est-ce que c'est l'amplitude de la pression acoustique Volt Wats ...
Ce n'est ni l'un ni l'autre. Il s'agit d'une unité arbitraire, proportionnelle à la fois à la fois à l'entrée ADC et à Pascal à travers la pression sur la conversion de tension du microphone. Pour obtenir le facteur de conversion de la valeur d'échantillonnage sans dimension en tension ou à la pression, vous devez comparer ces valeurs d'échantillonnage à des niveaux de tension ou de pression sonore connus. C'est ce que fait l'étalonnage.
Je suppose qu'il y a des valeurs fixes indiquent dans la spécification du microphone que je devrai résoudre la présure ou la tension.
La spécification du microphone vous indiquera combien de MV / PA, mais sans connaître la spécification ADC (et les circuits intermédiaires), cela ne vous donne toujours pas la conversion de la pression (PA) aux valeurs d'échantillon. Je pense que vous avez le meilleur choix, c'est de mettre en œuvre votre mesure DB et de comparer votre valeur avec une valeur connue à partir d'un niveau de son de son. Ensuite, vous pouvez incorporer le facteur de conversion correct dans votre code.
J'ai tenu mon compteur de niveau sonore juste à côté du micro sur mon Google Ion et est allé 'woooooo!' et noté que l'élimination a eu lieu environ 105 DB SPL. J'espère que cela t'aides. p>
Les unités sont toutes les unités utilisées pour la lecture de référence. Dans la formule, la lecture est divisée par la lecture de référence, les unités annulent ainsi et ne comptent plus. p>
En d'autres termes, Decibels est un moyen de comparer deux choses, ce n'est pas une mesure absolue. Lorsque vous le voyez, il est utilisé comme si elle est absolue, la comparaison est que le son le plus calme que l'homme humain peut entendre. p>
Dans notre cas, il s'agit d'une comparaison avec la lecture la plus élevée des poignées de l'appareil (ainsi que toutes les autres lectures sont négatives, ou moins que le maximum). P>
1+ upvote à tous pour de superbes infos. Merci a tous.
J'ai besoin d'aide avec cela moi-même comme j'essaie de faire la même chose! J'ai les octets PCM bruts comme toi, mais quand j'utilise votre formule, il sort avec l'infini: / Comme je l'enregistrement J'utilise les 2 dernières valeurs d'octets dans le tableau d'octets, est-ce faux?