erreur de lecture des sons java (Pas de ligne correspondant interface Clip de soutien format)
Nous essayons de son intégré dans l'un de nos projet, les membres de mon équipe n'obtenez pas cette erreur, et je le reçois sur deux machines différentes.
Trace de la pile:
Exception in thread "SoundPlayer" java.lang.IllegalArgumentException: No line matching interface Clip supporting format PCM_SIGNED 16000.0 Hz, 16 bit, stereo, 4 bytes/frame, little-endian, and buffers of 11129272 to 11129272 bytes is supported.
at javax.sound.sampled.AudioSystem.getLine(Unknown Source)
at sound.Music.run(Music.java:86)
at java.lang.Thread.run(Unknown Source)
Code:
package sound;
import java.io.File;
import java.io.IOException;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.FloatControl;
import javax.sound.sampled.LineEvent;
import javax.sound.sampled.LineListener;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.UnsupportedAudioFileException;
public class Music implements LineListener, Runnable
{
private File soundFile;
private Thread thread;
private static Music player;
private Music audio;
private Clip clip;
public Music()
{
}
public void playSiren(String musicFileName)
{
Music p = getPlayer();
p.playSirenFile(musicFileName);
}
private void playSirenFile(String musicFileName)
{
this.soundFile = new File("Music/"+musicFileName+".wav");
thread = new Thread(this);
thread.setName("SoundPlayer");
thread.start();
}
public void run()
{
try
{
AudioInputStream stream = AudioSystem.getAudioInputStream(this.soundFile);
AudioFormat format = stream.getFormat();
/**
* we can't yet open the device for ALAW/ULAW playback, convert
* ALAW/ULAW to PCM
*/
if ((format.getEncoding() == AudioFormat.Encoding.ULAW) || (format.getEncoding() == AudioFormat.Encoding.ALAW))
{
AudioFormat tmp = new AudioFormat(
AudioFormat.Encoding.PCM_SIGNED,
format.getSampleRate(),
format.getSampleSizeInBits() * 2, format.getChannels(),
format.getFrameSize() * 2, format.getFrameRate(), true);
stream = AudioSystem.getAudioInputStream(tmp, stream);
format = tmp;
}
DataLine.Info info = new DataLine.Info(Clip.class, stream
.getFormat(), ((int) stream.getFrameLength() * format
.getFrameSize()));
clip = (Clip) AudioSystem.getLine(info);
clip.addLineListener(this);
clip.open(stream);
clip.start();
try
{
thread.sleep(99);
}
catch (Exception e)
{
}
while (clip.isActive() && thread != null)
{
try
{
thread.sleep(99);
}
catch (Exception e)
{
break;
}
}
clip.loop(99999999);
}
catch (UnsupportedAudioFileException e)
{
//TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e)
{
//TODO Auto-generated catch block
e.printStackTrace();
}
catch (LineUnavailableException e)
{
//TODO Auto-generated catch block
e.printStackTrace();
}
}
private static Music getPlayer()
{
if (player == null)
{
player = new Music();
}
return player;
}
public void update(LineEvent event)
{
}
public void stopClip()
{
clip.stop();
}
public void closeClip()
{
clip.close();
}
public void startClip()
{
clip.start();
}
public void volume(float volume)
{
/*
FloatControl gainControl = (FloatControl) clip.getControl(FloatControl.Type.MASTER_GAIN);
gainControl.setValue(-50.0f); //Reduce volume IN DECIBELS
clip.start();
*/
}
}
Nous appelons cette classe de domainController avec
audio = new Music();
audio.playSiren("stillAliveDecent");
quelqu'un a une idée de comment cette exception peut être résolu?
J'ai essayé de réinstaller mon éditeur de logiciel (Eclipse) mais en vain.
grâce attribuer à l'avance.
Modifier
Nous avons juste essayé de modifier le son en fichier. Nous avons essayé de courir avec des fichiers de plus petite. cela fonctionne maintenant, mais une fois que nous revenir à la plus grande .fichier wav (+de 10 MO) je suis l'exception à nouveau.
Uniquement à l'aide de petits fichiers n'est pas vraiment une option que nous aimerions utiliser des chansons qui sont assez longs.
Edit 2
Je suis assez sûr que ce n'est pas un corrompu wav. nous avons recompilé, même utilisé une autre vague de la longueur et de la taille, et je suis toujours le seul à recevoir cette erreur.
supplémentaire demandé info:
Système d'exploitation: Windows 7 64bit Ultime
JDK: 1.6.0_22
Modifier 3
Après une vague de création et de jeu nous en sommes venus à la conclusion que, pour une raison que je ne peux pas jouer à des vagues de plus de 2 MO.
Encore pourquoi ne sont pas mes coéquipiers touchés par cette?
Van Eeckhout: Il serait utile si vous mentionnez le système d'exploitation et la version du JDK que vous utilisez. Son travail sur mon ordinateur Windows Vista avec le JDK 1.6_b18. Aussi, le problème est lié à eclipse seulement dans le cas où vous avez mis votre JRE à une très ancienne version. Vérifiez votre eclipse JRE et essayez de nouveau.
Van Eeckhout: c'est un très vieux pommier post: lists.apple.com/archives/java-dev/2005/May/msg00181.html. Check it out.
c'était notre première pensée, donc nous avons recompilé le wav, et avait toujours le même problème, donc non, nous avons utilisé une autre wav de durée et de taille, même problème. @Favonius: Merci pour les suggestions et les modifier à la poste (premier post semble difficile de faire le formatage de la droite), je vais ajouter de l'information supplémentaire sur la question
L'objet du plan a certaines limitations sur la taille de la mémoire tampon, et de mon expérience, il ne gère pas plus de 1 mo. Peut-être que vous pouvez faire mieux avec SourceDataLine? Java Tutoriel, Lecture Audio: download.oracle.com/javase/tutorial/sound/playing.html"
OriginalL'auteur pveeckhout | 2011-04-27
Vous devez vous connecter pour publier un commentaire.
Vous pouvez réellement jouer un son au-dessus de 40 mo, si nécessaire, c'est jusqu'où je suis allé :p, le problème est surtout de l'éclipse, et pour être plus exact, son la .dossier de métadonnées dans votre espace de travail, je pense que c'est comme un petit plugin qui seul est téléchargé la moitié du temps, alors le problème est avec votre éditeur de texte et pas le code, le code ci-dessus fonctionne parfaitement depuis que j'ai pu lire les chansons, sans aucun problème. Assurez-vous que vos chemins d'accès sont corrects, et essayer de trouver une version correcte de la .métadonnées et vous devriez être bien. Un ami à moi a eu le même problème, et je lui ai donné ma copie de l'espace de travail et .métadonnées et il a parfaitement fonctionné.
OriginalL'auteur Jonathan
J'ai été confronté à ce même problème sur un raspberry pi. Il pourrait jouer le premier 5 fichiers très bien, alors je vous reçois le message d'erreur. Il s'est avéré que je n'étais pas la fermeture de la pince quand j'en avais besoin.
Après l'ajout de la ligne de l'auditeur et la fermeture de la pince quand il s'est arrêté, les erreurs s'en alla.
OriginalL'auteur Gordolio