从字节而不是文件名读取以转换音频
Read from bytes not filename to convert audio
我在 MongoDB
中存储了小型声音文件 BSON
。
任务是从数据库中检索二进制数据,将其转换为适当的格式并发送回前端。
问题在于转换。我发现 pydub
可以用于此。
我的代码如下
query_param = json_data['retriever']
query_param1 = query_param.replace('"', "");
data = db.soundData
y = data.find_one({'name': query_param1})
s = y['data'] // here I retrieve the binary data
AudioSegment.from_file(s).export(x, format="mp3")
return send_file(x, 'audio/mp3')
问题是 Audiosegment 线不符合标准
AudioSegment.from_wav("/input/file.wav").export("/output/file.mp3", format="mp3")
并且仍然抛出 'bytes' object has no attribute 'read'
的错误。用 pydub
可以实现吗?
AudioSegment.from_file()
将文件路径或 file-like object 作为第一个参数。假设你有整个 wave 文件的原始字节(包括 wave headers,而不仅仅是音频数据)那么你可以:
import io
s = io.BytesIO(y['data'])
AudioSegment.from_file(s).export(x, format='mp3')
如果您只有音频样本的字节,则需要了解有关音频数据的一些元数据:
AudioSegment(y['data'], sample_width=???, frame_rate=???, channels=???)
sample_width
是每个样本中的字节数(因此对于 16-bit/CD 音频,您将使用 2
)
frame_rate
是 samples/second 的数量(也就是采样率,对于 CD 音频它是 44100
)
channels
有多少个音频流,立体声是 2
,单声道是 1
,等等
我在 MongoDB
中存储了小型声音文件 BSON
。
任务是从数据库中检索二进制数据,将其转换为适当的格式并发送回前端。
问题在于转换。我发现 pydub
可以用于此。
我的代码如下
query_param = json_data['retriever']
query_param1 = query_param.replace('"', "");
data = db.soundData
y = data.find_one({'name': query_param1})
s = y['data'] // here I retrieve the binary data
AudioSegment.from_file(s).export(x, format="mp3")
return send_file(x, 'audio/mp3')
问题是 Audiosegment 线不符合标准
AudioSegment.from_wav("/input/file.wav").export("/output/file.mp3", format="mp3")
并且仍然抛出 'bytes' object has no attribute 'read'
的错误。用 pydub
可以实现吗?
AudioSegment.from_file()
将文件路径或 file-like object 作为第一个参数。假设你有整个 wave 文件的原始字节(包括 wave headers,而不仅仅是音频数据)那么你可以:
import io
s = io.BytesIO(y['data'])
AudioSegment.from_file(s).export(x, format='mp3')
如果您只有音频样本的字节,则需要了解有关音频数据的一些元数据:
AudioSegment(y['data'], sample_width=???, frame_rate=???, channels=???)
sample_width
是每个样本中的字节数(因此对于 16-bit/CD 音频,您将使用2
)frame_rate
是 samples/second 的数量(也就是采样率,对于 CD 音频它是44100
)channels
有多少个音频流,立体声是2
,单声道是1
,等等