Воспроизведение звука, запакованного в .qrc
Нужен звук на нажатие клавиш, из опробованных библиотек остановился на pyglet, шустрая и отлично работает с одновременным воспроизведением. Однако после запаковки ресурсов в .qrc файл, оказалось что она, по всей видимости, не умеет работать в таком формате и выдаёт ошибку OSError: [Errno 22] Invalid argument: ':sound/type.wav'.
С подключением и файлами ресурсов всё в порядке, изображения и гифки работают нормально.
Какие есть варианты решения этой проблемы? Не хотелось бы иметь дополнительные файлы с дистрибутивом, поэтому хочу запаковать.
Насколько я понял, .qrc переводит файлы в двоичный код, однако во всей информации, что я нарыл об этой системе, она использовалась исключительно для изображений.
import pyglet
import qrc_resources
sound = ':sound/type.mp3'
song = pyglet.media.load(sound, streaming=False)
song.play()
<RCC>
<qresource prefix="sound">
<file>type.mp3</file>
</qresource>
</RCC>
Ответы (1 шт):
Как выяснилось, pyglet действительно не может работать с запакованными в rcc данными. Выход из этой ситуации - распаковывать содержимое во временную папку перед использованием.
temp_dir = tempfile.mkdtemp()
sound_data = QtCore.QResource(sound).data()
sound_name = sound.split("/")[-1]
sound_path = os.path.join(temp_dir, sound_name)
with open(sound_path, "wb") as f:
f.write(sound_data)
Теперь можно подключать в pyglet переменную sound_path.