我目前面臨一個難題。我需要在法國Windows環境中使用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的第一件事)。也許我可以在那裏做點什麼,但我不知道在哪裏以及如何。
我也可以通過評論獲取音頻設備名稱的行來處理問題,但要識別沒有名稱的特定音頻輸入顯示給用戶會更困難。
編輯:
這裏是整個過程: 我調用函數從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 2013-12-27 14:07:05