6

ASIO+DirectSound サポートで PyAudio (Portaudio バインディング) を使用する場合、次のコード:

import pyaudio

p = pyaudio.PyAudio()
for i in range(p.get_device_count()):
    print p.get_device_info_by_index(i)

...このエラーが発生します:

UnicodeDecodeError: 'utf8' codec can't decode byte 0xe9 in position 1: invalid continuation byte

どうすればこの問題を解決できますか?


問題は、失敗した utf8 デコードのため、「pyaudio.py」の 990 行目から発生する可能性があります。

           return {'index' : index,
                    'structVersion' : device_info.structVersion,
                    'name' : device_info.name,

この回答はこちらオーディオデバイス名の特殊文字:Pyaudio(「PyAudioを使用しないでください」)は満足のいくものではありません。


トレースバック

...
{'defaultSampleRate': 44100.0, 'defaultLowOutputLatency': 0.0, 'defaultLowInputLatency': 0.12, 'maxInputChannels': 2L, 'structVersion': 2L, 'hostApi': 1L, 'index': 8, 'defaultHighOutputLatency': 0.0, 'maxOutputChannels': 0L, 'name': u'Microphone interne (Conexant 20672 SmartAudio HD)', 'defaultHighInputLatency': 0.24}
Traceback (most recent call last):
  File "D:\test\test.py", line 5, in <module>
    print p.get_device_info_by_index(i)
  File "C:\ProgramData\Anaconda\lib\site-packages\pyaudio.py", line 977, in get_device_info_by_index
    pa.get_device_info(device_index)
  File "C:\ProgramData\Anaconda\lib\site-packages\pyaudio.py", line 990, in _make_device_info_dictionary
    'name' : device_info.name,
UnicodeDecodeError: 'utf8' codec can't decode byte 0xe9 in position 1: invalid continuation byte
4

4 に答える 4

5

エラー「無効な継続バイト」により、その特定のインデックスのテキストが破損していると思われます。

pyaudio.py ファイルを変更できる (または pyaudio.py ファイルを取得して名前だけを返す) ことができる場合は、「Unicode Dammit」を使用して自分で UTF-8 デコードを処理できる場合があります。エンコーディングが何であるかについては、ほとんど最善の推測が必要です。ここに彼らのチュートリアルへのリンクがあります ( http://www.crummy.com/software/BeautifulSoup/bs4/doc/#unicode-dammit )

コードはチュートリアルと同じように見えると思います:

from bs4 import UnicodeDammit

dammit = UnicodeDammit(audiodevicename)
print(dammit.unicode_markup) ## Wéird Device Name!
于 2014-02-08T06:40:58.060 に答える
1

私はpyAudioをフォークし、https://github.com/joelewis/PyAudio/blob/master/src/_portaudiomodule.cコードを使用するように変更しました

PyUnicode_DecodeFSDefault

それ以外の

 PyUnicode_FromString

おそらくユニコードの問題を解決するかもしれません。役立つかどうかを確認してください。

フォーク: https://github.com/joelewis/PyAudio/

于 2014-02-14T13:25:06.590 に答える