当有机会将音乐和编码结合在一起时,我会喜欢它。 我从事过一些与音乐有关的个人项目,从通过网络流量制作音乐到电子鼓的自动伴奏系统。 最近,我一位出色的妻子为我的生日送了一个漂亮的可编程音乐盒。 您在卡上打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. readelf小尝试
  2. 人人都有好工作:IT行业求职面试必读
  3. 量子计算技术发展迅猛,商业潜力初现!如何把握量子计算时代的新机遇?
  4. notepad++打开一个某个工程目录
  5. python大家都会吗_一篇告诉你为什么人人都应该学点Python?
  6. Servlet3.1规范翻译 - 应用生命周期事件
  7. Qt中的QSpinBox
  8. long 雪花算法_雪花算法(snowflake)
  9. atitit.词法分析原理 词法分析器 (Lexer)
  10. Sort Integers by the Number of 1 Bits
  11. windows 2008 中IIS7.0以上如何设置404错误页面
  12. 中国电信物联网平台使用笔记8:获取物联网平台数据1
  13. 【问题整理】计算机故障相关
  14. 扩展欧几里德算法解决问题A:Jugs
  15. 晒晒我的“无法操作”的“发财计划”
  16. android右上、右下、左上、左下手势滑动判断
  17. 项目三探索 TMDb 电影数据
  18. threejs-纹理贴图
  19. 虚实接口是当前元宇宙发展的重中之重
  20. python将批量音频信号(wav)转化为语谱图并保存(jpg/png)

热门文章

  1. 软件实施工程师这个职位
  2. 头脑风暴在计算机中的具体应用,什么是头脑风暴,在实际中到底怎么应用
  3. Android设置竖屏锁定
  4. 理光Aficio MP C2800 打印机配置扫描到samba共享文件夹中
  5. qq群聊机器人接入ChatGPT-简介和源码
  6. 计算机和教师教学的应用,浅谈计算机技术在教学中的应用
  7. 唯一编号算法:生成GUID
  8. JavaScript前端CRUD
  9. HTML关于机器猫的小游戏,HTML5+CSS3实现机器猫
  10. 压缩包里面是html文件怎么打开方式,展示电脑rar压缩包文件怎么打开?教你正确打开方式...