Перед прочтением основного контента ниже, пожалуйста, обратите внимание на обновление внутри секции Майна на нашем форуме. У нас появились:
- бесплатные читы для Майнкрафт — любое использование на свой страх и риск;
- маркетплейс Майнкрафт — абсолютно любая коммерция, связанная с игрой, за исключением продажи читов (аккаунты, предоставления услуг, поиск кодеров читов и так далее);
- приватные читы для Minecraft — в этом разделе только платные хаки для игры, покупайте группу "Продавец" и выставляйте на продажу свой софт;
- обсуждения и гайды — всё тот же раздел с вопросами, но теперь модернизированный: поиск нужных хаков, пати с игроками-читерами и другая полезная информация.
Спасибо!
У меня проблема с получением кадров (frames) проигрываемой музыки с помощью AdvancedPlayer из либы javazoom. Я пишу плеер музыки с ползунком для HUD'a, который может управлять длительностью музыки. Здесь вы можете увидеть мой код, выводящий максимальное количество кадров трека, и тестовый код, выводящий количество кадров с момента старта трека. Метод, возвращающий максимальное количество кадров музыки, работает правильно, но 2 метод не работает. Кидал вопрос на стаковерфлоу, но даже там не могут решить этот вопрос
skippedFrames — это переменная, которая используется для расчета положения ползунка после нажатия на нее, вы можете увидеть код здесь (seekTo(targetTime) использует skippedFrames):
Вот коды тех методов.
skippedFrames — это переменная, которая используется для расчета положения ползунка после нажатия на нее, вы можете увидеть код здесь (seekTo(targetTime) использует skippedFrames):
Код:
if (invisibleSliderRect.intersect(mx, my)) {
float clickPosition = Math.max(0, Math.min(1, (mx - invisibleSliderRect.getX()) / invisibleSliderRect.getW()));
int targetTime = (int) ((float) (clickPosition * music.getMaxFrames()));
music.seekTo(targetTime);
return true;
}
Вот коды тех методов.
getFramesPlayed()
работает неправильно, не возвращает кадров как getMaxFrames()
. Он возвращает больше, чем getMaxFrames()
, при этом ошибок и тому подобное он не кидает. Помогите плиз
Код:
public int getFramesPlayed() {
int framesPlayed = skippedFrames;
AudioDevice audioDevice = ((JavaZoomAccessor) player).getAudio();
SourceDataLine sourceDataLine;
if (player != null && audioDevice instanceof JavaSoundAudioDevice js && (sourceDataLine = ((JavaSoundAudioDeviceAccessor) js).getSource()) != null) {
long framesWritten = sourceDataLine.getLongFramePosition();
int frameSize = sourceDataLine.getFormat().getFrameSize();
int playedFrames = 0;
if (frameSize > 0) {
playedFrames = (int) (framesWritten / frameSize);
}
framesPlayed += playedFrames;
int maxFrames = getMaxFrames();
if (framesPlayed > maxFrames) framesPlayed = maxFrames;
}
return framesPlayed;
}
public int getMaxFrames() {
if (currentTrackFile == null) return 0;
try {
FileInputStream fis = new FileInputStream(currentTrackFile);
Bitstream bitstream = new Bitstream(fis);
Header header = null;
int frameCount = 0;
while ((header = bitstream.readFrame()) != null) {
frameCount++;
bitstream.closeFrame();
}
fis.close();
return frameCount;
} catch (Exception e) {
System.err.println("Ошибка: " + e.getMessage());
return 0;
}
}