当有机会将音乐和编码结合在一起时,我会喜欢它。 我从事过一些与音乐有关的个人项目,从通过网络流量制作音乐到电子鼓的自动伴奏系统。 最近,我一位出色的妻子为我的生日送了一个漂亮的可编程音乐盒。 您在卡上打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音乐盒卡相关推荐

  1. 计算机音乐盒子制作步骤,自制音乐盒方法|用筷子做浪漫的天使之心DIY音乐盒教程...

    有时候会在家里准备一些一次性筷子应急,但是筷子和其他大多数生活用品一样也是有有效期的,长期不用还是会氧化和发黄.这个变废为宝手工制作就为我们带来了一个利用过期的一次性筷子DIY的生活小创意,如果你喜欢 ...

  2. TurnipBit - DIY音乐盒

    一款可以自己DIY的音乐盒,要什么曲子,就自己谱曲啦!为他(她)制作一首他喜欢的音乐,来代表您的心意,也可以让他自己来制作他最爱的音乐哦!更可以带孩子一起体验谱写欢快的音乐. 最近发现一很好玩的中国式 ...

  3. TurnipBit:DIY音乐盒教程实例

    一款可以自己DIY的音乐盒,要什么曲子,就自己谱曲啦!为他(她)制作一首他喜欢的音乐,来代表您的心意,也可以让他自己来制作他最爱的音乐哦!更可以带孩子一起体验谱写欢快的音乐. 最近发现一很好玩的中国式 ...

  4. fat32 linux 打包工具_一个方便的用于创建树莓派 SD 卡镜像的程序 | Linux 中国

    开始在 Mac 上使用 Raspberry Pi Imager.-- James Farrell(作者) 有多种购买树莓派的方法,根据你的购买渠道的不同,可能附带或不附带操作系统.要在树莓派上安装操作 ...

  5. U3D Addressables异步加载资源,创建大物体卡顿解决方案

    目前做的游戏里,因为是仙侠游戏,特效都是手绘的,需要用到特别多的SPINE文件,一个主角身上可能有上百个动画文件和贴图,创建起来特别特别慢,要四五十秒,试了一下,设置QualitySettings.S ...

  6. pod创建状态一直卡在Pending

    通过命令创建 kubectl run nginx --image=nginx:1.17.1 --requests=cpu=100m -n dev 结果 [root@master ~]# kubectl ...

  7. AndroidStudio创建项目一直卡在Building gradle project info的解决方法

    解决办法主要有两种,一是直接下载gradle离线包,二是修改项目的gradle-wrapper.properties里的gradle版本为自己电脑已有的版本. 离线包下载导入方式 查看所需gradle ...

  8. Android模拟器中sd卡的创建和文件的上传

    在使用android 模拟器的sd卡上传文件的时候出现过如下的错误: ailed to push selection: Invalidargument Failed to push the item( ...

  9. Android -- 创建数据库到SD卡

    SQLite 系统自带的SQLite是通过SQLiteOpenHelper实现的,而SQLiteOpenHelper是将数据库存储到/data/data/包名/databasas,这样做的话在没有ro ...

最新文章

  1. C++中的Hash容器总结
  2. 10 个平板电脑上的 Python 编辑器
  3. Bypass WAF实战总结
  4. python量化数据处理小细节2
  5. python手机编译器可以干什么_世界上最好的Python编辑器是什么?
  6. WARNING:Result from SERVER not valid. Partial Result:
  7. Python 2 寿命即将终结,​是时候将 3500 万行代码迁移到 Python 3 了!
  8. XML参考 :XmlReader 详解、实例(3)-- 读取XML节点和属性名称
  9. Qt之Dialog\widget\ mainwindow的区别和布局管理器 分裂器的区别
  10. 测试低频噪音软件,低频噪音检测
  11. android打开cad文件怎么打开方式,dwg文件怎么打开_手机上dwg文件用什么程序可以打开...
  12. PHP队列研究一(数据库任务队列)
  13. 虾皮入驻后怎么经营才能:快速出单?
  14. matlab神经网络 股票预测模型,如何用MATLAB的BP神经网络做股票预测
  15. springboot集成微信和QQ第三方登录
  16. 重力感应失灵/更新win10后不能自动旋转屏幕
  17. 这341句话,这么美,那么伤。
  18. 大数据播报 | 数据悄悄告诉你“私有云背后的秘密”
  19. 树莓派centos踩坑之旅,解决每次重启都需要route add才能有网络
  20. C++中使用代码修改字体颜色

热门文章

  1. 好爽的风,好清凉的雨
  2. 如何查看dwg图纸?查看dwg图纸有什么技巧?
  3. 【华为OD机试真题 python】几何平均值最大子数组【2023 Q1 | 100分】
  4. 《用友ERP房地产系统项目总结——客户管理》
  5. 【巨杉数据库SequoiaDB】专注基础软件自研,巨杉入选“2020信创产业独角兽100强”
  6. 为何你的生活那么无趣?
  7. vue3 setup中props和emit用法
  8. SD卡数据读取Altium Designer下载
  9. 微商如何做百度引流?微商百度引流怎么做?
  10. 火山中文编程 -- 实现键盘HOOK