在Java桌面应用程序中播放声音
如何在Java桌面应用程序中播放声音(任何格式的音乐文件,如.wma、.mp3)?(不是小程序) 我使用了以下代码(取自关于堆栈溢出的另一个问题),但它引发了一个异常在Java桌面应用程序中播放声音,java,audio,Java,Audio,如何在Java桌面应用程序中播放声音(任何格式的音乐文件,如.wma、.mp3)?(不是小程序) 我使用了以下代码(取自关于堆栈溢出的另一个问题),但它引发了一个异常 public class playsound { public static void main(String[] args) { s s=new s(); s.start(); } } class s extends Thread{ public void run(){ try{
public class playsound {
public static void main(String[] args) {
s s=new s();
s.start();
}
}
class s extends Thread{
public void run(){
try{
InputStream in = new FileInputStream("C:\\Users\\srgf\\Desktop\\s.wma");
AudioStream as = new AudioStream(in); //line 26
AudioPlayer.player.start(as);
}
catch(Exception e){
e.printStackTrace();
System.exit(1);
}
}
}
运行时程序会引发以下异常:
java.io.IOException: could not create audio stream from input stream
at sun.audio.AudioStream.<init>(AudioStream.java:82)
at s.run(delplaysound.java:26)
java.io.IOException:无法从输入流创建音频流
在sun.audio.AudioStream.(AudioStream.java:82)
在s.run(delplaysound.java:26)
使用此库:
希望这能帮助大家解决一个类似的问题:-)嗯。这可能看起来像是我的东西的广告,但你可以在这里使用我的API: 用这个播放很容易 备选方案:使用Java片段(预缓冲) 那么你需要这个方法:
public static AudioInputStream getSupportedAudioInputStreamFromInputStream(InputStream pInputStream) throws UnsupportedAudioFileException,
IOException {
AudioInputStream sourceAudioInputStream = AudioSystem
.getAudioInputStream(pInputStream);
AudioInputStream ret = sourceAudioInputStream;
AudioFormat sourceAudioFormat = sourceAudioInputStream.getFormat();
DataLine.Info supportInfo = new DataLine.Info(SourceDataLine.class,
sourceAudioFormat,
AudioSystem.NOT_SPECIFIED);
boolean directSupport = AudioSystem.isLineSupported(supportInfo);
if(!directSupport) {
float sampleRate = sourceAudioFormat.getSampleRate();
int channels = sourceAudioFormat.getChannels();
AudioFormat newFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,
sampleRate,
16,
channels,
channels * 2,
sampleRate,
false);
AudioInputStream convertedAudioInputStream = AudioSystem
.getAudioInputStream(newFormat, sourceAudioInputStream);
sourceAudioFormat = newFormat;
ret = convertedAudioInputStream;
}
return ret;
}
剪辑示例的来源(我几乎没有做任何更改):
SPI是通过将它们的.jar添加到类路径来添加的
对于mp3,这些是:
- (tritonus_share.jar)
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.util.Duration;
import java.nio.file.Paths;
步骤: 初始化JavaFX:
new JFXPanel();
创建媒体
(声音):
创建一个MediaPlayer
来播放声音:
MediaPlayer player = new MediaPlayer(media);
并播放媒体
:
player.play();
您还可以使用MediaPlayer.setStartTime()
和MediaPlayer.setStopTime()设置开始/停止时间:
或者,您可以停止使用MediaPlayer.stop()
播放音频的示例函数:
public static void playAudio(String name, double startMillis, double stopMillis) {
Media media = new Media(Paths.get(name).toUri().toString());
MediaPlayer player = new MediaPlayer(media);
player.setStartTime(new Duration(startMillis));
player.setStopTime(new Duration(stopMillis));
player.play();
}
更多信息可在JavaFX上找到。检查。我知道它提到了mp3不受JAVA支持,但可能与。wma认为windows不是很好。上面的代码也可以播放硬盘上的文件吗?这对我不起作用。我在线程的run()方法中包含了上面的代码,在语句mp3player.play()之后,我包含了语句sleep(10000);以便音频完成播放。是的,请参见此示例
MediaPlayer player = new MediaPlayer(media);
player.play();
player.setStartTime(new Duration(Duration.ZERO)); // Start at the beginning of the sound file
player.setStopTime(1000); // Stop one second (1000 milliseconds) into the playback
public static void playAudio(String name, double startMillis, double stopMillis) {
Media media = new Media(Paths.get(name).toUri().toString());
MediaPlayer player = new MediaPlayer(media);
player.setStartTime(new Duration(startMillis));
player.setStopTime(new Duration(stopMillis));
player.play();
}