在Linux下玩转MIDI

曾经我非常热衷于MIDI音乐,原因是一直没有机会正儿八经的学习一种我喜欢的乐器,于是在电脑上用HappyEO和Cakewalk制作一些音乐(或者说噪音?)便成为了生活中的一个重要部分。但是最近相当长的一段时间中,我都没有再玩过MIDI音乐,原因只不过是因为我从台式机换成了用笔记本电脑和开始使用Linux……

先科普一下有关MIDI音乐的简单知识:MIDI音乐文件中存放的是音乐的乐谱信息,而不是实际的声音。乐谱信息以一系列的消息组成,比如:用最大力度的50%按下钢琴上小字一组的C键、持续1秒、松开小字一组的C键。电脑在播放MIDI文件时,需要由音源设备把MIDI消息转换成真正声音,再播放出来,音源设备的好坏就直接决定了MIDI音乐的回放质量。

在Linux中玩MIDI,本身也不该是件什么难事,但问题是在于Linux的声音系统一直以来处于非常混乱的状态,各家争鸣百花齐放,使得配置起来很是复杂。另外,现在很多电脑的的声卡上都不带音源设备,这样就没有办法直接用声卡合成声音。

要在Linux下玩转MIDI,就得从这以下方面入手:

驱动层:早期Linux用OSS来驱动声卡,而现在这一块基本上已经由ALSA来一统天下,当然ALSA也提供了OSS的兼容层来保证一些古老的应用。这年头,电脑装好Linux后能正常发声的话,ALSA应该就已经是在正常工作了。

中间层:一些新的发行版都用PulseAudio做为一个应用中间层,通过它去统一应用软件与ALSA的接口。不过这个东西对于玩MIDI这种“专业”的事情来说,不是很有用。我们需要的是Jack。Jack是大部分音频处理软件所使用的输入输出组件,它具有高性能低延迟等优秀的特质。

音源:如果声卡没有硬件的音源,或者硬件音源烂到只能发出电子味很重的声音。我们就需要一个软件音源,通过加载音色库(SoundFont)文件,把MIDI信号合成为声音。Linux下常用的软音源有fluidsynth或Timidity++。另外还需要准备合适的音色库文件。

音序器:简单的说就是用来作曲的软件啦,由于把各种MIDI信号组合到一起形成一个音乐作品。上面说的Cakewalk就是一款Windows下的古董级的音序器了。在Linux下,最有名的当属Rosegarden了。

最终的工作流程就是用Rosegarden谱曲,在fluidsynth或Timidity++中加载好音色库文件,用Jack把Rosegarden的General MIDI Device输出端口连接到fluidsynth或Timidity++生成的Synth输入端口。

以Debian Squeeze为例,在ALSA工作正常的前提下,安装以下软件包及其依赖包:jackd, qjackctl(Jack的图形前端), qsynth(fluidsynth的图形前端), rosegarden, fluid-soundfont-gm (一个音色库文件)。

sudo aptitude install jackd qjackctl qsynth rosegarden fluid-soundfont-gm

安装完后就可以启动JACK Control和Qsynth,首先点Qsynth界面上的Setup按钮,在Soundfonts页中指定要用的音色库文件,如:/usr/share/sounds/sf2/FluidR3_GM.sf2,重启音源引擎。然后可以打开Rosegarden,这时在JACK Control的Connect按钮对应的窗口的ALSA页中会可以看到Rosegarden的输出端口和Qsynth的输出端口,选中它们点“Connect”把它们连起来。同时确认一下在"Audio“页中,Qsynth的输出端口也已经与”system“的playback端口连接正常。

Qsynth设置

Qsynth设置

JACK Control ALSA设置

JACK Control ALSA设置

JACK Control Audio设置

JACK Control Audio设置

大功告成,在Rosegarden中打开一个MIDI文件,或者自己涂鸦几个音符吧,点播放以后就应该可以听到MIDI音乐声响起了。

Rosegarden界面

Rosegarden界面

除了Rosegarden,Linux中也有其它一些音序器软件,比如tuxguitar,就是专门为吉他爱好者准备的。

HappyEO是一款在Windows下用电脑键盘模拟电子琴的软件,也能当成音序器的MIDI信号输入输出设备。这个软件在2000年到2006年间占用了我无数的时间,我乐在其中的用它制造了无数的“噪音”,直到我换了笔记本电脑(没有了标准键盘)和开始用Linux。在把Linux下的MIDI环境配置好后我就迫不急待的用wine尝试运行这个软件,软件运行成功了!看到久违的界面,听着自己已经不再熟练的弹奏,还真是颇有一点激动呢。

在Debian下用wine运行的HappyEO

在Debian下用wine运行的HappyEO

进位制与数学游戏

现有1000个苹果,10个盒子,问各个盒子内应该分别放入多少个苹果,才能使得用户要买任意1至1000之间的一个苹果数,都可以给他(卖的时候是整个盒子卖,不能拆盒子的包装)。

曾经在我的那些数学玩具们——二进制篇中提到过这个问题,看过那篇文章后,答案应该是不言而喻的,1, 2, 4, 8, 16, 32……

如果把题目换成:现有一架天平,若干个砝码,每个砝码应该分别多重才能称出1至1000克整数克的物品?

答案如果是不假思索的1, 2, 4, 8, 16, 32……自然是可以的,那我也不用废话写这篇文章了。实际上1000个苹果需要装在10个箱子里,用天平称1至1000克的物品却不需要10个砝码,只用7个就够了。

差别在于:装苹果的盒子只以能是选择拿或者不拿,而天平则可以不放砝码,或者把砝码放在左边,或者放在右边。所以,我只用两个砝码:1克和3克,就可以称出1至4克的任意整数克。

因此,解装苹果的问题需要用到二进制,解天平砝码的问题则需要用到三进制。二进制有0或1,真或假,开或关的两种状态。三进制则就有三种状态,0、1、2或-1、0、1(平衡三进制)。

在生活中,也有不少东西具有三种状态。对于天平称东西的问题(尤其是那些在XX个小球中找出X个不同的智力题)或者一些带有约束条件的过河问题,都可以用三进制来建模和解决。

进位制是一个很有意思的话题,以学习十进制和二进制的思维方式,我们就很容易的类推出各种进制的表现型式和性质,甚至于还可以捣鼓出“负2进制”之类的东东。感兴趣的TX可以考虑拜读Donald E. Knuth的神书TAOCP的第二卷。

好吧,其实这篇文章算是看了《进位制与数学游戏》一书的一小点收获了,在这本书中,作者不厌其烦的为一个相同的数学模型创造出了无数的问题和实例,所以在看完整本书后,能发现的收获也就只有那么一小点。

最后联想到了一个以前学编译原理时老师讲过的题,当时在课堂上我还真是没能自己做出来:

构造一个DFA,用于识别字母表∑={0,1}上可以被3整除的二进制数。

2011新年好

好多人都在盘点2010,那我也跟风盘一下。

2010年,我做了这些事:

– 写了20篇博客

博客空间总访问量16842 PageView(Google Analytics数据),比去年上涨23%。首页、折腾My BookSSH隧道折腾O2 Joggler加速Linux编译这几个页面的PV占总PV的50%。博客的RSS订阅数刚刚超过了100(以Google Webmaster Tool数据)。

开通了Google AdSense,两个多月以来收入是$0.01,也就是只有一次点击——我自己点的。

– 完成2010年的计划

开车学完了,4月份开始,9月份结束,所有项目一次顺利通过。2010的财务收入支出相当清晰,不翼而飞的开销占总开销的0.2%。时间管理,不敢说自己做得很好,但有很多时候感觉比以前更充实,开始使用Remember The Milk来避免忘事。

– 参与了4个自由软件项目

1. 电子书开源固件OpenInkpot的中文化,提交了一个Patch。但这个项目在6月份以后几乎处于休眠状态,前景不明。

2. 电子书管理软件calibre的开发,完成了豆瓣元信息插件、豆瓣封面下载插件、盛大Bambook设备接口、Bambook SNB文件格式支持等功能。同时参与它的中文化工作。

3. GNU中文翻译小组。在加入这个沉寂的小组6年后,终于提交并发布了包括GNU首页在内若干页面的翻译。但由于这个项目活跃度仍然很低,还有不少页面翻译由于没有得到审核而没有发布。

4. 继续开发PockeTwit。由于饭否刚刚回归,PockeTwit的只针对饭否回归发布了一个新版本,还没有更多的新功能加进去。也还没有能把饭否的支持并回PockeTwit的主干。

– 我自己的自由软件项目

1. LGuo的电子运行图。发布了一个新版本2.60,主要改进了多平台和多语言的支持。

2. 豆饭。饭否回归后发布了一个新版本,没有新的功能增加。曾经把它分支成“豆推”用于支持Twitter,现在已经并回主线,成为一个隐藏功能。

3. Windows Mobile上的火车时刻表和余票查询。这个软件数据来源是12306.cn的实时数据,所以会比离线时刻表更有价值,但在POC完成后一直放在那里没动了。当时停滞的原因是我画不出一个自己满意的界面……后来没有动力再做的原因是我觉得做客户端软件不如做个可以良好支持手机浏览器的Web版更有价值。

– 几个重要的IT产品

1. 汉王N510电子书。没花钱,因为它关注了OpenInkpot和calibre。

2. LEGO Mindstorm NXT 2.0。去美国的时候犹豫再三还是决定买下了。不过迄今为止还没有用它原创出一个我自己满意的作品,倒是为leJOS贡献了一点文档中文化。

3. 盛大Bambook电子书。我承认我这个买得头脑发热,不过还是因为它更多的参与了calibre项目。我写的calibre的Bambook插件正在参加盛大的Bambook程序达人赛,从目前来看,有望把投资回本,欢迎大家去为它投票。

4. O2 Joggler。去年的My Book因为硬件升级阵亡,所以入了O2 Joggler。于是博客的很大一部分流量也从My Book的那篇文章转移到了O2 Joggler的文章。

5. Linode VPS。秒杀到了免费赠送$100的Linode VPS,打算长期使用。

– 旅游

美国5日游(Blog文章(1)(2)(3)(4)(5)),新疆8日游送别京沪线最后一趟绿皮1462次+滁州琅琊山4小时游,创103万人次记录的上海世博一日游

2011年,希望能做这些事:

2011年应该会是忙碌的一年,要做的事很多,为了不在这里给自己太多的压力,就写个“没有鸭梨”的吧:2009年底中国发射了第一颗业余通信卫星希望一号(HO-68),2010年一直想着要试验一次卫星通联却没有实现,就把这个愿望放到2011年吧。小卫星的寿命非常有限,希望能抓住这次机会。CQ satellite, this is BG4XTR, calling CQ and standing by.

几分钟前好友给我带来了新年的第一个好消息:2012年维也纳新年音乐会将由曾经执棒2006年维也纳新年音乐会的马里斯·杨松斯(Mariss Jansons)指挥,2006年的音乐会给我留下了深刻的印象,所以一直很期待他可以再次登台。期待10多个小时后即将开始的2011年维也纳新年音乐会,也期待365天后的2012年维也纳新年音乐会。新年音乐会总是在新年的第一天为我带来新一年全新的气息。

折腾O2 Joggler

由于我的WD My Book World Edition在内存升级过程中遇难,好友给我介绍了一个新玩具:O2 Joggler电子相框,它是一个OpenPeak给O2 OEM的产品。

记得曾经某人在拿到作为T公司20周年纪念品的电子相框后,在第一时间把它大卸八块,然后失望的把它合起来——一个基于VCD芯片做的相框实在没有什么好折腾的。相比之下,O2 Joggler的硬件配置就很有折腾的余地:Intel Atom Z520 1.33 CPU, 512 RAM, 1G Flash, GMA500, 7寸800*480电容触摸屏, RT8169 1000M网卡, RA2870 802.11N无线网卡, 1 USB 2.0。而曾经在HiPDA论坛上的团购价格已经低至450元。

O2 Joggler,相机不在手头,就从网上找个图吧

O2 Joggler,相机不在手头,就从网上找个图吧

虽然配置不错,不过很快就会发现它做什么东西都有软肋:做下载机要外接硬盘,做平板电脑用的话它没有电池,做车载多媒体设备的话它没有GPS和3G模块,做高清播放盒吧它没有视频输出接口。我的目的还是用它做下载机,所以直接用硬盘底座外挂3.5寸硬盘,按着当年折腾My Book的方法折腾它。

操作系统选择:理论上任何可以通过EFI引导的x86操作系统都可以。出于驱动的原因,目前比较完善的还是基于Ubuntu的GNU/Linux发行版,尤其是适合于Netbook的REMIX或者Mint,Android 2.2的工作还在进行中。我还是选择了我最熟悉的Debian,虽然这也许不是个最好的选择。编译Linux Kernel需要的Patch在这里有个列表。Joggler自己有一个原生的定制过的GNU Linux操作系统,也可以用于实现各种应用,但各种前端应用都需要基于Flash来做。

操作系统安装:网上有不少已经装好的镜象,可以直接用。对于我来说,则是用debootstrap装一个干净的Debian才会比较合我口味,大部分的工作可以参考JogglerWiki上的这篇文章来完成。目前,标准安装一个Debian + XFCE的桌面,基本上可以把大小控制在1G以内,这样就可以把操作系统放到Joggler内置的Flash中。当然,在实验各种系统时,还是先放在U盘上外置引导会比较让人放心,因为这样完全不会动到原来的系统,就不致于把Joggler变成砖头。

应用软件:反正是个标准的x86的GNU Linux,其它应用软件您该怎么装怎么装吧……从这个角度来说,Joggler太像一台真正的电脑了,所以反而也没有太多可以折腾的地方。

目前Joggler相关的资料比较完整的地方是JogglerWiki,我在这里索引一下比较有用的一些信息。

1. 拆机视频:拆机可以把USB无线网卡拨掉换成个大U盘内置,可以接出更多USB口,可以换CPU散热片(目前相框的支架就是CPU的散热装置,最好别把它拆了),加装ZIF接口的PATA硬盘

2. Joggler的有线网卡没有MAC地址,必须用软件设置

3. 内置Flash跟外置的U盘一样可以引导系统,你可以用fdisk对它重新分区合并使用。但必须保持第一个分区是FAT的EFI的引导分区。这里有些资料可以参考。Joggler不是很容易变砖的,实在你很不幸的把它变砖以后,还可以通过热插拔EFI芯片解决。

4. 内置喇叭在闲置时可能会会轻微爆音,MS是由于CPU节能引起,解决方法有若干种,但好像不是每个人都说有效。

5. 在我这里外置USB硬盘有时会出现异常断开的问题,这个问题对于下载机来说会非常致命,尤其如果系统是装在USB设备上的话,会直接导致系统死掉。目前的线索是一个Ubuntu的一个BUG报告,不过我还没有试成功,而最近几天这个问题却似乎没再出现。

6. 很多人报告Joggler发热量太大,70度以上后自动降频后慢到无法使用。但我这里没有出现过,温度一般在35-41度左右,长期开Flash应用(比如豆瓣电台)会升到51度。如果屏幕长期打开会更热一些。

7. 在我的系统中,Google Chrome常常会导致系统完全死锁,不知道是不是跟这个有关,总之我直接换用Firefox绕过了这个问题。

8. Joggler还有一个很不起眼的设备,那就是它顶上的一个光线传感器,加载i2c的模块后,可以用程序读它的数据,通常可以用来调整屏幕亮度用。相关代码在这里

9. 理论上Joggler的硬件配置播放1080p的高清视频是没有问题的,当然你需要自己编译一个VAAPI的mplayer。不过我这里实测结果是720p的视频播放基本问题不大,但1080p还是基本没戏,我对此表示无鸭梨,难道我真的需要在这么小的屏幕上放这么高清的视频么?

目前我的Joggler在我这里是勤勤恳恳的运行rtorrent和amule-daemon做下载机,用cronjob打开豆瓣电台做闹钟。更多的应用就慢慢再开发了。

关注2011维也纳新年音乐会

继续维持传统,第七次写名为关注xxxx维也纳新年音乐会的Blog。前几篇在:2005 2006 2007 2008 2009 2010

这几天360和QQ闹得天翻地覆,这两个软件我都用得不多,所以就只是看看热闹。不用QQ的主要原因还是在于它没有一个可靠的Linux客户端,而带来的主要损失就是无法从QQ群中获得一些最新的信息,幸亏有好友通过别的渠道给我传递一些消息,所以才得以在第一时间获得有关2011年维也纳新年音乐会的消息。

01 Johann Strauss II – Reiter-Marsch; op. 428 – 骑兵进行曲 – 1995

02 Johann Strauss II – Donauweibchen; Walzer; op. 427 – 多瑙河女妖圆舞曲 – 1990,1999

03 Johann Strauss II – Amazonen Polka; op. 9 – 亚马逊女战士波尔卡

04 Johann Strauss II – Debut Quadrille; op. 2 – 首次登场四对舞

05 Josef Lanner – Die Schonbrunner; Walzer; op. 200 – 美丽的布尔诺人(美泉宫的人们)圆舞曲 – 1994,2001

06 Johann Strauss II – Muthig Voran!; Polka schnell; op.432 – 勇往直前快速波尔卡

07 Johann Strauss II – Csárdás aus ‘Ritter Pasman’; op. 441-1 – 查尔达什舞曲,选自《骑士帕斯曼》- 1967,1989,2000

08 Johann Strauss II – Abschieds Rufe; Walzer; op. 179 – 告别之声圆舞曲

09 Johann Strauss I – Furioso-Galopp; op. 114 – 激情加洛普 – 1999,2007

10 Franz Liszt – Mephisto Walzer No.1 – 梅菲斯托圆舞曲第一号

11 Josef Strauss – Aus der Ferne; Polka Mazur; op. 270 – 自远方玛祖卡波尔卡 – 1983,1994

12 Johann Strauss II – Spanischer Marsch; op. 433 – 西班牙人进行曲 – 2006

13 Joseph Hellmesberger jun. – Zigeunerin Tanz aus Ballet; Die Perle von Iberien – 吉普赛舞曲

14 Johann Strauss I – Chachucha-Galopp; op. 97 – 卡楚恰加洛普 – 2004

15 Josef Strauss – Mein Lebenslauf ist Lieb’ und Lust; Walzer; op. 263 – 我的生平经历是爱与希望圆舞曲 – 1995

16 Eduard Strauss – Ohne Aufenthalt; Polka-schnell; op. 112 – 永不休止快速波尔卡 *

17 Johann Strauss II – An der schönen blauen Donau; Walzer; op. 314 – 蓝色多瑙河圆舞曲

18 Johann Strauss I – Radetzky-Marsch; op. 228 – 拉德茨基进行曲

担任2011年维也纳新年音乐会指挥的是奥地利本土指挥家弗朗兹·威尔瑟-莫斯特(Franz Welser-Möst),这将是他首次登上维也纳新年音乐会的指挥台。莫斯特现在是克利夫兰管弦乐团的首席指挥,并在不久前刚刚出任维也纳国立歌剧院艺术总监。虽然以前不是太了解这位指挥家,也没有欣赏过他的作品,但仍然非常期待他在新年音乐会上的首次亮相,因为在这个指挥台上,每一次出现新的面孔都能为这场传统的音乐盛宴带来新的气息。

今年的曲目单中有7首从未在新年音乐会上演奏过的新曲子,这在最近几年来看算是最多的一次。新曲子中既有欢快的波尔卡和四对舞曲,也有温文尔雅的圆舞曲,尤其值得一提的是今年还将演出一首李斯特的圆舞曲作品,2011年是李斯特诞辰200周年。每年这些纪念音乐家而加入新年音乐会的非施特劳斯家族的作品都会带来不一样的味道。虽然李斯特的作品是第一次入选新年音乐会,但实际上,1999年和2007年并将在2011年再次出现的老约翰的《激情加洛普》的旋律就是跟据李斯特的《钟》的旋律所创作的,不过《钟》其实也是李斯特跟据帕格尼尼的同名小提琴曲改编而成的钢琴曲。

其它的曲子中,也没有包括太多的“陈词滥调”,很多都是仅仅在新年音乐会上出现过一次的优秀作品,比如约瑟夫的两首玛祖卡和圆舞曲,旋律都非常优美,值得期待。约瑟夫·赫尔梅斯伯格和约瑟夫·兰纳的作品算得上是新年音乐会的常客了,他们的作品风格与施特劳斯家族比较相近,所以也常常入选新年音乐会。今年的赫尔梅斯伯格的新曲吉普赛舞曲应该会给人们带来耳目一新的感觉。

音乐会以进行曲开场的传统没有变,但下半场的开场却没有像往常一样选择一首序曲,而是选择了查尔达什舞曲,总得来说这个曲子也还是挺有序曲的气质的,个人觉得放在下半场的开场还算是个不错的选择。

时隔一年,传奇式导演布莱恩·拉奇再次回到新年音乐会的导演位置上,这位导演过18届维也纳新年音乐会的神奇人物每年都以他传统的方式,用镜头细腻的为全世界的观众诠释音乐之美。据说他导演音乐会都是直接用的是指挥的总谱,他对演出的每一个曲目都做到烂熟于心,确保跟据乐曲的旋律和配器,在最合适的时候把镜头切换到相应的角度,让画面与音乐同步展现出乐曲最核心的意境。

维也纳的金色大厅、指挥家和维也纳爱乐乐团、维也纳国家歌剧院芭蕾舞团的艺术家、意大利阳光之城圣雷莫的美丽鲜花,还有ORF的电视转播工作者们,在每一个新年的第一天到来之时,为全世界的人们带来艺术的享受,让我们一同期待。