不要声明为MidiOutPort 类型

时间:2021-09-30 06:57:57

在上一篇中,老周介绍了一些乐理常识,有了那些知识后,进行 MIDI 编程就简单得多了。尽管微软已经把 API 封装好,用起来也很简单,但是,如果你没有相应的音乐常识根本,你是无法进行 MIDI 编程的。

这一篇老周将给你讲述一下如何让你的声卡播放一个音符,这会包罗两条动静,而且这两条动静是很常用的。

1、Note On:让 MIDI 设备(如果没有专业设备,那就是你的声卡)发出某个音符的声音,好比,发出中音 3 的声音。注意啊,Note on 一旦发送,设备会一直播放这个声音,要想遏制播放一个音符,你就要用到下面这条动静,它们是天生的一对。

2、Note Off:*某个音符,即遏制播放某个音符。

咱们先来了解三个很重要的类,跟 MIDI 设备通信相关的 API 都在 Windows.Devices.Midi 定名空间下,封装好的。

1、MidiInPort:用来从 MIDI 输入设备接收动静,所以它果然了一个 MessageReceived 事件,只要 MIDI 输入设备发送了动静,就会引发这个事件,这时候你可以措置惩罚惩罚这个事件,把收到的动静再传到声卡长进行播放。MIDI 输入设备一般是 MIDI 键盘,预计大部分人用不上这个类,因为一般人不会采办 MIDI 键盘。真想买个好用的,起码是 88 键的,价格还是不低的。

2、MidiOutPort:连接 MIDI 输出设备,可以播放 MIDI 音乐。如果没有专业的 MIDI 音响,就可以连到你的声卡上,内置外置都可以,市面上有外置的 MIDI 声卡卖,固然了,想省钱的话,你是买不到好音色的,,要是你不在乎音色的话,那无所谓。

3、MidiSynthesizer:这个类非常好使,它其实类似于 MidiOutPort 类,但它可以自动选择默认的设备(固然也可选择设备)。这个类是专门针对 MIDI 合成而设计的,尽管它与 MidiOutPort 相似,但偏重点差别。MidiOutPort 偏重于与 MIDI 设备的通信,而 MidiSynthesizer 类是偏重于合成。

我们在进行电辅音乐合成的时候,只需要使用 MidiSynthesizer 类即可,它没有结构函数,可以挪用 CreateAsync 静态要领来获取实例。对付普通设备而言,我们挪用无参数的重载版本就行了,应用措施会默认选择声卡作为输出设备。然后,我们尽管发送 MIDI 动静就OK。当不再使用 MidiSynthesizer 实例时,应该把它 Dispose 失,以释放资源占用。

是不是很简单呢,一切都是封装好的,所以说,你只要有必然的乐理根本就可以轻松玩耍这些 API。据说,这个 MidiSynthesizer 类还包罗了罗兰公司(Roland)的通用音色库。

固然了,这只能是通用的 128 种乐器的声音,不包罗各类吹奏技巧(如揉弦、波音、颤音等)。其目的是尽可能地兼容种种声卡,包孕很烂的声卡,虽然对照普通,不过嘛,音色听着还是可以的,只是少了点觉得。不过也是,电声终究是虚假的乐音,而不是自然音,就算是专业级另外音源,其实听着也不会太有乐感的。所以嘛,真想感应熏染音乐之美,还是买个真实的乐器本身去吹奏。老周小时候喜欢口琴和笛子,上初中的时候,学了一点电子琴、口风琴和扬琴,不过只是学了一点点而已。上高中的三年根基没碰过乐器。大学的时候,在学生会里面鬼混,所以经常可以拿乐队的吉他拨两下。

后来,像洞箫、巴乌、葫芦丝、陶埙、陶笛等都学过。想学学古琴,但是买一把好琴对照贵,就没有去学了。演奏类乐器一般对照自制,至少像老周这种穷人还能买得起,因此老周家里放的乐器,大都是演奏类的。击打类的有一对小铜鼓,在路边捡的。

好,不扯了,咱们说正题。本篇的重点是学会两条 MIDI 动静,对,就是上面说的 Note on 和 Note off。不管是 on 还是 off,这两条音符动静的格局是一样的,都是包罗三个字节。

第一个字节是 【状态码 + 通道编号】,这个可能你不太理解,没事,老周待会儿再解释。

第二个字节是音符,对,就是上一篇中,简谱上面的 1234567,唱出来就是 dol re mi fa sol la xi,用一个字节暗示,从 0 - 127,共128 个音符。

第三个字节是音速,值也是从 0 到 127。这个音速其实你觉得不到什么,发送到声卡上的效果就是音量。值越小声音越小,如果是 0 就即是静音了,127 时声音最大。

好,下面逐个解释两下。

首先,状态码,在前一篇中,老周简单地说了一下 MIDI 文件的布局,一个 MIDI 事件是由 delta-time 和事件主体构成。而一个事件的开头都有一个标识表记标帜字节。在MIDI文件中, Note on 和 Note off 都是一个事件;而在实时通信中,可认为是一条 MIDI 动静,其实布局是一样的。