-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMusic player using java.txt
More file actions
136 lines (121 loc) · 4.6 KB
/
Music player using java.txt
File metadata and controls
136 lines (121 loc) · 4.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
import javazoom.jl.player.Player;
import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileInputStream;
public class MusicPlayer {
private JFrame frame;
private JButton select, play, pause, resume, stop;
private JLabel songName;
private Player player;
private File selectedFile;
private Thread playerThread;
private boolean isPaused = false;
private long pausePosition = 0;
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> new MusicPlayer().initUI());
}
public void initUI() {
// Initialize components
songName = new JLabel("No song selected", SwingConstants.CENTER);
select = new JButton("Select MP3");
// Create buttons with text
play = new JButton("Play");
pause = new JButton("Pause");
resume = new JButton("Resume");
stop = new JButton("Stop");
// Set up panels
JPanel playerPanel = new JPanel(new GridLayout(2, 1));
JPanel controlPanel = new JPanel(new GridLayout(1, 4));
// Add components to panels
playerPanel.add(select);
playerPanel.add(songName);
controlPanel.add(play);
controlPanel.add(pause);
controlPanel.add(resume);
controlPanel.add(stop);
// Initialize frame
frame = new JFrame("Java Music Player");
frame.setLayout(new BorderLayout());
frame.add(playerPanel, BorderLayout.NORTH);
frame.add(controlPanel, BorderLayout.SOUTH);
frame.setSize(400, 150);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
// Add action listeners
select.addActionListener(e -> selectSong());
play.addActionListener(e -> playSong());
pause.addActionListener(e -> pauseSong());
resume.addActionListener(e -> resumeSong());
stop.addActionListener(e -> stopSong());
}
private void selectSong() {
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileFilter(new FileNameExtensionFilter("MP3 Files", "mp3"));
int result = fileChooser.showOpenDialog(frame);
if (result == JFileChooser.APPROVE_OPTION) {
selectedFile = fileChooser.getSelectedFile();
songName.setText("Selected: " + selectedFile.getName());
stopSong(); // Stop any currently playing song
}
}
private void playSong() {
if (selectedFile == null) return;
stopSong(); // Stop previous playback
try {
FileInputStream fis = new FileInputStream(selectedFile);
player = new Player(fis);
playerThread = new Thread(() -> {
try {
player.play();
} catch (Exception e) {
JOptionPane.showMessageDialog(frame, "Error playing file: " + e.getMessage());
}
});
playerThread.start();
isPaused = false;
} catch (Exception e) {
JOptionPane.showMessageDialog(frame, "Error loading file: " + e.getMessage());
}
}
private void pauseSong() {
if (player != null && !isPaused) {
pausePosition = player.getPosition();
player.close();
isPaused = true;
}
}
private void resumeSong() {
if (selectedFile == null || !isPaused) return;
try {
FileInputStream fis = new FileInputStream(selectedFile);
fis.skip(pausePosition);
player = new Player(fis);
playerThread = new Thread(() -> {
try {
player.play();
} catch (Exception e) {
JOptionPane.showMessageDialog(frame, "Error resuming playback: " + e.getMessage());
}
});
playerThread.start();
isPaused = false;
} catch (Exception e) {
JOptionPane.showMessageDialog(frame, "Error resuming file: " + e.getMessage());
}
}
private void stopSong() {
if (player != null) {
player.close();
player = null;
}
if (playerThread != null && playerThread.isAlive()) {
playerThread.interrupt();
}
isPaused = false;
pausePosition = 0;
}
}