2013-08-29 44 views
0

我正在爲iPhone製作鈴聲的應用程序。這只是爲了好玩。 這是我迄今爲止所做的。 (請注意,我是Python初學者!) 所以我用二進制模式打開我的mp3文件。閱讀整個文件。將其轉換爲列表。使用列表分片來分割文件。將這個新的分割保存到一個新的mp3文件中。這工作正常。然而,我想讓鈴聲擁有最多30秒的播放時間,我希望用戶選擇他想要的文件的哪一部分作爲鈴聲。任何人都可以引導我在正確的方向嗎?由於蟒蛇鈴聲製造商:如何分割文件

這裏是我的代碼至今:

f = open("Bruno Mars - Locked Out Of Heaven [OFFICIAL VIDEO].mp3", 'rb').read() 
mp3 = list(f) 
fo = open("newFile.mp3", "wb") 
print(mp3[0:1300000]) 
fo.write(bytes(mp3[0:1300000])) 

這裏是我的一些編碼後得到:

import os 
f = open("Bruno Mars - Locked Out Of Heaven [OFFICIAL VIDEO].mp3", 'rb').read() 
fileSize = os.path.getsize("Bruno Mars - Locked Out Of Heaven [OFFICIAL VIDEO].mp3") 
print("Size of the whole file",fileSize) 
mp3 = list(f) 
bitRate = int(input("Enter the bit rate of your file")) 
size_mbps = bitRate*(15/2048) 
print("MB per minute :",size_mbps) 
second_size = int((size_mbps/60)*(10**6)) 
print("Size of each second :",second_size) 
start_length = int(input("Enter the start time (in seconds)")) 
end_length = int(input("Enter the end time (in seconds)")) 
start_size = int(second_size*start_length) 
end_size = int(second_size*end_length) 
fo = open("newFile.mp3", "wb") 
fo.write(bytes(mp3[start_size:end_size])) 

它工作正常,但我需要調整多一點。此代碼的任何輸入?

+0

我們需要更多信息。你在用什麼庫? (或已經寫了一個自定義的(可能在C,C++)?還有,它會更好,如果你張貼一些相關的代碼 – enginefree

+0

@enginefree即時通訊不使用任何庫。是否有任何庫我可以實現? – Shonu93

+0

size_mbps = bitRate * (15/2048)

回答

0

如果您想使用c++等更高級別的語言來實現自定義MP3解碼器,請查看此問題time length of an mp3 file

否則,有其他庫,做什麼您需要:

PyMad -

import mad 

mf = mad.MadFile("foo.mp3") 
track_length_in_milliseconds = mf.total_time() 

audioread -

audio = audioread.audio_open('/path/to/mp3') 
print f.channels, f.samplerate, f.duration 

Mutagen -

from mutagen.mp3 import MP3 
audio = MP3("example.mp3") 
print audio.info.length 

還有更多,但現在你可以從這些開始。

+0

你能檢查我的新編輯嗎?謝謝! – Shonu93

+0

@ Shonu93只有建議,我已經將所有的數據添加到字典中,如果你迭代了很多歌曲,你可能想要一個更有組織的結構。 – enginefree

0

你必須小心一點,因爲mp3幀並不總是獨立存在,這是高端音樂工具首先會轉換爲WAV或類似的東西的原因之一,但正如你所說,它確實有效直到一定程度。

你也許可以從看下面的項目中的代碼中受益(請注意,它是GPL雖然行貨):

http://sourceforge.net/projects/pymp3cut/

感興趣的東西:

http://pymp3cut.cvs.sourceforge.net/viewvc/pymp3cut/pymp3cut/pmpcmp3.py?revision=1.2&view=markup

一旦你提取了實際的音樂部分,粗略的想法是,你根據比特率來獲得幀大小,秒數,文件大小和字節內容之間的關係,然後告訴它們你在哪裏分割字節來獲得你想要的開始時間和持續時間。