Не работает 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 шт):

Автор решения: Vitalizzare ушел в монастырь

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()))
→ Ссылка