Closed Bowen951209 closed 1 month ago
Leave a quick test here for frequent tests.
package net.okt;
import net.okt.audioUtils.Audio;
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.io.File;
public class AudioPointerTest extends JFrame {
public static void main(String[] args) throws Exception {
new AudioPointerTest();
}
private long startPlaySystemTime;
private int pauseTimePosition;
private boolean isPLaying;
private final Audio audio = new Audio(new File("D:\\Desktop\\Bowen\\code\\JAVA\\open-karaoke-toolkit\\samples\\LiuLongKid\\LiuLongKid.wav"));
public AudioPointerTest() throws Exception {
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS));
JPanel canvas = new JPanel() {
@Override
public void paint(Graphics g) {
super.paint(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(Color.RED);
g2d.fillRect(audio.getTimePosition() / 2, 0, 1, 100);
}
};
canvas.setPreferredSize(new Dimension(1000, 400));
canvas.addKeyListener(new KeyAdapter() {
@Override
public void keyTyped(KeyEvent e) {
if (e.getKeyChar() == ' ') {
pause();
}
}
});
JButton playBtn = new JButton("Play");
playBtn.addActionListener((e -> {
play();
canvas.requestFocus();
}));
JButton pauseBtn = new JButton("Pause");
pauseBtn.addActionListener(e -> pause());
add(canvas);
add(playBtn);
add(pauseBtn);
pack();
setVisible(true);
new Timer(10, e -> canvas.repaint()).start();
}
private void play() {
System.out.println("PLAY");
startPlaySystemTime = System.currentTimeMillis();
isPLaying = true;
audio.play();
}
private void pause() {
System.out.println("PAUSE");
pauseTimePosition = getTimePosition();
isPLaying = false;
audio.pause();
}
private int getTimePosition() {
if (isPLaying)
return (int) (System.currentTimeMillis() - startPlaySystemTime);
else
return pauseTimePosition;
}
}
When pausing, pointer won't stop at the exact time pause but jump forward a little bit.