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

2019-07-17 00:10发布

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?

3条回答
We Are One
2楼-- · 2019-07-17 00:27

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?

查看更多
甜甜的少女心
3楼-- · 2019-07-17 00:28

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.

查看更多
该账号已被封号
4楼-- · 2019-07-17 00:43

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.

查看更多
登录 后发表回答