如何让用户选择音频文件并在Java中播放
我希望能够制作一个GUI或控制台应用程序,用户点击一个按钮从他们的计算机中选择一个音频文件(兼容格式)并播放,由于我对GUI完全没有经验,如果能给我一个关于如何实现暂停和播放按钮的提示就好了,以及音量滑动/拨号和停止按钮。我只知道我必须导入如何让用户选择音频文件并在Java中播放,java,user-interface,audio,console,javasound,Java,User Interface,Audio,Console,Javasound,我希望能够制作一个GUI或控制台应用程序,用户点击一个按钮从他们的计算机中选择一个音频文件(兼容格式)并播放,由于我对GUI完全没有经验,如果能给我一个关于如何实现暂停和播放按钮的提示就好了,以及音量滑动/拨号和停止按钮。我只知道我必须导入java.io.*和sun.audio.* 编辑 因此,我目前的代码是: import sun.audio.*; //import the sun.audio package import java.awt.*; import java.io.*; pub
java.io.*
和sun.audio.*
编辑
因此,我目前的代码是:
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;
}
}
此java使用sun类:
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;
}
}
此java使用sun类:
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;
}
}
下面是一个播放短片段的简单方法
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..");
}
}
样本输入/输出。
下面是一个播放短片段的简单方法
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..");
}
}
样本输入/输出。
有些代码(如AudioData)被标记为错误,因为它们“由于所需库的限制而无法访问”。好的,现在我已经修复了它,它说:
java.lang.NoClassDefFoundError:SoundPlayer引起的原因:java.lang.ClassNotFoundException:SoundPlayer位于java.net.URLClassLoader$1.run(未知源)在java.net.URLClassLoader.findClass(未知源)的java.lang.ClassLoader.loadClass(未知源)的java.security.AccessController.doPrivileged(本机方法)的sun.misc.Launcher的java.lang.ClassLoader.loadClass(未知源)的java.lang.ClassLoader.loadClass(未知源)线程“main”中的异常部分代码,例如AudioData,被标记为错误,因为它们“由于所需库的限制而无法访问”。好的,现在我已经修复了它,它说:java.lang.NoClassDefFoundError:SoundPlayer引起的原因:java.lang.ClassNotFoundException:SoundPlayer位于java.net.URLClassLoader$1.run(未知源代码)位于java.net.URLClassLoader.findClass(未知源)的java.lang.ClassLoader.loadClass(未知源)的java.security.AccessController.doPrivileged(本机方法)位于sun.misc.Launcher的java.lang.ClassLoader.loadClass(未知源)位于java.lang.ClassLoader.loadClass(未知源)的线程“main”
1中的异常“您所知道的一切”是错误的。2) 将喇叭按钮和滑块安装到(纯)控制台应用程序中是一件棘手的事情。我在想,如果它是一个控制台应用程序,可能会有更改音量、停止和暂停的命令,但我想我已经决定这是行不通的,相反,我要做一个GUI 1)“你所知道的一切”是错误的。2) 将喇叭按钮和滑块安装到(纯)控制台应用程序中是很棘手的。我在想,如果它是一个控制台应用程序,那么会有更改音量、停止和暂停的命令,但我想我已经决定这是行不通的,相反,我要做一个GUI,是的,但我希望能够接受用户选择的音频文件的编辑。将上述功能添加到CLI应用程序。请注意,您应该将GUI与“播放声音”分开(并针对每种声音分别提出问题)。它们在很大程度上是不同的。是的,但我希望能够接受用户选择的音频文件查看编辑。将上述功能添加到CLI应用程序。请注意,您应该将GUI与“播放声音”分开(并针对每种声音分别提出问题)。它们在很大程度上是不同的。