IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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 habitué Avatar de Badshade23
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2014
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Décembre 2014
    Messages : 203
    Points : 133
    Points
    133
    Par défaut 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/2...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
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 072
    Points : 7 974
    Points
    7 974
    Par défaut
    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 habitué Avatar de Badshade23
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2014
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Décembre 2014
    Messages : 203
    Points : 133
    Points
    133
    Par défaut
    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
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 072
    Points : 7 974
    Points
    7 974
    Par défaut
    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 habitué Avatar de Badshade23
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2014
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Décembre 2014
    Messages : 203
    Points : 133
    Points
    133
    Par défaut
    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;) {
        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 :
    Nom : signal audio.png
Affichages : 866
Taille : 112,1 Ko



    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 .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Calcule la taille d’un flux
    Par louay02 dans le forum Langage
    Réponses: 4
    Dernier message: 18/04/2012, 12h31
  2. Réponses: 1
    Dernier message: 13/10/2009, 19h37
  3. Calcul entre cellules d’un datagridview
    Par kgb1917 dans le forum VB.NET
    Réponses: 1
    Dernier message: 23/04/2008, 22h02
  4. Création d'un lecteur audio simple
    Par thelpi dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 30/12/2007, 22h53
  5. Réponses: 2
    Dernier message: 26/04/2007, 15h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo