来自声音文件的 UnicodeDecodeError

Posted

技术标签:

【中文标题】来自声音文件的 UnicodeDecodeError【英文标题】:UnicodeDecodeError from sound file 【发布时间】:2016-03-01 13:54:34 【问题描述】:

我正在尝试使用 Google 语音 API 在 Python 中制作语音识别器。我一直在使用和调整来自here 的代码(转换为 Python3)。我在我的计算机上使用一个音频文件,该文件已使用在线转换器从 mp3 转换为 flac 16000 Hz(如原始代码中所指定)。运行代码时出现此错误:

$ python3 speech_api.py 02-29-2016_00-12_msg1.flac 
Traceback (most recent call last):
  File "speech_api.py", line 12, in <module>
    data = f.read()
  File "/usr/lib/python3.4/codecs.py", line 319, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 9: invalid start byte

这是我的代码。 (我敢肯定还有一些东西在 Python3 中不起作用,因为我一直在尝试适应它并且对 urllib 不熟悉...)

#!/usr/bin/python
import sys
from urllib.request import urlopen
import json
try:
    filename = sys.argv[1]
except IndexError:
    print('Usage: transcribe.py <file>')
    sys.exit(1)

with open(filename) as f:
    data = f.read()

req = urllib.request('https://www.google.com/intl/en/chrome/demos/speech.html', data=data, headers='Content-type': 'audio/x-flac; rate=16000')

try:
    ret = urllib.urlopen(req)
except urllib.URLError:
    print("Error Transcribing Voicemail")
    sys.exit(1)

resp = ret.read()
text = json.loads(resp)['hypotheses'][0]['utterance']
print(text)

有什么想法可以做吗?

【问题讨论】:

请分享代码。你是怎么打开文件的? 【参考方案1】:

您需要以二进制模式打开文件

open(filename, 'wb')

注意'b',否则文件将被视为文本并解码为 Unicode。

【讨论】:

谢谢!我认为这可能解决了我的那部分问题。但目前它还不能正常工作,因为它无法使用read 读取音频文件。但我想这是一个不同的问题。 在下载Anaconda获取相关包后,我终于使用rate, data = scipy.io.wavfile.read(filename)读取音频文件。上面的方法不能在 Python3 中读取音频文件,但它解决了 UnicodeDecodeError。 @Ingrid:它可以读取任何二进制文件。它可能不会让您的用例更容易,但音频文件对于 Python 来说是只是二进制内容 哦,对不起,你完全正确!与with open(filename, 'rb') as f: data = f.read() 一起工作也很好。一定是我之前不理解的其他错误。

以上是关于来自声音文件的 UnicodeDecodeError的主要内容,如果未能解决你的问题,请参考以下文章

使用 ActionScript 3 将保存声音录制到文件中。不是来自麦克风

Flutter - 播放来自平台特定文件夹的声音文件(例如 Android 的 android/app/src/main/res/raw)

如何处理来自 WASAPI 流的声音数据块而不将它们写入文件?

iOS为目录中的本地通知分配声音

来自麦克风的声音与来自扬声器的声音

如何使用来自 iPod 库的声音更改 iPhone 的通知声音