设计和MIDI合成器
MIDI协议使您能够发送和接收信息描述的声音。MIDI合成器是一个设备或软件,综合声音响应传入的MIDI数据。在最简单的形式中,MIDI合成器MIDI注意消息转换为音频信号。更复杂的合成器提供微调控制产生的声音,使您能够模拟工具。在本教程中,您将创建一个单声道的合成器,MIDI注意消息流转换为实时的音频信号。
了解与MIDI设备一般来说,明白了MIDI设备接口。
MIDI注意消息转换成声波
MIDI注意信息打包为一个NoteOn
或NoteOff
midimsg
对象在音频工具箱™。这两个NoteOn
和NoteOff
midimsg
对象有请注意
和速度
属性:
速度
报告表明有多难。按照惯例,注意与速度设置为0表示注意消息的消息。代表注意消息与注意消息是使用运行状态时更有效率。请注意
表明音频信号的频率。的请注意
属性值在0和127之间,包容性。MIDI协议指定60中央C,与所有其他相对于报告中指出。上创建一个MIDI注意消息表明中央C。
频道= 1;注意= 60;速度= 64;味精= midimsg (“NoteOn”通道,请注意,速度)
味精= MIDI消息:NoteOn通道:1注意:60速度:64时间:0 (90 3 c 40)
解释注意财产为频率,用平等的规模和A440公约:
频率= 440 * 2 ^ ((msg.note - 69) / 12)
频率= 261.6256
维持一些MIDI合成器使用攻击衰变释放(ADSR)信封来控制音量,或振幅,注意随着时间的推移。为简单起见,使用注意速度来确定振幅。从概念上讲,如果一个关键的打击,由此产生的声音是响亮。的速度
属性值在0和127之间,包容性。正常速度和解释注意振幅。
振幅=味精(1).Velocity / 127
幅值= 0.5039
合成一个正弦波,创建一个audioOscillator
系统对象™。玩你的电脑的声音默认的音频输出设备,创建一个audioDeviceWriter
系统对象。一步两秒,听注意的对象。
osc = audioOscillator (“频率”,频率,“振幅”、振幅);deviceWriter = audioDeviceWriter (“SampleRate”,osc.SampleRate);抽搐而toc < 2 synthesizedAudio = osc ();deviceWriter (synthesizedAudio);结束
合成MIDI消息
的数组midimsg
对象以适当的时机,创建一个循环。
首先,创建一个数组midimsg
对象和缓存的注意和注意了时间变量,eventTimes
。
公司= [midimsg (“注意”频道,64,0.5,0),…midimsg (“注意”、通道、62、64、0.5。)…midimsg (“注意”通道,57岁,40岁,0.5,1.5),…midimsg (“注意”通道,60岁,50岁,1,3)];eventTimes = [msgs.Timestamp];
实时模拟接收记录,创建一个for循环使用eventTimes
变量和抽搐
和toc
玩指出根据时间戳的MIDI消息。释放你的音频设备循环完成后。
i = 1;抽搐而toc <马克斯(eventTimes)如果toc > eventTimes(我)味精=公司(我);我=我+ 1;如果味精。速度~ osc = 0。频率= 440 * 2 ^ ((msg.note - 69) / 12);osc。振幅= msg.Velocity / 127;其他的osc。幅值= 0;结束结束deviceWriter (osc ());结束发行版(deviceWriter)
从MIDI设备综合实时报告消息
实时接收和合成注意消息,MIDI设备创建一个接口。的simplesynth
示例函数:
从指定的MIDI设备接收MIDI注意消息
综合一个音频信号
玩到你实时音频输出设备
保存simplesynth
函数当前文件夹。
为你的设备名称,查询您的系统使用mididevinfo
。听你选择设备,调用simplesynth
功能的设备名称。这个例子使用一个M-Audio KeyRig 25设备,注册设备名称USB 02
在本例中使用的机器上。
mididevinfo
MIDI设备可用:接口名称标识方向0输出MMSystem微软MIDI Mapper的1输入MMSystem的USB MIDI接口2输入MMSystem USB O2的3输出MMSystem微软GS波表Synth的4输出MMSystem的USB MIDI接口5输出MMSystem USB O2的
调用simplesynth
功能和你的设备名称。的simplesynth
函数监听注意消息和发挥他们默认的音频输出设备。笔记你MIDI设备和听音频合成。
simplesynth (“USB 02”)
使用ctrl - c
结束连接。