使用Punchbox创建DIY音乐盒卡
当有机会将音乐和编码结合在一起时,我会喜欢它。 我从事过一些与音乐有关的个人项目,从通过网络流量制作音乐到电子鼓的自动伴奏系统。 最近,我一位出色的妻子为我的生日送了一个漂亮的可编程音乐盒。 您在卡上打Kong,然后在音乐盒中摇动曲调以播放音乐。
音乐盒配有几张长约70厘米(27英寸)的卡片。 卡片纸是用网格系统打印的,因此您可以测量时域并知道要选择的音符。 但是,我不确定自己是否可以盲目打Kong,而且我也很不耐烦。 抱歉。 我知道,好消息会给那些等待的人带来好处,但是如果我可以减少等待的时间,那有什么危害呢?
所以我想出了一个疯狂的主意。 不必测量所有这些东西,而当我在错误的位置打Kong而整首歌都毁了时,就拥有那些疯狂的时刻,如果我可以使事情的风险降低一点呢? 如果我可以使用一个好的旧计算设备来帮助解决问题,该怎么办? 如果我的小型计算设备可以画出我需要在卡上打Kong的所有点怎么办?
我的要求
我开始考虑对成为简单易用的音乐盒卡制作者Punchbox的要求。 我想要这个软件做什么? 音乐盒无法播放每个音符-它只能播放某个键中的音符。 当然,音乐的伟大之处在于它可以转换为任何键。 因此,将歌曲自动转换为最佳音调的软件也很棒。 我也希望它是准确的-线条清晰。 因此,它必须是基于矢量的图像。
以及如何将笔记编入其中? 鉴于可能需要更改某些音符以为作品创建新的编排,因此编辑它们并快速听到更改的最佳方法是什么? MIDI似乎是一个显而易见的选择。 它可以让我快速更改音符并通过在打印前通过合成器播放MIDI来听到即时反馈。
不幸的是,音乐盒的卡片纸太厚,无法容纳在我的打印机中,因此我决定将音乐打印在纸上,将其粘贴到卡片上,用纸引导卡片打Kong,然后从卡片中取出纸。
开发工具
我使用Python进行编程,所以我选择了Mido作为MIDI库,因为它具有所需的功能。 我还为我的SVG矢量图形库选择了Svgwrite ,为配置选择了PyYAML 。 从一开始,我就决定要创建一个任何人都可以使用的工具,因此我选择了Click作为命令行工具包。
在开发工具时,我意识到许多其他配置选项对人们很有用。 我添加了定义多个音乐盒的功能,包括音符音高(触发器之间的物理距离),音符碰撞距离(可以再次触发音符之前需要多长时间),可用音符(以MIDI表示)音符值),以及反转音符顺序的能力(从右到左或从左到右)。
使用打印机纸存在另一个问题。 穿过音乐盒的条带有时可能长几米,但我的打印机最多只能打印A4(27.9厘米,接近信纸尺寸)。 我决定对条带进行分页,但是分页需要一种对齐条带的方法。 所以我在页面上添加了标记。 系统正确识别页面上可以容纳多少个“五线谱”并相应地分页。
我添加了一个除数以启用时间缩放(使速度更快或更慢),纸张的边距,标记大小(用于对齐条带)和字体大小(用于对条带编号和添加文件名)。
我最喜欢的功能之一是自动换位。 它获取音符,通过检查运行它们以查看音乐盒上有多少个音符,并通过一系列移调来查看它是否可以找到一个完美的音符(代表所有音符)。 如果找不到完美的换位,则选择最佳换位。 当我打印页面时,它将用红色突出显示所有不合适的笔记。 这使我可以检查工作表并在Rosegarden之类的MIDI中与MIDI进行交叉引用以删除或移动音符。
测试出来
我花了大约一年时间使用该工具添加所有这些功能。 但是也许最好的时刻是当我将第一张纸放入音乐盒时。 在使用Punchbox打印并打Kong第一条纸之前,我没有对其进行任何测试。
第一次差点让我流泪。 莫扎特,甜美地,在最完美的小音乐盒上轻轻地弹奏。 完美! 计时或音调没有错误。 谢谢您,开放源代码-没有Mido,Svgwrite,PyYAML和Click,将无法实现此项目。
翻译自: https://opensource.com/article/18/8/programmable-music-box-software
使用Punchbox创建DIY音乐盒卡相关推荐
- 计算机音乐盒子制作步骤,自制音乐盒方法|用筷子做浪漫的天使之心DIY音乐盒教程...
有时候会在家里准备一些一次性筷子应急,但是筷子和其他大多数生活用品一样也是有有效期的,长期不用还是会氧化和发黄.这个变废为宝手工制作就为我们带来了一个利用过期的一次性筷子DIY的生活小创意,如果你喜欢 ...
- TurnipBit - DIY音乐盒
一款可以自己DIY的音乐盒,要什么曲子,就自己谱曲啦!为他(她)制作一首他喜欢的音乐,来代表您的心意,也可以让他自己来制作他最爱的音乐哦!更可以带孩子一起体验谱写欢快的音乐. 最近发现一很好玩的中国式 ...
- TurnipBit:DIY音乐盒教程实例
一款可以自己DIY的音乐盒,要什么曲子,就自己谱曲啦!为他(她)制作一首他喜欢的音乐,来代表您的心意,也可以让他自己来制作他最爱的音乐哦!更可以带孩子一起体验谱写欢快的音乐. 最近发现一很好玩的中国式 ...
- fat32 linux 打包工具_一个方便的用于创建树莓派 SD 卡镜像的程序 | Linux 中国
开始在 Mac 上使用 Raspberry Pi Imager.-- James Farrell(作者) 有多种购买树莓派的方法,根据你的购买渠道的不同,可能附带或不附带操作系统.要在树莓派上安装操作 ...
- U3D Addressables异步加载资源,创建大物体卡顿解决方案
目前做的游戏里,因为是仙侠游戏,特效都是手绘的,需要用到特别多的SPINE文件,一个主角身上可能有上百个动画文件和贴图,创建起来特别特别慢,要四五十秒,试了一下,设置QualitySettings.S ...
- pod创建状态一直卡在Pending
通过命令创建 kubectl run nginx --image=nginx:1.17.1 --requests=cpu=100m -n dev 结果 [root@master ~]# kubectl ...
- AndroidStudio创建项目一直卡在Building gradle project info的解决方法
解决办法主要有两种,一是直接下载gradle离线包,二是修改项目的gradle-wrapper.properties里的gradle版本为自己电脑已有的版本. 离线包下载导入方式 查看所需gradle ...
- Android模拟器中sd卡的创建和文件的上传
在使用android 模拟器的sd卡上传文件的时候出现过如下的错误: ailed to push selection: Invalidargument Failed to push the item( ...
- Android -- 创建数据库到SD卡
SQLite 系统自带的SQLite是通过SQLiteOpenHelper实现的,而SQLiteOpenHelper是将数据库存储到/data/data/包名/databasas,这样做的话在没有ro ...
最新文章
- C++中的Hash容器总结
- 10 个平板电脑上的 Python 编辑器
- Bypass WAF实战总结
- python量化数据处理小细节2
- python手机编译器可以干什么_世界上最好的Python编辑器是什么?
- WARNING:Result from SERVER not valid. Partial Result:
- Python 2 寿命即将终结,​是时候将 3500 万行代码迁移到 Python 3 了!
- XML参考 :XmlReader 详解、实例(3)-- 读取XML节点和属性名称
- Qt之Dialog\widget\ mainwindow的区别和布局管理器 分裂器的区别
- 测试低频噪音软件,低频噪音检测
- android打开cad文件怎么打开方式,dwg文件怎么打开_手机上dwg文件用什么程序可以打开...
- PHP队列研究一(数据库任务队列)
- 虾皮入驻后怎么经营才能:快速出单?
- matlab神经网络 股票预测模型,如何用MATLAB的BP神经网络做股票预测
- springboot集成微信和QQ第三方登录
- 重力感应失灵/更新win10后不能自动旋转屏幕
- 这341句话,这么美,那么伤。
- 大数据播报 | 数据悄悄告诉你“私有云背后的秘密”
- 树莓派centos踩坑之旅,解决每次重启都需要route add才能有网络
- C++中使用代码修改字体颜色