直接从流中编写.mp3文件

时间:2013-12-10 19:46:00

标签: python mp3 audio-streaming audio-recording encoder

我正在尝试从流中记录样本并将片段保存为.mp3文件。以下代码正确读取流并将数据保存到文件中。该文件在媒体播放器中播放但没有标题等,所以当我尝试使用.mp3文件执行其他操作(例如使用LAME将其转换为其他格式)时,它每次都会失败。有没有人有这种经历的经验?

以下是获取.mp3文件的工作示例。对不起,如果你有商业广告;收音机糟透了。

import urllib2
from datetime import datetime
from datetime import timedelta

# Name of the file stream and how long to record a sample
URL = "http://4893.live.streamtheworld.com:80/KUFXFMAAC_SC"
RECORD_SECONDS = 30

# Open the file stream and write file
filename = 'python.mp3'
f=file(filename, 'wb')
url=urllib2.urlopen(URL)

# Basically a timer
t_start = datetime.now()
t_end = datetime.now()
t_end_old = t_end

# Record in chunks until
print "Recording..."
while t_end-t_start < timedelta(seconds=RECORD_SECONDS):
    f.write(url.read(1024))
    t_end = datetime.now()
# Or one big read?
#f.write(url.read(1024*517))


f.close()

这可能接近我正在尝试做的事情:? encoding mp3 from a audio stream of PyTTS

1 个答案:

答案 0 :(得分:0)

您需要阅读有关mpeg帧http://mpgedit.org/mpgedit/mpeg_format/mpeghdr.htm的内容 你捕获时可能没有排列帧,所以你的第一帧和最后一帧可能都不完整。

帧的开头是11个设置位,所以连续11个。因此,您需要找到第一帧的开头并删除它之前的所有内容,然后找到最后一帧的开头并将其删除。或者您可以在从流中读取时执行此操作。您可以使用binascii检查十六进制值。