使用jfugue来演奏mid音乐

标签: jfugue mid 音乐 | 发表时间:2014-12-26 09:21 | 作者:xpenxpen
分享到:
出处:http://www.iteye.com
java真是无所不能,居然还能演奏音乐。今天要介绍的是一个用java写的演奏播放mid音乐的类库,名字叫 jfugue。这个类库的优点是方便写曲谱,使得不懂java sound api的人也能写出程序来演奏mid音乐。

环境:
JDK1.7.0_72 64bit (理论上JDK1.5以上都可以)
当然电脑声卡,音响耳机,客官记得自备。

1.下载
先要到 官网下载jfugue,本文写作时最新版是jfugue-4.0.3.jar。把这个jar包下载下来,加到classpath下就能用了。

2.第一个程序
        Player player = new Player();
        player.play("C D E F G A B");

没错,就2行代码,就可以演奏出“哆来咪发索拉西”这7个音了!把耳机戴上,听到了吗?

3.进阶,《两只老虎》

Player player = new Player();
//两只老虎
Pattern pattern1 = new Pattern("I[40] C5q D5q E5q C5q");
//跑得快
Pattern pattern2 = new Pattern("E5q F5q G5h");
//一只没有眼睛
Pattern pattern3 = new Pattern("G5i A5i G5i F5i E5q C5q");
//真奇怪
Pattern pattern4 = new Pattern("C5q G4q C5h");

// Put all of the patters together to form the song
Pattern song = new Pattern();
song.add(pattern1, 2); // Adds 'pattern1' to 'song' twice
song.add(pattern2, 2); // Adds 'pattern2' to 'song' twice
song.add(pattern3, 2); // Adds 'pattern3' to 'song' twice
song.add(pattern4, 2); // Adds 'pattern4' to 'song' twice

// Play the song!
player.play(song);


看不懂的话下面解释一下。

4.名词理论

4.1 音符
note 音符
rest 休止符
chord 和弦

jfugue里用MusicString来表示曲谱。
CDEFGAB分别代表:哆来咪发索拉西
R代表 :休止符
sharp 升音符  用#表示
flat 降音符  用b表示

4.2 音阶
octave 八度音阶

如上图所示,一般常用的7个音在红色区域的第5阶。
而MusicString里不写的话默认就为第5阶,比如《两只老虎》基本都是第5阶,只有1个音是第4阶。

4.3 音长
duration 音长
whole w
half h
quarter q
eighth i
sixteenth s
thirty-second t
sixty-fourth x
one-twenty-eighth o


《两只老虎》里面基本都是q,表示四分之一音长,最后有个h表示二分之一音长。你可以对比上面的乐谱和代码,就能明白了。

4.4 Pattern的运用
Pattern其实就是为了避免重复的乐谱复制粘贴,《两只老虎》里面每段乐谱都重复2遍。所以用了4个Pattern来简化代码。

4.5 乐器
instrument 乐器
默认: Piano

这个是MIDI的一个规范
MIDI定义了128种乐器,用来表现不同的音色。
我这里不复制粘贴了,请自行去维基百科上查阅 General MIDI里面的 旋律音色(Melodic sounds) 这一章节。

要使用乐器,在MusicString里用I[]表示,其中中括号中是乐器的号码,不过和维基百科上的有一点不一样,它是从0开始编号的,所以是0~127
如此便能解释《两只老虎》开头的那个I[40]了,查维基百科上的表可知41号乐器是小提琴。
至此,你应该对《两只老虎》这首曲子的谱写方法完全明白了吧。

5. mid转谱工具
如果懒的话,有一个mid转谱工具可以用,而不用自己一个个把谱敲进去。
这个工具jfugue自带,类名是org.jfugue.extras.Midi2JFugue

比如我们已经在网上下载了一个《卡农》,文件名是canon.mid
执行以下命令,便可以转为乐谱,存到canon.txt里
java -cp jfugue-4.0.3.jar org.jfugue.extras.Midi2JFugue 11 canon.mid canon.txt
这个命令里面的11没有任何意义,只是一个占位符,因为官方这个工具有点小bug,多了一个无用参数。。。

OK,转好,最后用程序播放曲谱,试验下是否ok。(代码见music.7z里的Canon.java,文末自己找下载)

在卡农的乐曲声中,这次对jfugue的介绍就到此结束了。




已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [jfugue mid 音乐] 推荐:

使用jfugue来演奏mid音乐

- - 开源软件 - ITeye博客
java真是无所不能,居然还能演奏音乐. 今天要介绍的是一个用java写的演奏播放mid音乐的类库,名字叫 jfugue. 这个类库的优点是方便写曲谱,使得不懂java sound api的人也能写出程序来演奏mid音乐. JDK1.7.0_72 64bit (理论上JDK1.5以上都可以). 当然电脑声卡,音响耳机,客官记得自备.

音乐的出路

- 断肠君 - 36氪
上星期五的「盗版杀了音乐产业. 」一文果然引起不小的回响,连资深音乐人深白色也跑来加入讨论 ——虽然无法确定是三位中的哪一位,但还是很高兴能有真正身处音乐圈的人来和我们一起来探讨「音乐的未来」这个重要课题. 除了 ​​文章下面的留言,Google+上的讨论也很精彩,千万别错过. (当然这位深白色也有可能是冒名顶替的高中生,虽然这么多年,高中生应该也变成社会人士了.

Groovebug:音乐版Flipboard

- 宋大妈 - 互联网的那点事
网站名称:Groovebug (http://groovebug.com/). 尽管社交媒体阅读应用Flipboard曾被指为“华而不实的内容小偷”,它以杂志形式排版输出Twitter消息和网站内容的做法还是让人们看到了在个性化增值服务与广告上的商机,今年4月份更是获得了5000万美元融资,并且引来众多效仿者与变体,比如被称为“视频版Flipboard”的Showyou、主打商务社交新闻聚合的产品SkyGrid.

iPhone音乐应用盘点

- hama - 月光博客
  苹果iPhone系列手机强大的功能与时尚的外观早已成为人们关注的焦点,而其最具特色的内置iPod音乐播放器也是很多人选购它的理由之一.   说到iPod音乐播放器相信各位也都非常了解,而其作为iPhone的默认音乐播放工具也还算中规中矩,可以满足大众的基本需求. 然而,对于很多音乐爱好者来说,内置iPod功能过于简单,并不能满足用户对于音乐应用的需求.

理想音乐服务

- Henry - 爱范儿 · Beats of Bits
Tower Records 已死,其黄胶袋上刺目的“No Music, No Life”却早已脱离口号成为现实——与我的同龄人一样,我离不开音乐. 这个习惯脱离了小时候一柜子的卡带、稍大些一墙的 CD,脱离寻访香港 29 家独立唱片店、圆梦 Kraftwerk 现场、为 MotionCitySoundtrack 特约摄影——而最终归结为马世芳在访谈中原意迥异的一句话:“你失恋的时候,听出租车上放的每首歌都觉得是你的生命故事,这就是流行音乐.

stereomood – 看心情,听音乐

- CarlNERV - 36氪
在一个假日的早晨慵懒得醒来,耳边该配合一首什么样的歌呢. 如果这时候要去翻箱倒柜找合适的CD,是不是太破坏气氛了. 别烦恼,Stereomood可以马上为你找到合适的音乐. Stereomood是一个由几个意大利年轻人创办的音乐网络电台,其特别之处在于这里的音乐都是带有情绪或某种心情标签,而心情作为搜索属性,比起人们惯用的表演者、歌名、音乐类型等关键字要显得人性化得多,而音乐本身其实就是一种特别情绪化的东西.

新兴音乐服务下,音乐家收入越来越少

- Kainy - 爱范儿 · Beats of Bits
在上个星期结束的“数字音乐论坛”上,MOG 的移动产品主管 Anu Kirk 表现得十分忧虑:. 很糟糕,现在音乐家只能从(音乐)订阅服务中拿到一点点钱,然而更糟的是,每个客户就只肯掏出这么多钱. 订阅服务已经尽最大努力给音乐家付款了. 最近,音乐订阅服务相当流行,Spotify、MOG、Rhapsody、Rdio 是这个市场里面的佼佼者.

看书 背单词也能听的纯音乐 背景音乐

- - 虾米音乐每日精选
都希望背单词有一个非常安静的环境,可是当老妈在做家务,时不时发出噼里啪啦锅碗瓢盆声;又或者楼上邻居唱卡拉OK的余音缭绕到你家. 这时候你就需要有这么张舒缓柔和,不会产生强烈意念的美妙旋律,让它围绕成一个专属于你的小小空间,和纷纷扰扰的世界隔离开来. 李斯特:爱之梦No.3-- 李云迪. 肖邦:夜曲,Op.9,No.2-- 李云迪.

turntable:小公司的音乐梦

- blueslan - 爱范儿 · Beats of Bits
Amazon,Apple,Google,刚刚上市的 Pandora,和这些大牌公司相比,来自纽约的 turntable 简直不值一提. 这家在数星期内从 Facebook 上建立起 14万名用户的初创型公司最近还遇到了一些法律问题,现在起它只能向美国当地用户提供服务. 但这一切并不影响 turntable 的音乐梦.

iPad两个音乐软件:autoflip和etude

- Nickcheng - hUrR DuRr
最近一直在玩电钢琴,一直很迷恋Windows上的Synthesia这个软件,这个软件的好处是:通过MIDI信号来识别你的弹奏,和现有的midi文件做对比,判断你是否把曲谱弹对了. Synthesia还有几个NB的功能:用算法把midi自动显示为五线谱,区分左右手,最新的dev版还加入了指法提示. (虽然fingering hint是人工输入数据,保存为metadata到midi文件,不是算法判断的).