为什么使用 python 和在线 webapp 将 wav 文件编码为 base64 会给出不同的结果?
Why does encoding wav file to base64 with python and online webapp give different results?
我正在制作一个需要播放一些音频文件的简单网络应用程序,使用 howler.js. howler.js accepts base64 URI as input, so I wanted to try that out. To test it, I took a sample audio file and used an online audio-to-base64 encoder 获取 base64 URI。我在base64字符串前面加上了数据描述("data:audio/wav;base64,")复制粘贴到下面的JS函数中...:
function playSound() {
var data = "";
var sound = new Howl({
src: [data],
loop: false
});
sound.play();
}
...而且效果很好。由于我要处理相当多的音频文件,我想我会使用一个简短的 python 脚本将它们全部转换为 base64。为了测试,我使用以下 python 代码将相同的音频转换为 base64 字符串:
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.
python 编码为 base64 的方式似乎有些不同。这可能是什么原因?
一段时间后回到这里,问题变得很明显。这只是我在OP(第二块)中提到的用于将base64编码写入文件的代码块的问题。
base64.b64encode(f1.read())
returns 位字符串,在 Python 中用以下符号表示(即当你 print/write 它时,你会看到它像这个):b'string goes here'
。所以问题只是 b' '
包裹在我实际的 base64 字符串周围,而我正在使用它。我所要做的就是摆脱 b' '
,我通过将位串转换为 ASCII 像这样:str(encoded_f1,'ascii', 'ignore')
。
真是愚蠢的错误,但希望它能帮助别人。
我正在制作一个需要播放一些音频文件的简单网络应用程序,使用 howler.js. howler.js accepts base64 URI as input, so I wanted to try that out. To test it, I took a sample audio file and used an online audio-to-base64 encoder 获取 base64 URI。我在base64字符串前面加上了数据描述("data:audio/wav;base64,")复制粘贴到下面的JS函数中...:
function playSound() {
var data = "";
var sound = new Howl({
src: [data],
loop: false
});
sound.play();
}
...而且效果很好。由于我要处理相当多的音频文件,我想我会使用一个简短的 python 脚本将它们全部转换为 base64。为了测试,我使用以下 python 代码将相同的音频转换为 base64 字符串:
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.
python 编码为 base64 的方式似乎有些不同。这可能是什么原因?
一段时间后回到这里,问题变得很明显。这只是我在OP(第二块)中提到的用于将base64编码写入文件的代码块的问题。
base64.b64encode(f1.read())
returns 位字符串,在 Python 中用以下符号表示(即当你 print/write 它时,你会看到它像这个):b'string goes here'
。所以问题只是 b' '
包裹在我实际的 base64 字符串周围,而我正在使用它。我所要做的就是摆脱 b' '
,我通过将位串转换为 ASCII 像这样:str(encoded_f1,'ascii', 'ignore')
。
真是愚蠢的错误,但希望它能帮助别人。