Playing .mp3 and .wav in Java?

前端 未结 14 2102
一整个雨季
一整个雨季 2020-11-22 06:52

How can I play an .mp3 and a .wav file in my Java application? I am using Swing. I tried looking on the internet, for something like this example:<

14条回答
  •  旧巷少年郎
    2020-11-22 07:29

    Using standard javax.sound API, a single Maven dependency, completely Open Source (Java 7 or later required), this should be able to play most WAVs, OGG Vorbis and MP3 files:

    pom.xml:

     
    
      com.googlecode.soundlibs
      tritonus-share
      0.3.7-2
    
    
      com.googlecode.soundlibs
      mp3spi
      1.9.5-1
    
    
      com.googlecode.soundlibs
      vorbisspi
      1.0.3-1
    
    

    Code:

    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.DataLine.Info;
    import javax.sound.sampled.LineUnavailableException;
    import javax.sound.sampled.SourceDataLine;
    import javax.sound.sampled.UnsupportedAudioFileException;
    
    import static javax.sound.sampled.AudioSystem.getAudioInputStream;
    import static javax.sound.sampled.AudioFormat.Encoding.PCM_SIGNED;
    
    public class AudioFilePlayer {
     
        public static void main(String[] args) {
            final AudioFilePlayer player = new AudioFilePlayer ();
            player.play("something.mp3");
            player.play("something.ogg");
        }
     
        public void play(String filePath) {
            final File file = new File(filePath);
     
            try (final AudioInputStream in = getAudioInputStream(file)) {
                 
                final AudioFormat outFormat = getOutFormat(in.getFormat());
                final Info info = new Info(SourceDataLine.class, outFormat);
     
                try (final SourceDataLine line =
                         (SourceDataLine) AudioSystem.getLine(info)) {
     
                    if (line != null) {
                        line.open(outFormat);
                        line.start();
                        stream(getAudioInputStream(outFormat, in), line);
                        line.drain();
                        line.stop();
                    }
                }
     
            } catch (UnsupportedAudioFileException 
                   | LineUnavailableException 
                   | IOException e) {
                throw new IllegalStateException(e);
            }
        }
     
        private AudioFormat getOutFormat(AudioFormat inFormat) {
            final int ch = inFormat.getChannels();
    
            final float rate = inFormat.getSampleRate();
            return new AudioFormat(PCM_SIGNED, rate, 16, ch, ch * 2, rate, false);
        }
     
        private void stream(AudioInputStream in, SourceDataLine line) 
            throws IOException {
            final byte[] buffer = new byte[4096];
            for (int n = 0; n != -1; n = in.read(buffer, 0, buffer.length)) {
                line.write(buffer, 0, n);
            }
        }
    }
    

    References:

    • http://odoepner.wordpress.com/2013/07/19/play-mp3-using-javax-sound-sampled-api-and-mp3spi/

提交回复
热议问题