2

私は現在、難しい問題に直面しています。フランスの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
4

1 に答える 1

-1

私はまったく同じ問題に直面しています。私の場合、オーディオデバイス名に漢字が入っていて、UnicodeDecodeError が発生しました。 print device_info.name

これが私の解決策です。

pyaudioの代わりに pymedia を使用します。これを試して:

>>> import pymedia 
>>> dict_list = pymedia.audio.sound.getIDevices()
>>> print dict_list
({'name': '\xc2\xf3\xbf\xcb\xb7\xe7 (Realtek High Definition', 'channels': 2, 'manufId': '1', 'formats': 1048575, 'id': 0, 'productId': '65'},)
>>> dict_list = pymedia.audio.sound.getODevices()
>>> print dict_list
({'name': '\xd1\xef\xc9\xf9\xc6\xf7 (MV USB AUDIO)', 'channels': 2, 'manufId': 'ffff', 'formats': 1048575, 'id': 0, 'productId': 'ffff'}, {'name': '\xd1\xef\xc9\xf9\xc6\xf7 (Realtek High Definition', 'channels': 2, 'manufId': '1', 'formats': 1048575, 'id': 1, 'productId': '64'})

私は python 2.7 を使用しています。

于 2013-07-19T03:49:27.410 に答える