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]))

它工作正常,但我需要再调整一下。对此代码有任何输入吗?

4

2 回答 2

0

您必须小心一点,因为 mp3 帧并不总是独立存在,这是高端音乐工具首先转换为 WAV 或类似格式的原因之一,但正如您所说,它确实可以工作到一定程度等级。

您可能会受益于查看以下项目中的代码(请注意,它是 GPL 许可的):

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

有趣的地方:

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

一旦你提取了实际的音乐部分,粗略的想法是你根据比特率来获取帧大小、秒、文件大小和字节内容之间的关系,然后告诉你在哪里分割字节以获得开始时间和持续时间你要的那个。

于 2013-08-29T16:54:54.030 回答
0

如果您想使用更高级别的语言c++来实现自定义 MP3 解码器,请查看这个问题,mp3 文件的时间长度

否则,还有其他库可以满足您的需要:

PyMad -

import mad

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

有声读物——

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

诱变剂-

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

还有更多,但现在你可以从这些开始。

于 2013-08-29T17:25:23.970 回答