私は現在、難しい問題に直面しています。フランスのWindows環境で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
コードにアクセスできれば、これは問題になりません (文字列チェーンの前に u"..." を追加する必要があると思います)。
問題は、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