我怎样才能发挥.mp3和.wav在我的Java应用程序文件?我正在使用Swing.我尝试在互联网上寻找类似这样的例子:
public void playSound() {
try {
AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(new File("D:/MusicPlayer/fml.mp3").getAbsoluteFile());
Clip clip = AudioSystem.getClip();
clip.open(audioInputStream);
clip.start();
} catch(Exception ex) {
System.out.println("Error with playing sound.");
ex.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
但是,这只会播放.wav文件.
同样的:
http://www.javaworld.com/javaworld/javatips/jw-javatip24.html
我希望能够使用相同的方法播放.mp3文件和.wav文件.
我想知道如何使用JavaFX从Windows shell编译代码.
我有这个代码fxservidor.java:
public class Fxservidor extends Application {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("Hello World!");
Button btn = new Button();
btn.setText("Say 'Hello World'");
btn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
Synthetizer os = new Synthetizer("Ximena");
}
});
StackPane root = new StackPane();
root.getChildren().add(btn);
primaryStage.setScene(new Scene(root, 300, 250));
primaryStage.show();
}
}
Run Code Online (Sandbox Code Playgroud) 我想要一种从Java应用程序播放mp3文件的简单方法.经过一些研究后,我发现最新版本的Java 7 SE与JavaFX打包在一起,所以我想我会尝试.这个问题不是关于播放mp3文件,而是关于让JavaFX以一种良好的方式工作.
因此,在我第一次使用JavaFX进行的实验中,我使用了一些建议在stackoverflow中发布的代码(参见此处)并基本上创建了以下测试程序:
import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
public class progtest extends Application
{
/*---------------------------------------------------------*\
FUNCTION: main()
\*---------------------------------------------------------*/
public static void main(String args[])
{
launch(args);
} /* END: main() */
/*---------------------------------------------------------*\
FUNCTION: start()
\*---------------------------------------------------------*/
@Override
public void start(Stage stage)
{
Media medMsg
=
new Media(getClass().getResource("msg.mp3").toExternalForm());
MediaPlayer medplMsg = new MediaPlayer(medMsg);
medplMsg.play();
System.out.println("Here.\n");
} /* END: start() */
}
Run Code Online (Sandbox Code Playgroud)
(这比我原来的测试程序稍微复杂一点:这个版本是在jewelsea提出的建议之后发出的,这是为了回应我之前发布的关于让程序运行的问题(见这里).)
要编译此代码我使用:
javac -cp "c:\Program Files\Oracle\JavaFX 2.1 Runtime\lib\jfxrt.jar";..\bin -d ..\bin ..\src\progtest.java
Run Code Online (Sandbox Code Playgroud)
并且,为了运行代码,我进入了我的..\bin目录并使用:
java -cp …Run Code Online (Sandbox Code Playgroud) 所以我的代码只是复制粘贴:
import javafx.scene.media.*;
class Gui {
public static void main(String[] args) {
try{
Media hit = new Media("skin.mp3");
MediaPlayer mediaPlayer = new MediaPlayer(hit);
mediaPlayer.play();
}catch(Exception e){
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我得到的例外是:
java.lang.IllegalArgumentException: uri.getScheme() == null!
at com.sun.media.jfxmedia.locator.Locator.<init>(Locator.java:217)
at javafx.scene.media.Media.<init>(Media.java:364)
at Gui.main(gui.java:6)
Run Code Online (Sandbox Code Playgroud)
我正在编译和运行它,即通过jfxrt.jar在classpath中包含该文件
注意:我只是使用记事本而不是任何IDE.
所以任何人都可以告诉我原因 IllegalArgumentException
Thankx
更新:通过使用file://e:/skin.mp3它工作正常,但给我另一个例外:
MediaException: MEDIA_INACCESSIBLE : e
at javafx.scene.media.Media.<init>(Unknown Source)
at Gui.main(gui.java:6)
Run Code Online (Sandbox Code Playgroud)
所以如果你能对这个例外有所了解.
顺便说一句,我检查了这首歌,它没有腐败,因为它在vlc中播放得很好.
在Android中,我们可以使用媒体播放器在设备上播放歌曲,使用光标来获取轨道信息(操作系统会跟踪).我的问题是,这些Java的等价物是什么?
注意:我见过有人提到JavaFX,但是默认情况下这似乎没有安装JVM,因此我的程序将不再是跨平台的.
有什么建议?
注意:这些都是本地文件,但它们可能是任何音频文件类型.