【发布时间】:2014-10-17 14:45:29
【问题描述】:
我有如下所示的代码来从麦克风获取音频:
import pyaudio
p = pyaudio.PyAudio()
CHUNK = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 2
RATE = 1024*10
RECORD_SECONDS = 10
stream = p.open(format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
frames_per_buffer=CHUNK)
for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
data = stream.read(CHUNK)
send_via_socket(data) # function to send each frame to remote system
此代码运行良好。然而,每个 data 帧的大小为 4kb。这意味着需要 40kb 的互联网数据来发送 1 秒的音频数据。 当我将 10 帧(1 秒音频)保存到光盘并使用 pdub 模块将其转换为 mp3 时,它只有 6kb 的数据。 如何在通过套接字发送之前将每个 wav 帧转换为 mp3? (我只需要减小帧的大小以节省网络使用)。 例如:
for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
data = stream.read(CHUNK) # data =4kb
mp3_frame = wav_to_mp3(data) # mp3_frame should be 1kb or less
send_via_socket(mp3_frame) # function to send each frame to remote system
【问题讨论】:
-
我只需在 Google 上搜索
mp3 encoder python即可发现此链接:pymedia.org/tut/recode_audio.html 看来这正是您想要的。 -
@selbie ...您为什么不将其转换为答案并收集赏金?
-
@jimm101 - 我所做的只是谷歌寻找答案。当我回答这个问题的时间不超过 10 秒,没有增加任何洞察力,也没有展示除了我的 133 吨互联网搜索技能之外的任何相关经验/知识时,期望得分是很蹩脚的。 :) 如果我经常用 Python 编码并实现了音频代码,那可能是另一回事了。但是对于这个问题,我所做的只是谷歌的答案......
-
@jimm101 你能举个例子吗,我试过 pydub,pyffmpg,pyaudio。没有选项可以即时编码。每个库都可以选择写入文件
-
为什么不使用 zlib 来压缩数据。我知道首选的选项是编码为 mp3,从而更有效地压缩音频,但如果您正在寻找一个可以作为流工作的快速答案,我会使用 zlib。
标签: python windows python-2.7 pyaudio