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?

Est-il possible que l' .fichier wav est légèrement endommagé et a un mauvais fichier se terminant?
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

Leave a Reply

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *