Не работает playsound()
Код
from playsound import playsound
playsound("C:\\\\Ricksappllering\\\\sounds\\\\menu.mp3", False)
Выдаёт ошибку:
Traceback (most recent call last):
File "c:\Ricksappllering\Ricksappllering2.13.py", line 26, in <module>
playsound("C:\\\\Ricksappllering\\\\sounds\\\\menu.mp3", False)
~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\yulya\AppData\Local\Programs\Python\Python313\Lib\site-packages\playsound.py", line 35, in _playsoundWin
winCommand('open "' + sound + '" alias', alias)
~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\yulya\AppData\Local\Programs\Python\Python313\Lib\site-packages\playsound.py", line 30, in winCommand
'\n ' + errorBuffer.value.decode()) # <--
~~~~~~~~~~~~~~~~~~~~~~~~^^
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xce in position 0: invalid continuation byte
Я пробовал установить playsound 1.2.2, пробовал по-разному вводить путь (слеши, обратные слеши, 2 или 4 слэша подряд). Не помогает. Я знаю, что это баг playsound, но как его исправить?
Ответы (1 шт):
playsound 1.2.2
Указанная ошибка связана с недоработкой в версии 1.2.2, в которой при декодировании системных сообщений об ошибках операционной системы Windows не учтено, что система может использовать отличную от UTF-8 кодировку текста. Эта ошибка предположительно исправлена в версии 1.3.0. Если условия проекта позволяют, обновите playsound:
python -m pip install --upgrade wheel # может понадобиться для Python > 3.10
python -m pip install --upgrade playsound
Если вы ограничены версией 1.2.2, тогда нужно самостоятельно внести изменения в файл playsound.py. Полный путь к нему в вашем случае:
C:\Users\yulya\AppData\Local\Programs\Python\Python313\Lib\site-packages\playsound.py
Строка 30 имеет вид:
'\n ' + errorBuffer.value.decode())
Попробуйте изменить её:
'\n ' + errorBuffer.value.decode(getfilesystemencoding()))
Здесь errorBuffer.value - это байткод, метод decode которого нуждается в указании правильной кодировки содержимого. Вместо значения по умолчанию "utf-8" подставляем getfilesystemencoding(), которое ранее в этом файле импортировано и используется для получения кодировки файловой системы. Если по какой-либо причине это не сработает, тогда в начале файла добавьте импортирование from locale import getencoding и подставьте эту функцию:
'\n ' + errorBuffer.value.decode(getencoding()))