cs_jbond008
Messages postés2Date d'inscriptionvendredi 11 mai 2007StatutMembreDernière intervention24 mai 2007
-
11 mai 2007 à 15:08
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023
-
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.
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023111 11 mai 2007 à 15:43
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 ..."
amairi80
Messages postés1Date d'inscriptionlundi 5 février 2007StatutMembreDernière intervention 2 juillet 2007 2 juil. 2007 à 00:14
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
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023111 2 juil. 2007 à 00:24
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 ..."