【问题标题】:python ringtone maker : how to split filespython ringtone maker:如何分割文件
【发布时间】:2013-09-02 04:23:14
【问题描述】:

我正在编写一个为 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]))

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

【问题讨论】:

  • 我们需要更多信息。你在用什么图书馆? (或者写了一个自定义的(可能用c,c++)?另外,如果你发布一些相关的代码会更好。
  • @enginefree 我没有使用任何库。有没有我可以实现的库?
  • size_mbps = bitRate*(15/2048)

标签: python mp3 ringtone


【解决方案1】:

如果您想使用像 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

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

【讨论】:

  • @Shonu93 唯一的建议是,我必须将所有数据添加到字典中。如果您要迭代许多歌曲,您可能需要更有条理的结构。
【解决方案2】:

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

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

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

有趣的地方:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-29
    • 2011-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多