Egor Sysoykin
Member
И ещё об одной проблеме хотел отписать, с которой столкнулся во время игры в ритм-игру osu!, в которую сейчас на рефлексе играть невозможно, тк результаты игры не отправляются из-за того, что "System audio playback is not working as expected". Механика борьбы с читерством. В голову только ночью пришло, как показать суть проблемы.
Написал простенький python-скрипт, который делает:
1. Создает плеер, открывает и подготавливает аудиофайл к проигрыванию
2. Сохраняет текущее время
3. Начинает проигрывание файла
4. Играет файл до конца
5. Выводит время, которое файл проигрывался: из текущего вычитаем сохраненное в п.2 время.
Похожий алгоритм и используется в ритм-игре osu! для проверки "правильности" работы аудиоустройства.
Тест показал, что расхождение на reflex'е у аудиофайла длиной 230.791 секунд составило аж 4.6 секунды! Те рефлекс играет быстрее, чем должен. На встроенной же карте (для убедительности, что тест написан верно) результат составил 26 мс. Прогонял несколько раз, результат одинаковый и стабильный, в пределах погрешности. Причем, на слух никак не заметно. Вот так вот reflex экономит нам время
Сам скрипт также прилагаю, но для его работы необходимо поставить зависимости: pygame, sounddevice и ffmpeg(последний поставить может быть проблематично, поэтому можно убрать используемый ffmpeg-код, он используется только для вывода реальной длины аудиофайла).
UPD: такое поведение наблюдается в режиме slave, в если reflex - мастер, то такого не наблюдается
Написал простенький python-скрипт, который делает:
1. Создает плеер, открывает и подготавливает аудиофайл к проигрыванию
2. Сохраняет текущее время
3. Начинает проигрывание файла
4. Играет файл до конца
5. Выводит время, которое файл проигрывался: из текущего вычитаем сохраненное в п.2 время.
Похожий алгоритм и используется в ритм-игре osu! для проверки "правильности" работы аудиоустройства.
Тест показал, что расхождение на reflex'е у аудиофайла длиной 230.791 секунд составило аж 4.6 секунды! Те рефлекс играет быстрее, чем должен. На встроенной же карте (для убедительности, что тест написан верно) результат составил 26 мс. Прогонял несколько раз, результат одинаковый и стабильный, в пределах погрешности. Причем, на слух никак не заметно. Вот так вот reflex экономит нам время
Сам скрипт также прилагаю, но для его работы необходимо поставить зависимости: pygame, sounddevice и ffmpeg(последний поставить может быть проблематично, поэтому можно убрать используемый ffmpeg-код, он используется только для вывода реальной длины аудиофайла).
UPD: такое поведение наблюдается в режиме slave, в если reflex - мастер, то такого не наблюдается
Python:
from pygame import mixer
import time
import ffmpeg
import sounddevice as sd
audio_devices = sd.query_devices()
default_output_device = sd.default.device[1]
print("AUDIO DEVICE: {}".format(audio_devices[default_output_device]['name']))
AUDIO_FILE = "C:/sati.mp3"
real_audio_duration = ffmpeg.probe(AUDIO_FILE)['format']['duration']
mixer.init()
mixer.music.load(AUDIO_FILE)
start_time = time.time()
mixer.music.play()
while mixer.music.get_busy():
pass
print("\nReal elapsed time: {}s, Audio file duration: {}s".format(time.time() - start_time, real_audio_duration))
Последнее редактирование: