2013-12-10 62 views
-1

我試圖從流中記錄樣本並將片段保存爲.mp3文件。以下代碼正確讀取流並將數據保存到文件。該文件在媒體播放器中播放,但沒有標題等,因此當我嘗試使用.mp3文件執行其他操作(例如使用LAME將其轉換爲其他格式)時,它每次都會失敗。有沒有人有這種事情的經驗?直接從流寫入.mp3文件

下面是獲取.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

+0

現在,你所得到的只是一個原始流(它不會有任何頭文件)。所以理論上,你可以命名文件'python.wav','python.wma',它可能會被正確讀取。我不確定mp3是如何從字節碼中編碼的,但是您需要用mp3外殼「包裝」字節碼。 –

+0

作爲後續工作,請查看[PyMedia](http://pymedia.org/index.html)爲您創建MP3。 –

+0

我無法讓pymedia爲此應用程序工作。我試着將擴展名改爲.wav,但我仍然遇到同樣的問題。 –

回答

0

您需要了解MPEG幀http://mpgedit.org/mpgedit/mpeg_format/mpeghdr.htm 您在拍照時,讓你的第一個和最後一個幀可能是不完全的可能不排隊的幀。

一個幀的開始是11個位的,所以11個連續。所以你需要找到第一幀的開始,並刪除它之前的所有內容,然後找到最後一幀的開始並將其刪除。或者,您可以在從流中讀取時進行此操作。您可以使用binascii來檢查十六進制值。

+0

看看'binascii.hexlify(url.read(1024))'是你說的嗎? –

+0

是的,你正在尋找的十六進制是ffe,我很快會發佈一個例子。 – AronVietti

+0

對不起,你想要的十六進制是fff,因爲前12位是111111111111 – AronVietti