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的介绍就到此结束了。
- 大小: 26.6 KB
- 大小: 11.1 KB
分享到:
相关推荐
JFugue是一个用于音乐作曲的Java API。和其它的音乐API不同,它能够让您用数据字符串来指定音符、乐器、和弦,以及其它音乐数据...您可以在Java应用程序正在运行的时候用JFugue来演奏音乐,或者把音乐保存为MIDI文件。
JFugue是一个用于音乐作曲的Java API。和其它的音乐API不同,它能够让您用数据字符串来指定音符、乐器、和弦,以及其它音乐数据...您可以在Java应用程序正在运行的时候用JFugue来演奏音乐,或者把音乐保存为MIDI文件。
介绍jfugue的使用方法,方便java环境下编辑和操作midi文件以及保存midi格式文件。可以直接执行序列命令的方式演奏多种乐器的音乐
· 使用普通的电脑键盘进行演奏,左右手分别独立操作,就像弹钢琴一样。 · 使用自带的大容量音色库,音色逼真,在任何机器上都能保持一致的音色! · 即使是在板载声卡(电脑主板集成的声卡)上也可以实现无延迟...
该文档包含了微机原理课程设计音乐演奏的全部设计过程内容,讲述了汇编语言实现音乐演奏的基本原理和相关的程序。 该文档可以供大家参考,有不足之处,希望能指点迷津。 音乐演奏涉及到的硬件部分有8255A和8253芯片...
汇编语言 演奏音乐 程序 汇编语言 演奏音乐 程序 汇编语言 演奏音乐 程序
单片机步进电机演奏MIDI音乐 MATLAB+STM32。首先通过Matlab提取MIDI音乐文件中需要的通道的音乐,然后将其复制到STM32的代码中,通过单片机控制步进电机进行演奏音乐。
通过arduino操控蜂鸣器演奏音乐.zip通过arduino操控蜂鸣器演奏音乐.zip通过arduino操控蜂鸣器演奏音乐.zip通过arduino操控蜂鸣器演奏音乐.zip通过arduino操控蜂鸣器演奏音乐.zip通过arduino操控蜂鸣器演奏音乐.zip...
蜂鸣器是最简单的发声工具,但能演奏出美妙的歌曲
单片机演奏音乐实验单片机演奏音乐实验
一个使用PC喇叭演奏音乐的控件 (delphi源码)
博客配套源码,使用无源蜂鸣器播放两只老虎,STM32F103主控。具体使用方法查看博客https://blog.csdn.net/geek_monkey/article/details/87258575#comments_13599143
电脑键盘来演奏音乐。如果配以五六百元的MIDI键盘,更可与五 六千元的高级电子琴媲美。绿色软件,无需安装。大量方便的快 捷键,让你的演奏得心应手。是否早就想学习音乐却无老师指导? 初学者的良师益友,音乐玩家...
基于FPGA梁祝音乐演奏仿真,使用Quartus 进行仿真,编译后可以在仿真界面观察梁祝音乐演奏的仿真波形图,在Quartus15.0 实测可用,包含完整的工程程序,可直接使用。
Matlab的sound函数演奏音乐 视频教程查看bilibili,av46176249 用到一个sound函数,还有十二平均律的乐理知识 生成的中大校歌的谱子参照本科生手册,当然最难的果然还是扒谱了 配的和弦是C F G7 更新了一个新的...
单片机演奏单片机演奏单片机演奏单片机演奏单片机演奏单片机演奏单片机演奏单片机演奏单片机演奏单片机演奏单片机演奏单片机演奏单片机演奏
利用汇编语言编写的音乐演奏程序,使用汇编语言汇编后播放简单音乐
自编的一个音乐演奏程序,可以根据自己的选择让主机喇叭演奏出喜欢的音乐!
IBM-PC 8253/8255音乐演奏器的设计 2、设计目的 熟悉并掌握IBM-PC中定时器8253及并行接口芯片8255驱动扬声器发出声音的方法,熟悉并掌握接口控制程序的一般结构。 3、设计内容与要求 (1)电子琴功能,编写程序,...