题目:16.22(播放、循环播放和停止播放一个音频剪辑)
编写一个满足下面要求的程序:
- 使用AudioClip获取一个音频文件,该文件存放在类目录下。
- 放置三个标记为Play、Loop和Stop的按钮,如图16-46a所示。
- 单击Play按钮时,会播放该音频一次。单击Loop按钮时,会循环播放音频。单击Stop按钮时,会停止播放该音频。
习题思路
- 创建一个HBox,新建三个按钮并放置。
- 新建一个AudioClip(AudioClip和Media一样只支持绝对路径),为避免文件错误,相对路径建议使用File转换为绝对路径后再创建AudioClip;或者直接在绝对路径前面添加file:/(推荐)
- 当Play按钮按下时播放音频AudioClip.play()
- 当Loop按钮按下时把循环次数设为无限(audioClip.setCycleCount(MediaPlayer.INDEFINITE)
- 当Stop按钮按下时调用AudioClip的Stop方法(AudioClip没有暂停只有停止)
-
代码示例
编程练习题16_22PlayAudio.java
package chapter_16;
import java.io.File;
import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.HBox;
import javafx.scene.media.AudioClip;
import javafx.scene.media.MediaPlayer;
import javafx.stage.Stage;
public class 编程练习题16_22PlayAudio extends Application{
@Override
public void start(Stage primaryStage) throws Exception {
//方法一
/*File mediaFile = new File("src/Music/Coming_Home-Peter_Jeremias.mp3");
String mediaURL = mediaFile.toURL().toString();
if (!mediaURL.startsWith("file:")) {
mediaURL = "file:" + mediaURL;
}
AudioClip audioClip = new AudioClip(mediaURL);*/
//方法二
//AudioClip audioClip = new AudioClip("file:/C:/Users/Lenovo/eclipse-workspace/JavaFX/src/Music/截取.mp3");//可以用一个短的音频来测试Loop
AudioClip audioClip = new AudioClip("file:/C:/Users/Lenovo/eclipse-workspace/JavaFX/src/Music/Coming_Home-Peter_Jeremias.mp3");
HBox hBox = new HBox(10);
hBox.setAlignment(Pos.CENTER);
Button btPlay = new Button("Play");
Button btLoop = new Button("Loop");
Button btStop = new Button("Stop");
hBox.getChildren().addAll(btPlay,btLoop,btStop);
btPlay.setOnAction(e -> audioClip.play());
btLoop.setOnAction(e -> audioClip.setCycleCount(MediaPlayer.INDEFINITE));
btStop.setOnAction(e -> audioClip.stop());
Scene scene = new Scene(hBox,320, 80);
primaryStage.setTitle("编程练习题16_22PlayAudio");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
Application.launch(args);
}
}
-
结果展示