Как получить текущий кадр игрока в JLayer? Реализация метода паузы()JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как получить текущий кадр игрока в JLayer? Реализация метода паузы()

Сообщение Anonymous »

Я пытаюсь написать mp3-плеер на Java.
Я хочу реализовать метод паузы(), который сохраняет кадр, который проигрыватель (

Код: Выделить всё

AdvancedPlayer
) остановился. Метод return() запускает проигрыватель из сохраненного кадра.
Класс AudioHandler:

Код: Выделить всё

public class AudioHandler {
private AdvancedPlayer player;
private Thread playThread;
Bitstream stream;
private boolean playing = false;
private boolean paused;
private int pausedOnFrame;
private Track currTrack;

/*
* Handling the playing of an mp3 instance
* @param track Track instance that carries the path that the player can play
*/
public void play(Track track){
String path = track.getPath();
currTrack = track;

if(!playing){
playing = true;
paused = false;
pausedOnFrame = 0;
// Thread handling is needed cause I will implement a SwiftGUI
playThread = new Thread(() -> {
try(FileInputStream fis = new FileInputStream(path)) {
stream = new Bitstream(fis);
player = new AdvancedPlayer(
player.play(pausedOnFrame, Integer.MAX_VALUE);
}
catch (JavaLayerException | IOException e) { e.printStackTrace(); }
finally{
playing = false;
pausedOnFrame = 0;
}
});
playThread.start();
}
else System.out.println("Alredy playing.");
} // end of

/*
* Stops the thread and the player
* Sets the playing to false
*/
public void stop() {
// ...
}

/*
* Sets the paused to true
* Closes the player == pauses the player at the frame
*/
public void pause() throws BitstreamException {
if (playing && !paused) {
System.out.println(stream.readFrame());
player.close();
paused = true;
}
}

/*
* Resumes playback from where it was paused
*/
public void resume() {
if (paused) {
paused = false;
play(currTrack, pausedOnFrame); // Start playing again from the saved path
}
}

} // end of class

Основные, где я их вызываю:

Код: Выделить всё

import java.io.*;

public class Main {
public static void main(String[] args) {
try{
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
Track asd = "/path/to/song.mp3";
AudioHandler plr = new AudioHandler();

String input;
while(true){
input = reader.readLine();
if(input.equals("exit")) System.exit(0);
if(input.equals("play")) plr.play(asd);
if(input.equals("stop")) plr.stop();
if(input.equals("pause")) plr.pause();
if(input.equals("resume")) plr.resume();
}
}
catch(Exception e){}

} // end of main method
} // end of Main class
Класс Player имеет метод getFrame(), но не имеет метода play(), который работает с сохраненным кадром. (Поэтому я не могу выполнить play(fromThisFrame, Integer.MAX_VALUE);)
Я не могу найти документацию, и я недостаточно хорош, чтобы прочитать ее из кода.
Это тестовая ветка проекта заданий, поэтому, пожалуйста, пока не прожаривайте код до конца. Я сделаю это красивее и безопаснее, но мне просто нужен минимальный, чтобы приступить к остальным вещам.
Я отредактирую код и публикацию на путь. Не стесняйтесь редактировать вопрос и делать его более понятным, если я не выполнил свою работу достаточно хорошо.
  • Я пытался переключиться на JavaFX, но это не скомпилировалось. .
  • Я пытался прочитать исходный код библиотеки, но это не помогло.
  • Я рефакторил код много раз, и вот текущий состояние
  • Я пытался использовать ChatGPT и Codium для решения этой проблемы, но они не предоставили рабочего решения. (Текущий код в основном основан на ответе ChatGPT, потому что он оказался ближе к тому, что я ожидал.)


Подробнее здесь: https://stackoverflow.com/questions/790 ... use-method
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»