В настоящее время я столкнулся с серьезной проблемой. Мне нужно использовать Pyaudio в среде с французскими окнами, и имя звуковых устройств по умолчанию содержит é
или è
.Специальные символы в названиях аудиоустройств: Pyaudio
Это ошибка я получаю, когда специальный символ присутствует:
u=self.p.get_device_info_by_index(e)
File "C:\Python27\lib\site-packages\pyaudio.py", line 977, in get_device_info_
by_index
pa.get_device_info(device_index)
File "C:\Python27\lib\site-packages\pyaudio.py", line 987, in _make_device_inf
o_dictionary
print device_info.name
UnicodeDecodeError: 'utf8' codec can't decode byte 0xe9 in position 13: invalid
continuation byte
Это не было бы проблемой, если бы я мог получить доступ к коду (я должен был бы добавить а.е. «...» в фронт строковой цепи, я думаю).
Проблема в том, что я заглянул внутрь кода Pyaudio, и метод, вызывающий ошибку, определен в файле pyd (_portaudio.pyd), поэтому я не могу его изменить!
Я попытался загрузить _portaudio, чтобы скомпилировать его сам, но найденное мной распределение закодировано на C и довольно тяжело (я не знаю, что в первую очередь о C). Может быть, я мог бы что-то сделать, но я точно не знаю, где и как.
Я мог бы также решить проблему, просто комментируя строку, получающую название аудиоустройств, но гораздо сложнее определить конкретный аудиовход без его имени, чтобы показать пользователю.
EDIT:
Вот общий процесс: я вызываю функцию из pyaudio:
import pyaudio
self.p= pyaudio.PyAudio()
i=self.p.get_device_count()
for e in range(i):
u=self.p.get_device_info_by_index(e)
Это приведет меня в модуль pyaudio который вызывает метод:
device_info.name
device_info - объект, определенный в _portaudio.pyd. Поскольку имя определенных аудиоустройств содержит «é» или «è» (спасибо окнам), а _portaudio.pyd не закодирован для обработки этих символов. Он возвращает ошибку:
UnicodeDecodeError: 'utf8' codec can't decode byte 0xe9 in position 13: invalid
continuation byte
Вы нашли решение @Jdawleer, у меня такая же проблема. – Basj