为什么使用python和在线webapp将wav文件编码为base64会给出不同的结果?
问题描述:
我正在制作一个简单的网络应用程序,需要播放一些音频文件,使用howler.js。 howler.js接受base64 URI作为输入,所以我想尝试一下。为了测试它,我拿了一个示例音频文件,并使用在线audio-to-base64 encoder获取base64 URI。我添加的数据描述(“数据:音频/ WAV; BASE64”)以base64字符串的前面,复制并粘贴到下面的JS函数...:为什么使用python和在线webapp将wav文件编码为base64会给出不同的结果?
function playSound() {
var data = "";
var sound = new Howl({
src: [data],
loop: false
});
sound.play();
}
...它完美地工作。由于我会处理相当数量的音频文件,我想我会使用一个简短的python脚本将它们全部转换为base64。为了测试,我转换相同的音频到Base64字符串以下Python代码:
import base64
with open("0.wav", "rb") as f1,open("b64.txt", "w") as f2:
encoded_f1 = base64.b64encode(f1.read())
f2.write("data:audio/wav;base64,")
f2.write(str(encoded_f1))
我注意到的base64字符串是不同的前一个我从网站早点起床。我粘贴到这一点前面所示的JS功能,但是当我试图播放的声音,我得到以下错误:
Uncaught DOMException: Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded.
似乎有某种的方式蟒蛇不同的是编码为base64。这可能是什么原因?
答
过了一段时间后又回来了,问题变得明显。这只是我在OP(第二块)中提到的代码块中的一个问题,我曾用它将base64编码写入文件。
base64.b64encode(f1.read())
返回一个位串,它在Python中用下列符号表示(即当您打印/编写它时,您会看到它):b'string goes here'
。所以问题只是b' '
缠绕在我实际的base64字符串上,而我正在使用它。我所要做的就是摆脱b' '
,这是我通过将bitstring转换为ASCII来完成的:str(encoded_f1,'ascii', 'ignore')
。
真的很愚蠢的错误,但希望它可以帮助别人。
atob()'叫什么? – guest271314
它被称为howler.js代码本身。看看这里:https://github.com/goldfire/howler.js/blob/master/dist/howler.core.min.js(代码是在一行,但CTRL + F会告诉你在哪里'atob()'被调用)。 –
你可以创建一个jsfiddle https://jsfiddle.net或者plnkr https://plnkr.co,包括在'python'创建的'data URI'吗? – guest271314