java让用户选择文件,如何让用户选择一个音频文件,并在Java中播放

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 plays, and as I'm completely inexperienced in GUIs, it would be nice if I could be given a hint as to how to implement a pause and play button, as well as a volume slide/dial and a stop button. All I know is I'm gonna have to import java.io.* and sun.audio.*.

EDIT

My current code is thus:

import sun.audio.*; //import the sun.audio package

import java.awt.*;

import java.io.*;

public class Boombox extends Frame implements FilenameFilter {

/**

*

*/

private static final long serialVersionUID = 4914433234899026080L;

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;

@SuppressWarnings({ "restriction" })

AudioData theData = null;

InputStream nowPlaying = null;

@SuppressWarnings({ "deprecation" })

public Boombox() {

super("Boombox");

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);

}

@SuppressWarnings("deprecation")

public static void main(String[] args) {

Boombox sp = new Boombox();

sp.show();

}

@SuppressWarnings({ "deprecation", "restriction" })

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);

}

}

@SuppressWarnings("restriction")

public void play() {

stop();

if (theData == null) open();

if (theData != null) {

AudioDataStream ads = new AudioDataStream(theData);

AudioPlayer.player.start(ads);

nowPlaying = ads;

}

}

@SuppressWarnings("restriction")

public void stop() {

if (nowPlaying != null) {

AudioPlayer.player.stop(nowPlaying);

nowPlaying = null;

}

}

@SuppressWarnings("restriction")

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;

}

}

解决方案

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>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值