How to have the user choose an audio file and play it in Java

前端 未结 2 1106
Happy的楠姐
Happy的楠姐 2020-12-12 04:35

I want to be able to make either a GUI or console application where the user clicks a button to select an audio file from their computer (of a compatible format) and it play

相关标签:
2条回答
  • 2020-12-12 04:54

    Here is a simple way to play a short clip.

    import javax.sound.sampled.*;
    import java.net.URL;
    import javax.swing.JOptionPane;
    
    class ClipTest {
    
      public static void main(String[] args) throws Exception {
        String clipName = null;
        if (args.length==1) {
          clipName = args[0];
        } else {
          clipName = "http://pscode.org/media/leftright.wav";
        }
        System.out.println("Looping '" + clipName + "'.");
        URL url = new URL(clipName);
        AudioInputStream ais = AudioSystem.getAudioInputStream(url);
        Clip clip = AudioSystem.getClip();
        clip.open( ais );
        clip.loop(2);
        clip.start();
        JOptionPane.showMessageDialog(null, "Close to end..");
      }
    }
    

    Sample input/output.

    F:\proj>java ClipTest http://pscode.org/media/100_2817-linear.wav
    Looping 'http://pscode.org/media/100_2817-linear.wav'.
    
    F:\proj>java ClipTest
    Looping 'http://pscode.org/media/leftright.wav'.
    
    F:\proj>
    
    0 讨论(0)
  • 2020-12-12 05:07

    This java uses sun classes:

    import sun.audio.*; //import the sun.audio package
    import java.awt.*;
    import java.io.*;
    
    
    public class SoundPlayer extends Frame implements FilenameFilter {
    
      Button openButton = new Button("Open");  
      Button playButton = new Button("Play");
      Button loopButton = new Button("Loop");
      Button stopButton = new Button("Stop");
      Label filename = new Label("                   ");
      File theFile = null;
      AudioData theData = null;
      InputStream nowPlaying = null;
    
      public SoundPlayer() {
        super("Sound Player");
        resize(300, 200);
        Panel north = new Panel();
        north.setLayout(new FlowLayout(FlowLayout.LEFT));
        north.add(new Label("File: "));
        north.add("North", filename);
        add("North", north);
        Panel south = new Panel();
        south.add(openButton);
        south.add(playButton);
        south.add(loopButton);
        south.add(stopButton);
        add("South", south);
      }
    
      public static void main(String[] args) {
        SoundPlayer sp = new SoundPlayer();
        sp.show();
      }
    
      public void open() {
        FileDialog fd = new FileDialog(this, "Please select a .au file:");
        fd.setFilenameFilter(this);
        fd.show();
        try {
          theFile = new File(fd.getDirectory() + "/" + fd.getFile());
          if (theFile != null) {
            filename.setText(theFile.getName());
            FileInputStream fis = new FileInputStream(theFile);
            AudioStream as = new AudioStream(fis);
            theData = as.getData();
          }
        }
        catch (IOException e) {
          System.err.println(e);
        }
      }
    
      public void play() {
        stop();    
        if (theData == null) open();
        if (theData != null) {
          AudioDataStream ads = new AudioDataStream(theData);
          AudioPlayer.player.start(ads);
          nowPlaying = ads;
        }
      }
    
      public void stop() {
        if (nowPlaying != null) {
          AudioPlayer.player.stop(nowPlaying);
          nowPlaying = null;
        }
      }
    
      public void loop() {
        stop();
        if (theData == null) open();
        if (theData != null) {
          ContinuousAudioDataStream cads = new ContinuousAudioDataStream(theData);
          AudioPlayer.player.start(cads);
          nowPlaying = cads;
        }
      }
    
      public boolean action(Event e, Object what) {
    
        if (e.target == playButton) {
          play();
          return true;
        }
        else if (e.target == openButton) {
          open();
          return true;
        }
        else if (e.target == loopButton) {
          loop();
          return true;
        }
        else if (e.target == stopButton) {
          stop();
          return true;
        }
    
        return false;
    
      }
    
      public boolean accept(File dir, String name) {
    
        name = name.toLowerCase();
        if (name.endsWith(".au")) return true;
        if (name.endsWith(".wav")) return true;
        return false;
    
      }
    
    }
    
    0 讨论(0)
提交回复
热议问题