首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >列出设备时PyAudio 'utf8‘错误

列出设备时PyAudio 'utf8‘错误
EN

Stack Overflow用户
提问于 2014-02-05 13:07:57
回答 4查看 885关注 0票数 6

当使用PyAudio (Port音频绑定)和ASIO+DirectSound支持时,以下代码:

代码语言:javascript
复制
import pyaudio

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

..。产生此错误:

代码语言:javascript
复制
UnicodeDecodeError: 'utf8' codec can't decode byte 0xe9 in position 1: invalid continuation byte

我们如何解决这个问题?

问题可能来自"pyaudio.py",第990行,因为utf8解码不成功:

代码语言:javascript
复制
           return {'index' : index,
                    'structVersion' : device_info.structVersion,
                    'name' : device_info.name,

这里的答案Special characters in audio devices name : Pyaudio (“不要使用PyAudio")并不令人满意。

溯源

代码语言:javascript
复制
...
{'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
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-02-18 08:44:17

唯一成功的解决办法是:

非常感谢@cgohlke构建了新的现成安装程序:http://www.lfd.uci.edu/~gohlke/pythonlibs/#pyaudio

票数 1
EN

Stack Overflow用户

发布于 2014-02-08 06:40:58

错误“无效的继续字节”使我认为文本对该特定索引是损坏的。

如果您能够修改pyaudio.py文件(或者让pyaudio.py文件返回名称),您可以尝试使用'Unicode‘来处理UTF-8解码。这需要一个最好的猜测,编码可以是什么。下面是他们的教程(http://www.crummy.com/software/BeautifulSoup/bs4/doc/#unicode-dammit)的链接

我认为代码看起来就像教程一样:

代码语言:javascript
复制
from bs4 import UnicodeDammit

dammit = UnicodeDammit(audiodevicename)
print(dammit.unicode_markup) ## Wéird Device Name!
票数 5
EN

Stack Overflow用户

发布于 2014-02-14 13:25:06

我使用了分叉的pyAudio和修改的portaudiomodule.c代码

代码语言:javascript
复制
PyUnicode_DecodeFSDefault

而不是

代码语言:javascript
复制
 PyUnicode_FromString

这很可能解决unicode问题。看看能不能帮上忙。

叉子:https://github.com/joelewis/PyAudio/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21578210

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档