Java Sound [Résolu/Fermé]

cs_jbond008 2 Messages postés vendredi 11 mai 2007Date d'inscription 24 mai 2007 Dernière intervention - 11 mai 2007 à 15:08 - Dernière réponse : Twinuts 5283 Messages postés dimanche 4 mai 2003Date d'inscription 22 octobre 2018 Dernière intervention
- 2 juil. 2007 à 00:24
Bonjour,

Je souhaite lire dans mon application Java un flux de données binaires (généré octet par octet par l'application).
Je connais à l'avance le format utilisé : A law ou mu law.
Dans le flux binaire, il est possible que certains octets soient erronés ou soit inséré au mauvais endroit; dans ce cas la je veux quand même les lire (même si on entend un crépitement).

Savez vous comment implémenter une lecture d'un flux binaire (octet par octet) avec Java sound.?
Suis-je obligé d'envoyer le flux trame par trame. Ou bien est il possible de lire uniquement 1 octet ?

J'ai fait le tour des tutoriaux / forums  et je n'ai pas trouvé mon bonheur, si quelqu'un a une idée je suis preneur.

Merci d'avance
Afficher la suite 

4 réponses

Meilleure réponse
Twinuts 5283 Messages postés dimanche 4 mai 2003Date d'inscription 22 octobre 2018 Dernière intervention - 11 mai 2007 à 15:43
3
Merci
Salut,

oriente toi du codé des protocoles RTP/RTCP pour la gestion de tes paquets (tu te prendras moins la tete :P)

pour faire ce que tu veux tu as 2 solutions :
    1 - utiliser JMF
    2 - le coder toi même (voir exemple ci-dessous)

pour ce qui est de cracher le flux rtp en G711 (alaw ou µlaw) tu peux faire comme suit :

(cet exemple est basé sur rtp et n'est en aucun cas une classe ou méthode fini (je posterai peut-etre un jour le code complet pour reçevoir et emettre les paquets)

int datalenth = 160;
...
//buffer reçu (alaw/µulaw)
byte[] buffer = new byte[datalenth+12];
//buffer pcm pour la carte son
byte[] linearBuffer = new byte[datalenth*2];
//audio stream sur le G711
AudioInputStream codecStream = null;
//audio stream sur le pcm
AudioInputStream linearStream = null;

//ce qui va etre lu
ByteArrayInputStream byteArrayInputStream = null;
//paquet reçu
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
//format d'entrée (G711)
AudioFormat codecFormat = null;
if(alaw)
    codecFormat = new AudioFormat(AudioFormat.Encoding.ALAW, 8000, 8, 1, 1, 8000, false);
else//µlaw
    codecFormat = new AudioFormat(AudioFormat.Encoding.ULAW, 8000, 8, 1, 1, 8000, false);
//format PCM
AudioFormat linearFormat = new AudioFormat(8000, 16, 1, true, false);

//récupération de l'objet qui va permettre l'ecriture dans la carte son
sourceDataLine = (SourceDataLine) AudioSystem.getSourceDataLine(linearFormat);
....
//ensuite dans la méthode run
//ouverture                             

sourceDataLine.open();

//démarrage

sourceDataLine.start();
while (!end) {
    try {
        //le socket UDP ouvert avec le distant
        socket.receive(packet);
        //récupération du paquet avec un saut de l'entete RTP
        byteArrayInputStream = new ByteArrayInputStream(packet.getData(), 12, buffer.length-1);
        //stack le buffer G711 dans le flux audio pour la convertion
        codecStream = new AudioInputStream(byteArrayInputStream, codecFormat, datalenth);
        //convertion du flux G711-PCM
        linearStream = AudioSystem.getAudioInputStream(linearFormat, codecStream);
        //stock le flux dans le buffer
        linearStream.read(linearBuffer, 0, linearBuffer.length);
        //ecriture du flux dans la carte son
        sourceDataLine.write(linearBuffer, 0, linearBuffer.length);
    } catch (Exception e) {
        e.printStackTrace();
    }
}
Libère les ressource sur la carte son
sourceDataLine.stop();
sourceDataLine.close();

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO

Merci Twinuts 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 95 internautes ce mois-ci

Commenter la réponse de Twinuts
cs_jbond008 2 Messages postés vendredi 11 mai 2007Date d'inscription 24 mai 2007 Dernière intervention - 24 mai 2007 à 17:58
0
Merci
Merci pour ton post. C'est exactement ce qu'il me fallait.
Commenter la réponse de cs_jbond008
amairi80 1 Messages postés lundi 5 février 2007Date d'inscription 2 juillet 2007 Dernière intervention - 2 juil. 2007 à 00:14
0
Merci
bonjour
svp je besoin d aide je de faire un petit projet qui lecteure
et j utilise  API de jax.sound.sampled or que j ai de mal de comprendre
pouver m aider ou me donner totirial svp
et merci a tt le monde
Commenter la réponse de amairi80
Twinuts 5283 Messages postés dimanche 4 mai 2003Date d'inscription 22 octobre 2018 Dernière intervention - 2 juil. 2007 à 00:24
0
Merci
Salut,

1 - merci de poser une question sur un nouveau poste et non polluer celui d'un autre.
2 - Merci de faire un effort lors de la redaction d'un message et de te forcer à construire des phrases complètes afin que l'on puisse te comprendre parce que la... (on ne demande d'être irréprochable en français mais un minimum...)

pour l'heure sujet clos.

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
Commenter la réponse de Twinuts

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.