节拍机是一个播放歌曲节拍的图书馆。

beatmachine的Python项目详细描述


打纬机

Build StatusMaintainability

节拍机是一个播放歌曲节拍的图书馆,灵感来自于 /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_periody_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__

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Cassandra复制因子大于节点数   java J2EE JTA事务回滚不适用于OSE Glassfish 4.0(Build 89)   java spring安全预认证用户登录   org的java类文件。反应流。从RxJava编译示例时未找到Publisher?   java在使用dataFormat作为POJO通过Camel调用Web服务时无法设置SOAP标头   Javafx类的java静态实例   java如何防止一个部件在关闭时覆盖另一个部件的位置   sql server无法从我的java代码连接到数据库   java在JList(Swing)中显示带有的ArrayList   从Java中的CXF服务获取WSAddressing数据   使用资产文件夹进行java简单json解析(本地)   java LDAPException未绑定的无效凭据   JavaJSFspring部署到weblogic   JAVA中字符数组中的特定元素排列?   如果脚本位于不同的目录中,则ant不会使用exec标记运行Javashell脚本