创建自定义节拍的拳击手。

beatboxer的Python项目详细描述


拳击手

我没有钱(或天赋)去使用fl工作室,也没有耐心去学习其他东西。幸运的是我已经知道python了,所以这里是我的解决方案。

打拍子只需要指出应该播放什么声音的拍子。很简单,相信我。

你问我这个有什么用?太多了!快速提供饶舌战斗的毒气节拍,为快速克鲁克塞什敲打,为您的声音云说唱者的愿望与经典切分次低音押韵,使用它作为一个美化和多功能节拍器等!

安装软件包

只要用经典的方式:

pip install beatboxer

示例

下面是一个直接从main函数中截取的示例:

首先,创建对象。

frominspectimportgetsourcefilefromosimportpathfrombeatboxerimportBeatBoxer# Create directory to save audio intosave=path.join(path.dirname(path.abspath(getsourcefile(lambda:0))),'outputs')# Create object with 120 beats per minute and quarter note as one beatb=BeatBoxer(bpm=120,base_note=4,save_path=save)

现在让我们拍几下。第一次16拍,16/4次测量一次

  1. 每个节拍都会打出一个高音
  2. 从第二拍开始的每三拍打一脚
  3. 从第二拍开始的每四拍都有一个陷阱
  4. 从第1拍开始的每8拍播放一次崩溃
b.make_a_beat(b.empty(),num_measures=1,every_beat=['hihat'],every_4th=[('snare',1)],every_3rd=[('kick',1)],every_8th=[('crash',0)])# Store it with the name 'dope1'b.store_beat('dope1')

我们再打一次!我们只将时间标记改为16/8,并播放4个小节。这一节拍的速度是第一节拍的两倍。让我们在第七和第十一节拍上鼓掌。

b.change_base_note(8)b.make_a_beat(b.empty(),num_measures=4,single={'clap':[7,11]},every_beat=['hihat'],every_4th=[('snare',1)],every_3rd=[('kick',1)],every_8th=[('crash',0)])# Store it with the name 'dope2'b.store_beat('dope2')

最后一拍。对于12个度量,我们将bpm更改为100,时间签名更改为3/8。

b.change_bpm(100)b.make_a_beat(b.empty(3),num_measures=12,every_beat=['hihat'],every_3rd=[('snare',2),('kick',1)])# Store it with the name 'lastly dope'b.store_beat('lastly dope')

我们会把我们最喜欢的,第二个保存为dopest.wav

b.save_beat('dopest',b.stored_beats['dope2'])

如果打印对象,它将显示存储的和当前的节拍。

print(b)

输出:

---------Current Beat--------
BPM: 100 --- Time Signature: 3/8 --- Number of Measures: 12 --- Length: 10.981 s

---------Stored Beats--------
Name: dope1       --- BPM: 120 --- Time Signature: 16/4 --- Number of Measures:  1 --- Length:  8.106 s
Name: dope2       --- BPM: 120 --- Time Signature: 16/8 --- Number of Measures:  4 --- Length: 16.106 s
Name: lastly dope --- BPM: 100 --- Time Signature:  3/8 --- Number of Measures: 12 --- Length: 10.981 s

啊,等等……即使第二个是像Kanye级别的质量,第一个需要工作…所以让我们编辑一下。

# First switch it to the current beatb.switch_current_beat('dope1',force=True)# Remove every snare and every 2nd hihat. Then add a bass on every kick and# re-add the snare on every 4th note but with a 2 beat offset.b.edit_current_beat(bpm=140,base_note=8,num_measures=4,remove={'every_beat':['snare'],'every_2nd':[('hihat',1)]},add={'every_3rd':[('bass',1)],'every_4th':[('snare',2)]})# Now, there is still the original 'dope1' beat in b.stored_beats. We can# either overwrite it with this or store as a new one like so:b.store_beat('way better than dope1')# And lets save that bad boyb.save_beat('dopestest')print('\n\nDid some editting...')print(b)

最终输出为:

Did some editting...
---------Current Beat--------
BPM: 140 --- Time Signature: 16/8 --- Number of Measures: 4 --- Length: 13.696 s

---------Stored Beats--------
Name: dope1                 --- BPM: 120 --- Time Signature: 16/4 --- Number of Measures:  1 --- Length:  8.106 s
Name: dope2                 --- BPM: 120 --- Time Signature: 16/8 --- Number of Measures:  4 --- Length: 16.106 s
Name: lastly dope           --- BPM: 100 --- Time Signature:  3/8 --- Number of Measures: 12 --- Length: 10.981 s
Name: way better than dope1 --- BPM: 140 --- Time Signature: 16/8 --- Number of Measures:  4 --- Length: 13.696 s

使用图形用户界面

要使用图形用户界面,只需运行

frombeatboxerimportguigui()

我现在不打算在这里使用picture,因为gui很可能很快就会发生巨大的变化。但它的用法是这样的:

  • 网格显示每个度量的节拍数,您可以选择在度量的每个节拍上播放的内容。
  • 如果您想在特定的节拍上播放更多可用的声音,请转到EditAdd TrackCtrl-T添加另一个要使用的曲目。
  • 如果您希望每个测量值有更多或更少的拍数,请转到EditChange Number of BeatsCtrl-B以更改拍数。
  • 您可以使用Remove Track按钮或热键Ctrl-<row>删除一个曲目,其中<row>是该曲目的行。
  • 您可以使用Preview按钮预览度量值的声音,它将在显示当前节拍的同时循环播放度量值。
  • 您可以将度量值保存为wav文件,使用File,然后使用SaveCtrl-S

伙计们,这就是我目前所得到的。敬请期待。

未来抱负

找到生活的意义。

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

推荐PyPI第三方库


热门话题
Java流收集组合器   文件如何在java中逐个压缩选定的多个文件夹   从Google存储下载数据时发生java SocketTimeoutException   java在安卓应用程序客户端上从python服务器接收值,然后显示与该值对应的mysql数据   数组如何在Java中测试字符串索引是否为Null   java将一串值拆分并放入一个表中   java Spring Memcached注释不缓存   调用pom中设置的环境变量时出现java问题。xml surefire插件   java修复JFrame中重叠的鼠标侦听器   格式化java。sql。日期至yyyyMMdd   java声音剪辑。如果剪辑不正确,isActive应返回true。启动被调用   无根计算机上hadoop中的java格式化namenode   从字符串数组中删除重复项,而无需在Java中进行显式比较   java Eclipse插件安装错误   java webdriver无法在firefox中单击超链接   动画错误。朗。反思。调用目标异常   java试图调用虚拟方法“void”。小装置。编辑文本。在空对象引用上添加TextChangedListener(安卓.text.TextWatcher)”