No Sound When Trying to Play Audio (.wav) Files

孤街浪徒 提交于 2019-12-11 01:38:21

问题


I have a very simple class that can play a sound file with the following code:

import java.io.File;
import java.io.IOException;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.UnsupportedAudioFileException;

public class Sound{

private Clip sound;

public Sound(String location){

    try{ 
        sound = AudioSystem.getClip();
        File file = new File(location);
        sound.open(AudioSystem.getAudioInputStream(file));
    }
    catch(IOException | LineUnavailableException | UnsupportedAudioFileException error){
        System.out.println(error);
    }

}

public void play(){

    sound.start();

}

}

However, when I create an instance of this class and call the play function on it I don't get any sound. I hear a pop when the sound starts and when it ends but not the actual file. Also I don't get any errors of any sort.

What am I doing wrong?


回答1:


Try something like:

File soundFile = new File( "something.wav" );
AudioInputStream audioInputStream = AudioSystem.getAudioInputStream( soundFile );
clip = AudioSystem.getClip();
clip.open(audioInputStream);
clip.start();//This plays the audio

You might have to use AudioSystem.getClip() after loading the audio stream.




回答2:


Use this and note this is not my code it's from here: How to play .wav files with java The only thing I did was post it here and optimize it a little.

private final int BUFFER_SIZE = 128000;
private AudioInputStream audioStream;
private SourceDataLine sourceLine;
/**
 * @param filename the name of the file that is going to be played
 */
 public void playSound(String filename){
try {
    audioStream = AudioSystem.getAudioInputStream(new File(filename));
} catch (Exception e){
    e.printStackTrace();
}
try {
    sourceLine = (SourceDataLine) AudioSystem.getLine(new DataLine.Info(SourceDataLine.class, audioStream.getFormat()));
    sourceLine.open(audioStream.getFormat());
} catch (LineUnavailableException e) {
    e.printStackTrace();
} catch (Exception e) {
    e.printStackTrace();
}
sourceLine.start();
int nBytesRead = 0;
byte[] abData = new byte[BUFFER_SIZE];
while (nBytesRead != -1) {
    try {
        nBytesRead = audioStream.read(abData, 0, abData.length);
    } catch (IOException e) {
        e.printStackTrace();
    }
    if (nBytesRead >= 0) {
        @SuppressWarnings("unused")
        int nBytesWritten = sourceLine.write(abData, 0, nBytesRead);
    }
}
sourceLine.drain();
sourceLine.close();
}

I hope this helps.




回答3:


It has been my experience that the audio file one is using the frequent culprit. Java, apparently, cannot play compressed sound files or something like that. It plays linear PCM files only. I could be wrong about the only. Anyone have an example that plays any type of sound file?



来源:https://stackoverflow.com/questions/24317210/no-sound-when-trying-to-play-audio-wav-files

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!