TonyChyi

我在那一角落患过抽风

一个低成本 USB-MIDI Host 测试——第一部分
2018年10月23日 文章
其实这是个很早以前的事情了,@rgwan 拜托我把他的一个低成本 USB-MIDI Host 做一个样板出来试试。 不过说起来,在硬件这方面,我是个新手+苦手,焊接也就能修修孩子的玩具而已,这个东西对我的挑战还挺大,而且我毕竟不是电子专业出身,而且之前也没有接触过这些东西(好吧,可能也就 Arduino 能玩的 6 一点) 先发一下电路板的设计图好了 2018-09-11 现在的我似乎进入了一个倦怠的状态,对工作和日常生活什么的完全不上心,对工作甚至有点抵触,这可能就是 @leo_song 所说的,不想当螺丝钉了吧。 另外,可能也陷入了一种接近抑郁的状态,不过大家放心,我还没病。而且担子这么重,还卸不下来,我死不了( 这都是废话,我重新和 @rgwan 确认了一些参数,准备提交到他指定的那个JLC的厂子打样 2018-09-12 已经下单了,考虑到家里有个熊孩子,用了无铅工艺,比有铅的贵了 2/3,不知道拿回来是什么样的,除此之外,可能还要购买一些元件了,比如 USB连接器 主控芯片 USB-A母头 0805电阻,22Ω/220Ω/1.2kΩ 0805LED 0805FU 500mA自恢复保险 0805耐压 >16V 0.1uF 电容(不知道以我的手艺会不会冒烟或者爆炸) 直插 6N137 D2 1N4148 应该是二级管吧 D1 SMAJ5.0CA TVS管 排针间距 2.54 MIDI母头 若干,也是白菜价 据 @rgwan 说,整套下来,成本可能也就 ¥50 左右 也许需要一个双头 USB 线……或者是 ttl 调试器这样的? 家里还有一些黑色 KT 板,可能还能做个外壳吧…… 10:23 订单通过审核,可以生产了,顺带把部分元件买了一些,一共花了 ¥200(有些元件我买了冗余的,芯片比较贵),不过我感觉,可能一个的硬件成本会比 ¥50 要低很多,大概 ±¥30 搞定 2018-09-14 公对公 USB 线和 MIDI 线到了
Tags: #MIDI · #USB · #硬件
Cakewalk 还没凉吗?
2018年02月24日 文章
今天早上看到一条新闻: 死而复生:Gibson 把 Cakewalk 卖给了新加坡初创公司 BandLab,问题是 SONAR 能缓过来么? 这事还真是各种起伏呢! 之前我写过一篇文章:再见,Cakewalk 仅仅不到半年的时间,它还是活过来了…… 但愿能继续开发下去?
Tags: #MIDI · #Cakewalk
再见,Cakewalk
2017年11月22日 文章
Cakewalk 停止开发了1 在我知道 MIDI 这个东西以后,我就在想这些文件是怎么做出来的,然后在当年的一本杂志《新潮软件》上,看到了 Cakewalk 的相关介绍。 当时家里没有网络,而自己的声卡还是用的 FM 芯片,音质巨烂,此事一直搁置。 后来升级了自己的声卡驱动,支持了 WDM 以后,用上了系统自带的那个 Roland 合成器,这才有时间玩 Cakewalk。还安装了 Yamaha 的合成器驱动。 这就开始了自己玩 MIDI 的生涯。 后来也用过水果和 Cubase,但是就 MIDI 文件本身的编辑能力来说,还是 Cakewalk 更好用一些。后来发现了很多好用的 VST 插件,而同时 MIDI 也开始回归它本身的定位2,这才减少了我用 Cakewalk 的频率,但是在编辑 MIDI 文件的时候我还是会用它。 直到我改用了 Linux。 Linux 下并没有一个对 MIDI 文件友好的编辑工具,这是让我非常不痛快的体验,只好用虚拟机继续运行早期版本的 Cakewalk3 这几年,Cakewalk 一再倒手4,在这过程中,似乎渐渐被人遗忘了,Cubase 成了事实标准。 我现在很希望 Cakewalk 能交给开源社区来继续开发,不仅能延续这个软件的生命,也能将它移植到 Linux 或者 Mac 上,还可以增加 LV2 和 AU 的支持,这也能让很多喜欢音乐的人有一个非常好用的音乐制作平台 http://www.cakewalk.com/Gibson-Announcement [return] https://tonychyi.wetofu.top/2016/04/01/death-of-midi-standards/ [return] 我没用过Sonar [return] https://www.midifan.com/modulenews-detailview-28242.htm [return]
Tags: #Cakewalk · #MIDI
填掉了 LMMS 一个长达两年的大坑
2017年01月20日 文章
LMMS 的代码里其实已经有了一个 MIDI 文件的导出功能。但是代码里的注释告诉我,那个是坏的,而且主界面的代码里把 MIDI 导出的菜单项给注释掉了。 既然 Midi 导入的功能已经改成了 Drumstick,那就更干脆点,直接把导出功能也解决了吧。 原代码功能 原来的 Midi 导出代码是将项目的内容转成 Qt 的 DOM 视图,然后从视图中读取信息,另外再实现一个自己的 Midi 写入的类。 但是这个代码似乎只能导出音符信息,控制器信息却不能导出,这就意味着,像 Pitch bend/Volume/Panning 这些信息要丢掉,也没法导入到其他的软件中。 原代码可以参考这里 新的需求 我的目标是,做一个 GM 兼容的 MIDI 导出功能,不仅导出音符,还要能让导出的 MIDI 文件直接可以拿来听! 接下来就是试验一下 Drumstick 如何写入一个 MIDI 文件。 我们需要这样做1: 首先调用 setFileFormat() 设定文件版本,这里就强制设 1 吧2 然后调用 setDivision() 设定一个四分音符的 Tick 数,同样强制 960 吧。 这样,一个 Header 就完成了,接下来写每个轨道的信息。 扫描整个项目,将使用 Sf2 Player 的轨道记下来,统计数量,调用 setTracks() 设为轨道数 +1s 同样也把 AutomationTrack 也记下来。 Drumstick 按轨写入的方法是,发送一个 signalSMFWriteTrack(int track),然后设置一个 Slot 去接收它。 分配一个 Channel。 track 为 0 时,写入全局事件3,这也是为什么要把轨道数加 1。 从 InstrumentTrack 的 TrackContentObject 中获取音符信息,写入一个事件列表4。 将 Program Change/Control Change/Pitch Bend 事件从 AutomationTrack 取出,写入事件列表,并指定好 Channel。 对事件按时间排序,并计算出事件之间的时间差5。 写入事件到文件。 最后写入一个 EndOfTrack 的事件。 这里分配 Channel 的机制我要单独拿出来说一下。
Tags: #LMMS · #MIDI · #C++ · #Qt
把 LMMS 的 Midi 导入功能改用 drumstick 实现了
2017年01月08日 文章
啊,更好的方法就是,用他妈的什么 portsmf 用 drumstick 啦 ——@liushuyu 终于折腾好了 带着对 drumstick 的撞憧憬,我终于还是给自己挖了个大坑,把原来 LMMS 在 Midi 文件导入时用到的 portsmf 库换成了 drumstick。 然而这并不是一个有趣的过程。 portsmf 是按顺序返回 Midi 事件,而 drumstick 是基于 Qt 的 Signal/Slot 机制。 于是我先花费了一点时间搞明白 drumstick 是如何工作的。 然后对整个的 MidiImport 插件进行了大拆解——将混乱不堪的代码按照 class 分成了几个文件。 接着写了一个 midiReader 类,用来接收 Midi 事件,并添加到 LMMS 的轨道中。 那么接下来的工作就是实现 midiReader 的 Slot。 在 lmms 的导入过程中,用到了以下 Signal: signalSMFTimeSig(int,int,int,int) “以四分音符为一拍,每小节四拍” signalSMFTempo(int) 节奏,单位是 ms/quarter_note signalSMFError(QString) 错误处理信息 signalSMFCtlChange(int,int,int) 控制器信息 signalSMFPitchBend(int,int) 弯音信息1 signalSMFNoteOn(int,int,int) 音符开始,但最后一个参数为 0 时等同于音符结束 signalSMFNoteOff(int,int,int) 音符结束 signalSMFProgram(int,int) 音色改变2 signalSMFHeader(int,int,int) Midi 文件头信息 这样就完全不用考虑导入的 Midi 文件是格式 0 还是格式 1 了,忽略掉 signalSMFTrackStart() 和 signalSMFTrackEnd() 就可以。
Tags: #LMMS · #MIDI · #drumstick · #C++
修复了 LMMS Pitch Bend Bug
2017年01月04日 文章
@leo_song 对我说,搞报表平台的代码不如研究 LMMS LMMS 有一个存在了很长时间的 BUG:导入 Midi 文件的时候,对 Pitch Bend 不能很好的处理导致走音。 定位 在 Cakewalk 中测试,如果是单纯调整 Pitch Bend,最大范围是 ±2 个半音,而我这里有个文件1甚至可以达到 1 个八度。 经过一番测试,发现是 RPN(0, 12) 这个参数在起作用: 0, 0, Header, 1, 7, 960 1, 0, Start_track 1, 0, Control_c, 0, 101, 0 1, 0, Control_c, 0, 100, 0 1, 0, Control_c, 0, 6, 12 1, 0, Control_c, 0, 38, 0 …… 也就是上面的 Contol_c 事件,先以 101 和 100 控制器发送值 02,然后再用 6 控制器发送 123,最后以 38 控制器发送 0。
Tags: #LMMS · #MIDI
中道崩殂——论 MIDI 标准之死
2016年04月01日 文章
我大约从 2004 年左右就开始收集各种 MIDI 文件,到目前为止已经收集了 3128 首,一共 132M。 很长一段时间内,听 MIDI 算是我的乐趣之一——不仅能听到声音,还能用不同的音源听到不同的声音,甚至可以一个音轨一个听,听和弦,听打击乐,听贝司。 自 Cubase 和 VST 为代表的 DAW 出现后,制作起音乐来,比以往更简单了,大量的专用音源/采样器/效果器插件,很多时候我们不需要花太多的钱,甚至不用添加什么设备,就能做出以往录音室才能实现的效果。相比于考虑系统专用信息(Sysex)、控制器(Controller)、RPN、NRPN,我们现在只需要堆效果器就 OK ,然后输出一个 MP3 这样的音频文件,一切都非常完美。 在 Cubase 之前,我们有兼容 GM 的 GS(Roland)和 XG(Yamaha)标准。这些扩展标准增加了很多新的乐器,还有很多特殊效果——之前收集过一些基于 Yamaha XG 的 MIDI,不仅有很多的乐器,还可以加入很多特效,听起来的效果也不亚于用 DAW 制作出来的音乐,就算是普通的 GM 标准的音乐,效果也非常不错。 听纯 MIDI 的时代一去不返,早在 2008 年,Midifan 就关闭了MIDI文件的分享功能(可能也有别的原因吧)。此后再能拿到的,基本上都是一些工程文件。当然,现在有 Midishow.com,不过这也是后话了。 MIDI 开始沦落为一种在不同软件间交换乐谱的格式,而本身用来听的价值却不如以前——很多事情交给插件去解决就好了嘛! 在这种大背景下,乐器厂商也没有必要再去定义 MIDI 标准,反正都可以用各种插件来解决。把钱花在制定标准上面,毕竟浪费。如果还有一个原因,那一定是没有厂商能制订出超越 Roland 和 Yamaha 的新标准了。可以说 MIDI 标准已经死亡了。 苦的只是我这种情怀党,从一个 XG 时代过来的人。 不过话说回来,MIDI 最终被淘汰,其实也是一种历史必然,毕竟会有更好更易用的东西出来。 思路比较乱,就这样吧。
Tags: #MIDI · #Yamaha · #Roland · #XG · #GS · #GM

 

TonyChyi © 2018 GPLv2