实际发出声音需要4项必备的条件

1 发生的装置

Sequencer     把sequencer想成CD播放机

(plays)

2 要演奏的乐曲

Sequence     sequence就好像是单曲CD

(has a)

3 带有乐曲的信息记录

Track           track可比喻是单曲CD上唯一歌曲的信息

(holds)

4 乐曲的音符等信息

MidiEvent    可悲唱盘理解的信息数据

另外还需5个步骤

1 取得Sequencer并将它打开

Sequencer player = MidiSystem.getSequencer();
player.open();

2 创建新的Sequence

Sequence seq = new Sequence(tingming, 4);

3 从Sequence中创建新的Track

Track t = seq.createTrack();

4 填入MidiEvent并让Sequence播放

t.add(myMidiEvent1);
player.setSequence(seq);

5 按下Play键

player.start();

制作MidiEvent(乐曲信息)

MidiEvent是由Message加上发音时机所组成的。Message是执行的内容,MidiEvent是执行的时机。

1 创建Message

ShortMessage a = new ShortMessage();

2 置入指令

a.setMesage(144, 1, 44, 100); // 这代表发出44音

3 用Message创建MidiEvent

MidiEvent noteOn = new MidiEvent(a, 1); //在第一拍启动a这个Message

4 将MidiEvent加到Track中

track.add(noteOn);

Track带有全部的MidiEvent对象Sequence会根据事件的时间组织它们,然后Sequencer会根据此顺序操作,例如和弦声音或不同乐器的声音。

setMessage的含义

void javax.sound.midi.ShortMessage.setMessage(int command, int channel, int data1, int data2) throws InvalidMidiDataException

comand: 信息类型。如144代表打开,128代表关闭。

channel: 频道。每个频道代表不同的演奏者。如1号代表吉他,2号是Bass。

data1: 要发出的音符。从0~127代表不同的声高。

data2: 音道。用多大的音道按下?0几乎听不到,100算是差不多。

如果要对NOTE OFF的事件做些音长的变化,可如下操作:

b.setMesage(144, 1, 44, 100);
MidiEvent noteOff = new MidiEvent(b, 3);

参考源码

克劳汀幻想曲-midi键盘带伴奏版

滴答(guitar)

大海

音乐之声——midi制作原理的更多相关文章

  1. php框架的制作原理

    php框架的制作原理 (2012-08-16 14:25:55) 转载▼ 标签: php框架制作 杂谈 分类: php index.php 主入口文件 <?php  define('ISEXIS ...

  2. 【AS3 Coder】任务九:游戏新手引导的制作原理(上)

    使用框架:AS3任务描述:了解游戏中新手的制作原理及流程 难度:3 本章源码下载:http://www.iamsevent.com/zb_users/UPLOAD/GuideManager/Test1 ...

  3. 【AS3 Coder】任务九:游戏新手引导的制作原理(下)

    在上一篇教程中,我们了解了一套我自创的新手引导管理框架的使用原理,那么在本篇教程中,我们将考虑新手引导制作中可能遇到的一些棘手问题及探讨其解决方案.Are you ready my baby? Let ...

  4. 虎扯:纯css3各方向小三角的制作原理分析

    入驻博客园两个月之后的第一篇随笔,希望能够做到三个原则: One:不浪费自己的时间, Tow:不浪费读者的时间, 第三就是希望有缘的朋友们多多指教,共度前端快乐的大坑!!! 咱们今天来做一个居家旅行必 ...

  5. 一文读懂充电宝usb接口电路及制作原理详细

    转自:http://www.elecfans.com/dianlutu/dianyuandianlu/20180511675801.html USB充电器套件,又名MP3/MP4充电器,输入AC160 ...

  6. transition:all 0.5s linear;进度条动画效果 制作原理

    Html: <span class="progress"><b ><i></i></b><em>50< ...

  7. MIDI制作的相关软件

    Native Instruments Kontakt(音乐采样器) fl studio 12 v12.5.0.59 汉化版水果   http://xiazai.flstudiochina.com/wm ...

  8. CSS3系列之3D制作

    一.序 博主最近这些天,突发奇想的想研究一下CSS3的东西,从而提升一下CSS的能力,在学习的过程中发现其实CSS3是一个挺复杂的东西,深入的研究,你可能会涉及到初中的光学理论来帮助理解一些概念,同时 ...

  9. rpm包制作(待实验)

    作者:firefoxbug 时间:July 18, 2014 rpm包命名规范 对于rpm包的命名符合如下规范. %{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}.rpm N ...

随机推荐

  1. lnmp一键安装的卸载

    http://blog.csdn.net/lansetiankong12/article/details/48130507  如果是lnmp一键安装的 进入安装包目录 [root@www home]# ...

  2. Canvas DrawImage截取和压缩图片的陷阱

    html5的canvas十分之强大,可以做到快速的截取压缩出新的图片! 不过最近开发过程中遇到一个问题,图片压缩后使用toDataURL取得图片显示为一片漆黑,什么都没有! 折腾了很久,起初以为是上传 ...

  3. HTML <a href >标签的target属性

    规定在何处打开链接文档. _blank    在新窗口中打开被链接文档 _parent  在父框架集中打开被链接文档 _self      默认.在相同的框架中打开被链接文档 _top      在整 ...

  4. Spring学习之路一

    Spring 官网:http://projects.spring.io/spring-framework/ Spring下载地址:https://repo.spring.io/simple/libs- ...

  5. Do you know how many stuff inside your Google Account?

    My friend Sandy she wants me to do her a favor. She'd like to clear Hangouts chat history. I think s ...

  6. 基于Swt、ffmpeg、jacob、vlc、SApi、h2技术编写简单的旁白生成器

    一.简介: 前一段时间尝试录制了几集3D编程方面的视频教程,我发现录制时最大的障碍是让脑中的思考.手上的操作和嘴里的解说保持同步,一旦三个"线程"中有一个出错,就必须停下来重新录制 ...

  7. spring加载资源文件中classpath*与classpath的区别

    在spring和MyBatis继承的时候,配置mapperLocations.一开始配置是这样的. 需要加载路径为com/thomas/base/mapper和com/thomas/bu/mapper ...

  8. CRC检验

    CRC(循环冗余检验码) 基本原理:在K位信息码后面加上R位校验形成N位编码(即CRC码),事先需要约定一个生成多项式G(x),校验码生成过程:将K位信息码向左移动R位然后mol(其实就是按位异或)上 ...

  9. java to kotlin (2) - lambda编程

    前言 Kotlin Note 是我学习kotlin整理笔记向博客,文章中的例子参考了kotlin in action这本书籍,同时我也极力推荐这本书,拥有Java基础的人可以很快的就使用kotlin来 ...

  10. python并发编程之多进程(实现)

    一.multipricessing模块的介绍 python中的多线程无法利用多核优势,如果想要充分的使用多核CPU资源,在python中大部分情况下需要用多线程,python提供了multiproce ...