VoiIP

hardoozzzz Messages postés 2 Date d'inscription lundi 30 janvier 2012 Statut Membre Dernière intervention 28 mai 2012 - 21 mars 2012 à 14:52
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 - 21 mars 2012 à 23:34
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

cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
21 mars 2012 à 15:31
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 ?
0
cormandyr Messages postés 600 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 8 juillet 2016 11
21 mars 2012 à 16:33
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
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
21 mars 2012 à 23:34
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
0
Rejoignez-nous