В наше время музыкальные плееры являются неотъемлемой частью жизни многих людей. Они используются для прослушивания музыки в дороге, в спортзале, в офисе или дома. В этой статье мы рассмотрим, как написать музыкальный плеер на Java.
Для создания музыкального плеера на Java мы будем использовать библиотеку JavaFX. Наш плеер будет иметь следующие функции:
- открытие аудиофайлов
- воспроизведение / пауза
- перемотка песни вперед / назад
- изменение громкости
Давайте начнем с создания графического интерфейса пользователя. Для этого мы будем использовать классы из библиотеки JavaFX. Ниже показан код, который создает GUI нашего плеера:
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.*;
import javafx.stage.FileChooser;
import javafx.stage.Stage;
import javafx.util.Duration;
import java.io.File;
public class MusicPlayer extends Application {
private Button playButton;
private Button stopButton;
private Slider volumeSlider;
private Slider timeSlider;
private Label fileNameLabel;
private Label timeLabel;
private MediaPlayer mediaPlayer;
private File currentFile;
@Override
public void start(Stage primaryStage) throws Exception {
BorderPane root = new BorderPane();
root.setPadding(new Insets(10, 10, 10, 10));
// создание меню
MenuBar menuBar = new MenuBar();
Menu fileMenu = new Menu("Файл");
MenuItem openMenuItem = new MenuItem("Открыть");
MenuItem exitMenuItem = new MenuItem("Выход");
fileMenu.getItems().addAll(openMenuItem, new SeparatorMenuItem(), exitMenuItem);
menuBar.getMenus().addAll(fileMenu);
// создание панели управления плеера
HBox playbackControlBox = new HBox(10);
playbackControlBox.setAlignment(Pos.CENTER);
playButton = new Button();
playButton.setGraphic(new ImageView(new Image("playButton.png")));
stopButton = new Button();
stopButton.setGraphic(new ImageView(new Image("stopButton.png")));
timeLabel = new Label("00:00 / 00:00");
timeSlider = new Slider();
timeSlider.setPrefWidth(300);
volumeSlider = new Slider();
volumeSlider.setPrefWidth(100);
playbackControlBox.getChildren().addAll(playButton, stopButton, timeLabel, timeSlider, volumeSlider);
// создание названия и авторских прав
fileNameLabel = new Label("Название песни");
Label authorLabel = new Label("Авторские права (c) Ваша фамилия");
// создание главной панели
VBox mainBox = new VBox(10);
mainBox.setAlignment(Pos.TOP_CENTER);
mainBox.getChildren().addAll(menuBar, fileNameLabel, authorLabel, playbackControlBox);
// обработчики кнопок
playButton.setOnAction(actionEvent -> {
if (mediaPlayer != null) {
if (mediaPlayer.getStatus() == MediaPlayer.Status.PLAYING) {
mediaPlayer.pause();
playButton.setGraphic(new ImageView(new Image("playButton.png")));
} else if (mediaPlayer.getStatus() == MediaPlayer.Status.PAUSED) {
mediaPlayer.play();
playButton.setGraphic(new ImageView(new Image("pauseButton.png")));
}
}
});
stopButton.setOnAction(actionEvent -> {
if (mediaPlayer != null) {
mediaPlayer.stop();
playButton.setGraphic(new ImageView(new Image("playButton.png")));
}
});
// обработчик слайдера громкости
volumeSlider.valueProperty().addListener((observableValue, oldValue, newValue) -> {
if (mediaPlayer != null) {
mediaPlayer.setVolume(volumeSlider.getValue() / 100.0);
}
});
// обработчик слайдера времени песни
timeSlider.valueProperty().addListener((observableValue, oldValue, newValue) -> {
if (mediaPlayer != null) {
double currentTime = mediaPlayer.getCurrentTime().toSeconds();
mediaPlayer.seek(Duration.seconds(timeSlider.getValue()));
timeSlider.setMax(mediaPlayer.getTotalDuration().toSeconds());
timeLabel.setText(formatTime(currentTime) + " / " + formatTime(mediaPlayer.getTotalDuration().toSeconds()));
}
});
// обработчик кнопки открытия файла
openMenuItem.setOnAction(actionEvent -> {
FileChooser fileChooser = new FileChooser();
fileChooser.getExtensionFilters().addAll(
new FileChooser.ExtensionFilter("Audio Files", "*.mp3", "*.wav", "*.ogg"));
currentFile = fileChooser.showOpenDialog(primaryStage);
if (currentFile != null) {
fileNameLabel.setText(currentFile.getName());
playFile(currentFile);
}
});
Scene scene = new Scene(mainBox, 500, 200);
primaryStage.setScene(scene);
primaryStage.setTitle("MusicPlayer");
primaryStage.show();
}
private void playFile(File file) {
if (mediaPlayer != null) {
mediaPlayer.stop();
}
Media media = new Media(file.toURI().toString());
mediaPlayer = new MediaPlayer(media);
mediaPlayer.setAutoPlay(true);
mediaPlayer.setOnReady(() -> {
timeSlider.setMax(mediaPlayer.getTotalDuration().toSeconds());
timeSlider.setValue(0);
volumeSlider.setValue(mediaPlayer.getVolume() * 100);
timeLabel.setText("00:00 / " + formatTime(mediaPlayer.getTotalDuration().toSeconds()));
});
mediaPlayer.currentTimeProperty().addListener((observableValue, oldDuration, newDuration) -> {
if (!timeSlider.isValueChanging()) {
timeSlider.setValue(newDuration.toSeconds());
timeLabel.setText(formatTime(newDuration.toSeconds()) + " / " + formatTime(mediaPlayer.getTotalDuration().toSeconds()));
}
});
}
private String formatTime(double secs) {
int minutes = ((int) secs) / 60;
int seconds = ((int) secs) % 60;
return String.format("%02d:%02d", minutes, seconds);
}
public static void main(String[] args) {
launch(args);
}
}
Прежде всего мы создаем меню, которое содержит только один пункт - Открыть. Затем мы создаем панель управления плеера, которая содержит кнопки Play / Pause, Stop, слайдер времени, слайдер громкости и метку времени. Весь пользовательский интерфейс расположен в сцене, которую мы создаем в методе start().
В методе playFile() мы реализуем воспроизведение аудиофайла. Для этого мы сначала создаем экземпляр класса Media, указывая путь к выбранному файлу. Затем мы создаем новый экземпляр класса MediaPlayer и устанавливаем его свойство AutoPlay равным true. Мы также добавляем обработчики для слайдера времени песни и слайдера громкости, чтобы управлять временем и громкостью плеера.
Наконец, мы добавляем обработчик событий для пункта меню Открыть. Когда пользователь выбирает файл, мы вызываем метод playFile() для воспроизведения выбранного файлы.
Это - небольшой, но полнофункциональный музыкальный плеер на Java. Вы можете запустить его, выбрать файл и наслаждаться музыкой!
Итак, сегодня мы рассмотрели, как можно создать музыкальный плеер на Java, используя библиотеку JavaFX. Благодаря этому примеру вы можете реализовать свой собственный музыкальный плеер и расширить его функциональность, дополнив его новыми возможностями. Если хотите погрузиться в мир разработки программного обеспечения, приходите обучаться на программах Академии прикладной информатики.
Получилось ли у вас реализовать свой собственный плеер? С какими трудностями вы столкнулись? Пишите свои комментарии.