VoiIP

Signaler
Messages postés
2
Date d'inscription
lundi 30 janvier 2012
Statut
Membre
Dernière intervention
28 mai 2012
-
Messages postés
5365
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
12 août 2021
-
salut ! je suis entrain de realizer une application java de communication voiIP , mais j'ai un probleme au niveau de detection de materiel ( mic ) ,
voici le code et l'erreur :


Vector deviceList = CaptureDeviceManager.getDeviceList(new AudioFormat(AudioFormat.LINEAR,44100,16,2));

device = (CaptureDeviceInfo)deviceList.get(0);


erreur lors de l'execution :
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 0

??? ! aucune idée ?
mercii

3 réponses

Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
360
Bonjour,

Je ne sais pas pourquoi mais tu essayes d'accéder à l'élément 0 d'un tableau qui est vide. Manifestement, ce n'est pas dans le code que tu présentes ici. Peux tu me donner la trace complète de ton exception ?
Messages postés
600
Date d'inscription
samedi 20 mai 2006
Statut
Membre
Dernière intervention
8 juillet 2016
11
Salut,

Desolé julien39, mais comme ça, le code erroné est la...
Si un vecteur ne contient aucun élément, et que comme tu l'as si bien dit on tente d'accéder à l'un d'entre eux, une exception de type ArrayOutOfBoundsException est lancée... Donc comme ça, je dirais que la méthode getDeviceList(...) renvoie un vecteur vide, autrement dit elle ne trouve rien...

Amicallement
Messages postés
5365
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
12 août 2021
111
Salut,


Je ne sais pas trop pourquoi tu veux lister "les" micro ni ce que tu utilises (jmf, java sound, autre...) pour capturer le flux de ton mic, mais perso je passe par java sound et j'utilise TargetDataLine

// init des formats
AudioFormat inputFormat = new AudioFormat(8000.0F, 16, 1, true, false);
// le format de sortie que tu veux ; 
// ici du G711a mais adaptable pour d'autes formats
AudioFormat outputFormat = new AudioFormat(AudioFormat.Encoding.ALAW, 
                                 8000, 8, 1, 1, 8000, false);
// init du mic
DataLine.Info info = new DataLine.Info(TargetDataLine.class, inputFormat);
// test si il existe un device pour la capture
if (!AudioSystem.isLineSupported(info))
  throw new IOException("No mic found !");
targetDataLine = (TargetDataLine) AudioSystem.getLine(info);
targetDataLine.open(inputFormat);
targetDataLine.start();
// init des flux 
AudioInputStream inputStream = new AudioInputStream(targetDataLine);
outputStream = AudioSystem.getAudioInputStream(outputFormat, inputStream);
...

// ici j'utilise une taille de 320 octets pour les données du mic.
// le mic est configuré pour capturer en pcm 8k, de plus je pars du principe
// que les paquets RTP seront envoyés toutes les 20ms, du coup une trame
// G711a (PCMa) vaut 160 octets et comme le PCMa 'vaut' la moitié du PCM... 
byte[] voice = new byte[320];
outputStream.read(voice, 0, voice.length);
// ici tu peux ajouter l’entête RTP aux données capturées et/ou faire 
// autre chose avec... bref tu peux exploiter les données ici
...

// arrêt de la capture
targetDataLine.stop();
targetDataLine.close();



si ça peut t'inspirer.

-----

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

OoWORAoO