音乐之声——midi制作原理
实际发出声音需要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制作原理的更多相关文章
- php框架的制作原理
php框架的制作原理 (2012-08-16 14:25:55) 转载▼ 标签: php框架制作 杂谈 分类: php index.php 主入口文件 <?php define('ISEXIS ...
- 【AS3 Coder】任务九:游戏新手引导的制作原理(上)
使用框架:AS3任务描述:了解游戏中新手的制作原理及流程 难度:3 本章源码下载:http://www.iamsevent.com/zb_users/UPLOAD/GuideManager/Test1 ...
- 【AS3 Coder】任务九:游戏新手引导的制作原理(下)
在上一篇教程中,我们了解了一套我自创的新手引导管理框架的使用原理,那么在本篇教程中,我们将考虑新手引导制作中可能遇到的一些棘手问题及探讨其解决方案.Are you ready my baby? Let ...
- 虎扯:纯css3各方向小三角的制作原理分析
入驻博客园两个月之后的第一篇随笔,希望能够做到三个原则: One:不浪费自己的时间, Tow:不浪费读者的时间, 第三就是希望有缘的朋友们多多指教,共度前端快乐的大坑!!! 咱们今天来做一个居家旅行必 ...
- 一文读懂充电宝usb接口电路及制作原理详细
转自:http://www.elecfans.com/dianlutu/dianyuandianlu/20180511675801.html USB充电器套件,又名MP3/MP4充电器,输入AC160 ...
- transition:all 0.5s linear;进度条动画效果 制作原理
Html: <span class="progress"><b ><i></i></b><em>50< ...
- MIDI制作的相关软件
Native Instruments Kontakt(音乐采样器) fl studio 12 v12.5.0.59 汉化版水果 http://xiazai.flstudiochina.com/wm ...
- CSS3系列之3D制作
一.序 博主最近这些天,突发奇想的想研究一下CSS3的东西,从而提升一下CSS的能力,在学习的过程中发现其实CSS3是一个挺复杂的东西,深入的研究,你可能会涉及到初中的光学理论来帮助理解一些概念,同时 ...
- rpm包制作(待实验)
作者:firefoxbug 时间:July 18, 2014 rpm包命名规范 对于rpm包的命名符合如下规范. %{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}.rpm N ...
随机推荐
- win7彻底卸载iis
https://jingyan.baidu.com/article/e5c39bf5829e8e39d660336c.html 昨天在电脑上搭建了PHP开发环境之后,重启apache服务器老是报错,检 ...
- 在js中怎样获得checkbox里选中的多个值?
https://zhidao.baidu.com/question/203897221.html 思路:利用name属性值获取checkbox对象,然后循环判断checked属性(true表示被选中, ...
- php 邓士鹏
// $is_company = $_groupid > 5 || ($_groupid == 4 && $user['regid'] > 5); $_E = ($MOD[ ...
- shopnc IM配置过程
im配置windows下,修改chat下和data下的config,安装node,覆盖node下文件即可
- 解决vue路径中#号
在router文件夹下的js文件中,更改配置增加 mode: 'history'; vue-router官方文档:https://router.vuejs.org/zh-cn/essentials/h ...
- 了解JDK 6和JDK 7中substring的原理及区别
substring(int beginIndex, int endIndex)方法在jdk 6和jdk 7中的实现是不同的.了解他们的区别可以帮助你更好的使用他.为简单起见,后文中用substring ...
- iptables中DNAT、SNAT和MASQUERADE的理解
转:http://blog.csdn.net/yu_xiang/article/details/9212543 DNAT(Destination Network Address Translation ...
- RocketMQ-quickstart(批量消费问题)
基本概念: Producer:消息生产者,负责生产消息,一般由业务系统负责生产消息. Consumer:消息消费者,负责消费消息,一般是后台系统负责异步消费. Push Consumer:Consum ...
- (1-1)SpringCloud-Eureka:服务的注册与发现
SpringCloud Eureka是SpringCloud Netflix服务套件中的一部分,它基于Netflix Eureka做了二次封装,主要负责完成微服务架构中的服务治理功能.下面来做一个示例 ...
- httpd: Could not reliably determine the server's fully qualified domain name, using ::1 for ServerName
问题原因: httpd服务配置文件,并没有设置解析根地址,无法可靠地确定服务器的完全合格的域名 如何解决? httpd的配置文件放在 /etc/httpd/conf/目录下,去掉ServerName注 ...