2016-05-04 1 views
0

Je fais un programme de chat vocal java et la classe vocale côté serveur est de lancer cette erreurjavax.sound.sampled.LineUnavailableException sur tentative d'enregistrement

javax.sound.sampled.LineUnavailableException: line with format PCM_SIGNED 8000.0 Hz, 8 bit, mono, 1 bytes/frame, not supported. 
    at com.sun.media.sound.DirectAudioDevice$DirectDL.implOpen(DirectAudioDevice.java:513) 
    at com.sun.media.sound.AbstractDataLine.open(AbstractDataLine.java:121) 
    at com.sun.media.sound.AbstractDataLine.open(AbstractDataLine.java:153) 
    at client.VoiceUser.run(VoiceUser.java:34) 

l'erreur est lancée sur cette ligne de code

microphone.open(audioformat); 

code:

package client; 

import java.io.IOException; 
import java.io.ObjectOutputStream; 
import java.net.Socket; 
import java.util.ArrayList; 

import javax.sound.sampled.AudioFormat; 
import javax.sound.sampled.AudioSystem; 
import javax.sound.sampled.DataLine; 
import javax.sound.sampled.LineUnavailableException; 
import javax.sound.sampled.TargetDataLine; 

public class VoiceUser extends Thread { 
    private ObjectOutputStream clientOutput; 
    private TargetDataLine microphone; 
    private ArrayList<ObjectOutputStream> vOutputArray = new ArrayList<ObjectOutputStream>(); 
    private AudioFormat audioformat; 

    public VoiceUser(Socket sv, ArrayList<ObjectOutputStream> outputArray) throws LineUnavailableException { 
     try { 
      clientOutput = new ObjectOutputStream(sv.getOutputStream()); 
      vOutputArray.equals(clientOutput); 
      vOutputArray.add(clientOutput); 
     } catch (IOException e) { 
      System.out.println("Can't create stable connection between server and client"); 
     } 
    } 
    public void run() { 
     try { 
      DataLine.Info info = new DataLine.Info(TargetDataLine.class, audioformat); 
      microphone = (TargetDataLine)AudioSystem.getLine(info); 
      audioformat = new AudioFormat(8000.0f,8,1,true,false); 
      microphone.open(audioformat); 
      microphone.start(); 
     } catch (LineUnavailableException e) { 
      e.printStackTrace(); 
     } 
     int bytesRead = 0; 
     byte[] soundData = new byte[3072]; 
     int offset = 0; 
     while(bytesRead != -1) 
     { 
      bytesRead = microphone.read(soundData, 0, soundData.length); 
      if(bytesRead >= 0) { 
       offset += bytesRead; 
       if(offset == soundData.length) { 
        send(soundData, bytesRead); 
        offset = 0; 
       } 
      } 
     } 
    } 
public void send(byte[] soundData, int bytesRead) { 
    for(ObjectOutputStream o : vOutputArray) { 
     try { 
      o.write(soundData, 0, bytesRead); 
      o.flush(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     } 
} 
} 
+0

J'ai changé le texte d'exception en style de bloc au lieu de en ligne afin qu'il soit plus lisible. –

Répondre

0

Il vous dit que la ligne ne sont pas disponibles. Il y a plusieurs raisons: votre carte son ne prend pas en charge l'enregistrement au format spécifié. Vous pouvez essayer différents formats, par exemple 22050Hz pourrait être pris en charge.

Autre raison, la carte son est déjà occupée par l'enregistrement. Sous Windows, vous ne pouvez pas enregistrer avec deux microphones simultanément. Vous devez redéfinir votre serveur pour n'autoriser qu'une seule session d'enregistrement.