如何将base64 String直接解码为二进制音频格式

时间:2018-05-10 18:32:28

标签: python base64 decode wav python-bytearray

音频文件通过API发送给我们,这是一种Base64编码的PCM格式。我需要将其转换为PCM,然后将其转换为WAV进行处理。

我能够解码 - >保存到pcm - >从pcm读取 - >使用以下代码保存为wav。

decoded_data = base64.b64decode(data, ' /')
with open(pcmfile, 'wb') as pcm:
    pcm.write(decoded_data)
with open(pcmfile, 'rb') as pcm:
    pcmdata = pcm.read()
with wave.open(wavfile, 'wb') as wav:
    wav.setparams((1, 2, 16000, 0, 'NONE', 'NONE'))
    wav.writeframes(pcmdata)

如果我能将输入字符串解码为二进制并保存为wav,那就容易多了。所以我在Convert string to binary in python

中做了类似的事情
  decoded_data = base64.b64decode(data, ' /')
    ba = ' '.join(format(x, 'b') for x in bytearray(decoded_data))
    with wave.open(wavfile, 'wb') as wav:
        wav.setparams((1, 2, 16000, 0, 'NONE', 'NONE'))
        wav.writeframes(ba)

但我在a bytes-like object is required, not 'str'收到错误wav.writeframes

还尝试了base54.decodebytes()并遇到了同样的错误。

这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:3)

我的一个项目中也遇到了类似的问题。

我能够将base64字符串直接转换为wav:

import base64
encode_string = base64.b64encode(open("audio.wav", "rb").read())
wav_file = open("temp.wav", "wb")
decode_string = base64.b64decode(encode_string)
wav_file.write(decode_string)

首先将其编码为base64。然后以wav格式创建文件,并将解码的base64字符串写入该文件。

我知道这是一个很晚的答案。希望这会有所帮助。