节拍机是一个播放歌曲节拍的图书馆。
beatmachine的Python项目详细描述
打纬机
节拍机是一个播放歌曲节拍的图书馆,灵感来自于 /r/BeatEdits。它既可以作为库,也可以作为命令行实用程序 从json数组读取效果。
安装
beat机器的依赖项之一madmom
要求Cython
在安装之前存在。如果你遇到
沿以下行出现错误:
Command "python setup.py egg_info" failed with error code 1 in /tmp/tmp1d2dis8pbuild/madmom/
请尝试作为单独的生成步骤预先安装cython(pip install Cython
)。
示例
下面是一些常见的编辑示例。在任何情况下,都可以提供多种效果。当超过 一种效果是存在的,效果是按外观顺序应用的。
使用cli
cli有以下用法(由python -m beatmachine --help
生成):
Usage: __main__.py [OPTIONS] Options: --input TEXT File to process. [required] --effects TEXT JSON representation of effects to apply. [required] --output TEXT Output mp3 file path. [required] --help Show this message and exit.
注意由于定位节拍所需的时间,程序可能会出现挂起。
每隔一拍删除一次
remove
效果不能有一个1的周期,因为这是愚蠢的(并且不会导致任何工作)。
$ python -m beatmachine \ --input "in.mp3"\ --output "out.mp3"\ --effects '[{"type": "remove", "period": 2}]'
把每一拍都减半
$ python -m beatmachine \ --input "in.mp3"\ --output "out.mp3"\ --effects '[{"type": "cut", "period": 1}]'
交换节拍2和4
在swap
效应中,x_period
和y_period
字段可以互换,但是它们不能相等。
$ python -m beatmachine \ --input "in.mp3"\ --output "out.mp3"\ --effects '[{"type": "swap", "x_period": 2, "y_period": 4}]'
将每个节拍减半,然后重复其他节拍
$ python -m beatmachine \ --input "in.mp3"\ --output "out.mp3"\ --effects '[{"type": "cut", "period": 1}, {"type": "repeat", "period": 2, "times": 2}]'
使用python模块
注意load_beats_by_signal
是一个相当长的阻塞操作(在
Ryzen 52600 W/16GB内存)。你的里程可能不同。
如果稍微不准确的结果是可以接受的,那么load_beats_by_bpm
也可以使用,这是非常少的cpu-和
记忆密集型。这种加载节拍的方法不能处理任何类型的节奏变化。
每隔一拍删除一次
importbeatmachineasbmbeats=bm.loader.load_beats_by_signal('in.mp3')# A file-like object is also acceptableeffects=[bm.effects.periodic.RemoveEveryNth(period=2)]result=sum(bm.editor.apply_effects(beats,effects))result.export('out.mp3')
其他结果来自修改effects
列表。有关更多信息,请参见effects
模块及其子模块
可能性。
实现自定义效果
创建基本效果类有两种方法:
- 用元类创建一个类
beatmachine.effects.base.EffectRegistry
- 使用元类从
beatmachine.effects.base.BaseEffect
继承beatmachine.effects.base.EffectABCMeta
- 建议这样做,因为它提供了所有必需的属性作为抽象基类
生成的effect类将自动通过beatmachine.effects.load_from_dict
加载。确保
由于load_from_dict
将字段直接传递给
__init__
。