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 :

[JavaSound] Décallage son (drain et flush..)


Sujet :

Multimédia Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2009
    Messages
    88
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Avril 2009
    Messages : 88
    Par défaut [JavaSound] Décallage son (drain et flush..)
    Bonjour,
    j'ai fait une applet où l'on peut rajouter du son via le microphone à un enregistrement déjà existant.
    (En gros, je fais des concaténations de tableaux de bytes)

    Mon soucis, très embêtant est qu'à la première relecture de l'enregistrement après un rajout au milieu de la piste ( partout sauf à la fin ), j'ai un bug.

    Je reconnais mes enregistrements mais ils sont sans dessus-dessous.. Ce qui est bizarre c'est que mon tableau de bytes est correct vu que je l'affiche sous forme de sinusoïde. Donc le problème vient surement du AudioInputStream.

    Code Passage du tableau de bytes (newAudioBytesAjout) en inputStream(audioInputStream) : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ByteArrayInputStream baisAjout = new ByteArrayInputStream(newAudioBytesAjout);
    audioInputStream = new AudioInputStream(baisAjout, format, newAudioBytesAjout.length / frameSizeInBytes);

    Mais à la relecture suivante, çà fonctionne nickel. apparemment il s'est passé quelque chose pendant la relecture...

    Le seul point que je trouve suspect est la ligne :
    qui est exécutée à la fin de la relecture.

    Donc j'ai essayé de faire des drain() et des flush() sur mon audioInputStream mais cela ne corrige pas mon problème est apparemment ralenti énormément le temps d'exécution..

    Quelqu'un pourrait-il me renseigner sur ces 2 méthodes de la classe DataLine ?
    (Je ne comprend pas leurs utilités dans l'API)

    Merci énormément.

    ps: Le code fait plus de 800 lignes donc je vous épargne çà, mais il s'agit en fait du CapturePlayback.java (modifié) de l'exemple officiel de Sun sur JavaSound (JavaSound Demo)

  2. #2
    Membre confirmé
    Inscrit en
    Avril 2009
    Messages
    88
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Avril 2009
    Messages : 88
    Par défaut
    drain() sert à attendre jusqu'à la fin de la lecture.

    Donc le problème ne vient pas de la.

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2009
    Messages
    88
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Avril 2009
    Messages : 88
    Par défaut
    Je crois que le flush() sert à effacer les données qui restent encore dans la ligne après un stop().
    Mon problème est surement dû à çà mais, après avoir essayé de le placer à peut près partout, cela n'a rien changé.

    CapturePlayback.java

    Si vous pouviez m'éclairer. Merci.

  4. #4
    Membre confirmé
    Inscrit en
    Avril 2009
    Messages
    88
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Avril 2009
    Messages : 88
    Par défaut
    Je vais reformuler ma question autrement,

    Dans le cas d'un enregistrement à partir du microphone, suivi d'une lecture incomplète de l'enregistrement ( lecture puis pause ), suivi d'un nouvel enregistrement, puis d'une relecture,

    A quel moment dois-je flush() la ligne ? ( Je rappelle que mon décalage n'arrive qu'a la 1ère relecture )

    Merci beaucoup !
    Bastien

  5. #5
    Membre confirmé
    Inscrit en
    Avril 2009
    Messages
    88
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Avril 2009
    Messages : 88
    Par défaut
    Oups, oublié de répondre...

    La solution était bien un flush().

    Il fallait flush() la ligne qui servait à la lecture avant de commencer à enregistrer un ajout.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 14/01/2013, 15h53
  2. [JavaSound] Capture son 16bits dans une applet
    Par doobinay dans le forum Multimédia
    Réponses: 1
    Dernier message: 10/04/2009, 14h50
  3. [JavaSound] Tester présence carte son
    Par billynirvana dans le forum Multimédia
    Réponses: 2
    Dernier message: 16/10/2006, 17h46
  4. ecrire son OS (assembleur ??)
    Par Anonymous dans le forum Programmation d'OS
    Réponses: 9
    Dernier message: 25/11/2002, 19h25
  5. Aquisition de son
    Par don-diego dans le forum DirectX
    Réponses: 1
    Dernier message: 20/06/2002, 09h16

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