Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Multimédia Java Discussion :

Calculer le db d’un micro, création d'un signal audio


Sujet :

Multimédia Java

  1. #1
    Membre régulier
    Calculer le db d’un micro, création d'un signal audio
    Bonjour à tout le monde,

    Voici mon problème, j’utilise JavaSound pour récupère mon son(en octets) grâce à la class "TargetDataLine" en utilisant la méthode « read » (targetDaraLine.read(audioDataFull,0,audiDataFull.length)). Je voudrai pouvoir déterminer grâce à mes octets l’amplitude du son ou le niveau dB.
    J’ai déjà effectué des recherches et j’ai trouvé un sujet assez bien fait : http://stackoverflow.com/questions/2445756/how-can-i-calculate-audio-db-level

    Il en ressort deux opérations :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    dB = 20 * log10(amplitude) 
     
    amplitude = 14731 / 32768 = 0.44 dB = 20 * log10(0.44) = -7.13


    (32768 si le fichier audio est codé en 16 bits)
    (14731 valeur des octets à l’ instant t)

    Mais je ne comprends pas totalement les calcule n’y les valeurs de référence quelqu’un pourrait m’aider ?
    Merci d’avance .

  2. #2
    Modérateur

    Ca ce n'est plus vraiment du java entres nous, plus de math et de la théorie du son.

    Mais ton questionnement se pose sur quels valeurs car les formules sont très simple ? Pour le calcul, ben ce sont des formules a appliquer qui n'ont rien avoir avec java.

    Sinon tu as une belle table de reference et des explications ici : http://www.rapidtables.com/electric/decibel.htm
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre régulier
    Rebonjour,
    Suite a de nombreuses recherches je n'arrive toujours pas a comprendre comment traiter mes octets audio pour avoir l'amplitude et le db.


    Si quelqu'un peut me donner un coup de main ca sera avec plaisir ^^ car j'ai du mal avec les math, physique .

    Merci

  4. #4
    Modérateur

    Attends c'est du niveau de primaire ça

    L'amplitude tu l'as puisque tu récupère byte a byte (ou par 2*byte si sur 16 bit), non ? Ces valeurs iront de -127 a 127 ou de -16834 a 16384 (ou minimum a maximum, servant de reference pour la formule de conversion qui ne fait qu'une normalization puis un petit calcul avec un log).

    Si oui de la, suffit d'appliquer la formule que j'ai cité plus haut pour avoir la conversion amplitude -> db.

    Mais j'avoue ne pas comprendre ce que tu ne comprends pas ?
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre régulier
    Si c'est bon merci j'ai trouver je n'avais pas mis le sujet à jour encore, voici ma solution :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    private int getAmplitude(int poidsFort, int poidsFaible) {
            return (poidsFort<< 8) + (poidsFaible & 0x00ff);
        }


    ou

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for(int i = 0, s = 0; i < b<img src="images/smilies/icon_wink.gif" border="0" alt="" title=";)" class="inlineimg" /> {
        int sample = 0;
     
        sample |= buf[i++] & 0xFF;
        sample |= buf[i++] << 8;  
     
        samples[s++] = sample / 32768f;
    }


    Après si je ne dit pas de bêtise pour avoir les dB je n'ai plus qu'à appliquer le calcule plus haut : dB = 20 * log10(amplitude)

    Merci encore pour les réponses .

    Je n'ai plus qu'à trouver un moyen efficace pour afficher mon graphe. J'ai essayer avec plusieurs graphe dynamique de divers librairie (JFreeChart ...) en voici un exemple de mes screen :




    Mais premier hic je n'ai pas de scroll pour pouvoir voir l'intégralité de mon graphe (du début de l’enregistrement a l'instant présent) et le second vu le nombre de valeurs que je récupère mon CPU est surcharger (30% d'utilisation). Si quelqu'un a une petite idée je suis preneur .

###raw>template_hook.ano_emploi###