python - 从字节而不是文件名读取以转换音频

标签 python pydub

我将小型声音文件作为 BSON 存储在 MongoDB 中。 任务是从数据库中检索二进制数据,将其转换为适当的格式并发送回前端。 问题在于转换。我发现 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() 将文件路径或类文件对象作为第一个参数。假设您拥有整个波形文件的原始字节(包括波形标题,而不仅仅是音频数据),那么您可以:

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 位/CD 音频,您将使用 2)
  • frame_rate 是采样数/秒(又名,采样率,对于 CD 音频是 44100)
  • channels 有多少个音频流,立体声是2,单声道是1,等等

关于python - 从字节而不是文件名读取以转换音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44424874/

相关文章:

python - 获取每天的小时之间的最小值

python - 无法解析 [{ 和 }] Python 之间返回的 JSON 数据

python - 如何在Python中对排列的每一行求和

用于音频混合拆分的 Python 模块

python - 从 Python 写入 Bigtable

python - 分析简单的 python 脚本

python - 通过重新排序元组来排序元组列表

python - 为什么我在导入 AudioSegment 时出错?

python - 在Python中随机开始播放多个循环音轨?

python - 尝试组合视频和音频轨道时,FFMPEG 会导致无声视频