音频应用

 找回密码
 快速注册

QQ登录

只需一步,快速开始

搜索
查看: 1190|回复: 2

[键盘] Arduino模拟MIDI键盘

[复制链接]

13

帖子

0

听众

414

积分

音频应用新手发布

Rank: 1

积分
414
发表于 2019-9-26 23:13:16 | 显示全部楼层 |阅读模式
今天介绍一种用Arduino模拟MIDI键盘的方法。在具体实现之前,我先介绍一下MIDI和MIDI键盘。+ F3 x$ B) H- nwww.audioapp.cn  audio app

- P  M5 t2 L* p& N# f) m! j  p4 s( Wwww.audioapp.cn  audio app

简介8 C) q6 \& F  L1 xwww.audioapp.cn  audio app

MIDI(Musical Instrument Digital Interface)中文是乐器数字接口,通过MIDI协议可以解决电声乐器之间的通信,MIDI也是一种广泛应用于编曲的音乐格式。
4 J$ T! X3 e9 z fa7819e3ca3105ad76b0afb42293517d.jpg
9 F$ L: w6 H$ n3 J/ f7 D- {1 cMIDI传输的不是声音信号,而是一些指令,比如音色、音量、通道以及一些其他的参数,合成器接收到这些指令后会根据这些指令合成声音。MIDI规定了16个轨道,也表示MIDI支持16个轨道同时发声。MIDI键盘可以通过MIDI接口发出MIDI指令,但有些MIDI键盘需要外接电脑或合成器才能发出声音。通过MIDI协议我们就可以用一个键盘模拟多种乐器的音色。; J6 @4 e0 B# J% f8 Z# k& R  g) ~www.audioapp.cn  audio app


) v8 [" d: t& P# eMIDI指令' j( N& c! C' cwww.audioapp.cn  audio app

MIDI指令需要遵循MIDI协议,具体的内容可以去查阅《MIDI 1.0版的细节规定》,我在这里只是简单介绍一下用到的部分。一条MIDI指令通常由三个字节构成,第一个字节为状态字节,第二第三字节为数据字节,我们要做的MIDI键盘实际就是给电脑或合成器发送这三个字节的设备。那就必须要讲一下这三个字节的格式。
9 q* C* w% k* u% M4 q9 \2 f首先是状态字节的格式,状态字节的8个位可以分为3部分,最高位是状态识别位,这一位为1说明这1字节为状态位。第6、5、4这3位用于表示命令,第3、2、1、0这4位用于MIDI协议中16个轨道的选择。6 y& W. X5 x3 ?www.audioapp.cn  audio app


( o* M* H% J; M, f5 f5 K上表列举了一些状态字节的格式,可以跟据这个表编写状态字节,例如1001 0000就表示第1轨道开始演奏。
; D" M/ y* Y9 s* A6 }" u$ K7 c& x数据字节的8个位可以分为两部分,同样最高位用于状态识别,当最高位为0说明这是数据字节。剩余的7位是资料位,共可以表示128个数值。这128个数值可以用来表示音调或者按键力度或者其他数据。
( |) a% L2 J/ `' p. T当表示音调时可以查看文章后面附带的MIDI音符代码表。
% L( c# t' G6 P- k9 ?之前讲过一条MIDI指令是由一个状态字节和两个数据字节组成的,状态字节的几种格式我在之前已经给出对照表了,对于数据字节目前只知道能表示128个数,但是具体后面跟着的两个数据字节应该表示什么还需要看第一个状态字节表示什么功能。& g1 R  N( b8 w9 ]www.audioapp.cn  audio app

上面的功能表列出来了8种功能,在这里我只说一下其中两种的格式,剩余的大家可以自行查阅MIDI指令状态位与数据位的关系了解一下。Note Off为停止发音,后面跟的两个数据位依次表示音调和音量。Note On为开始发音,后面两位数据位依次为音调和音量。
( c1 k; _  |" {7 `4 t9 T 5ce626d5854f0fa8a019c0891fe39ccf.png 5 B4 `8 K1 D9 v/ _- ^7 Jwww.audioapp.cn  audio app

具体实现
) B9 e" ~5 ]# S( J% _: N通过上面的简单介绍我们已经知道了应该向电脑发送什么数据了,接下来就应该考虑如何将数据从Arduino发送到电脑。
' k6 A& N; n( jMIDI设备一般带有MIDI接口和USB接口,但是由于我的电脑上没有MIDI接口,所以MIDI指令传输就依靠开发板自带的USB接口了。这里我用的开发板是Arduino UNO,这一块开发板上的USB接口应该是通过ATmega8U2或者ATmega16U2连接到主控芯片的,我们可以通过更换芯片里的固件,将开发版配置为一个HID MIDI设备。
! K9 h1 z( W* M* R5 @9 L. C但由于部分开发板生产厂家为节省成本,选择了CH340代替了这两块芯片,这种开发板是不能进行上述操作的,由于我目前的开发板上的芯片就是CH340的所以就要选择其他方法。
5 m3 G& }! Y- a2 |3 ^然后我选择通过两个软件让电脑将开发板识别为一个MIDI设备。首先我们需要安装一个名为loopMIDI的软件。
3 b+ K5 b5 ]! `" N9 i; r2 _- r0 N 29a0a7e27cd4076ce5f73ec7427048d8.png 9 V& E2 i' a) ^9 w% y  `/ s8 x" kwww.audioapp.cn  audio app

这个软件可以可以在电脑上创建一个MIDI端口,安装好后我们打开这个软件。
2 P) Z) l  M+ F- P0 s 482fad90700a1adae7d6a3c686befb3f.png
- j% U3 t) C1 B/ Y- o( F4 u点击界面左下角的“+”号,我们就可以创建一个MIDI端口了。
2 t* |9 E# v, m; T; h bdc502b0f33f44c854f7490f11ec9c44.png
" [3 f, O- g% N7 o# [7 \) {% c如图所示,我们已经创建了一个名为loopMIDI Port的MIDI接口。不过由于我的Arduino开发板上带的是CH340,所以我还需要将CH340传输过来的信号转换为符合MIDI协议的信号。我们可以通过Hairless MIDI这个软件实现这个转换。
; ?# \0 `1 l7 p/ a4 d d3c66f8e1d0221369cddfe72fe8ee787.png ) n6 }: E: [$ n9 r# ?& s: Zwww.audioapp.cn  audio app

这个软件可以前往GitHub下载。
2 k* D: z+ w9 `, \$ B  p安装好这两个软件后就可以开始编写Arduino的程序了。Arduino程序的编写就很简单了,我们只需要开启串口通信,然后把我们需要的三个字节的MIDI命令发送出去就可以了。
/ L* U+ @2 r3 I
: s: G6 Z, _. I7 }# Z+ i9 ]例如这段程序就是发送MIDI指令的一个例子,这条指令的意思就是第一个轨道发B音调。程序写好后我们就要测试一下电脑能否成功接收我们发送的MIDI指令。首先我们打开loopMIDI开启我们虚拟的MIDI端口,然后再打开Hairless MIDI这个软件。
% t* ~/ Y9 s* s; @4 y 886bb47b359709120ce4968a8ccbad95.png 3 Y& ]2 o, C5 b/ {% n/ R# Owww.audioapp.cn  audio app

在Serial port这一栏我们选择开发板的端口号,在MIDI Out这一栏我们选择由loopMIDI创建的MIDI端口。选择好后我们再勾选Serial<—>MIDI Bridge On和Debug MIDI messages这两个选项,我们就可以接收Arduino发来的消息了。
$ L" \7 u, m& Y 8fa849e2f5e277c7f943dd32a273b469.png
" ?& w, W0 e& l7 _& |2 \% R: R如上图所示,我们就成功接收到了Arduino发送来的MIDI指令。我们可以给Arduino外接一个矩阵键盘,并给每个按键设置一条MIDI指令,当按下按键后就发送指令。2 f- W8 n% O0 f0 X( Zwww.audioapp.cn  audio app

最后我们需要安装一个音乐软件来合成声音。可以选择的音乐软件有很多,这里我选择的是EOPmidi这个软件。. _+ a- {6 {1 x9 Uwww.audioapp.cn  audio app

51b913cfd408ff9fbd61ad55f451f1dc.png
; a' `- C* L8 ^这个软件可以模拟钢琴的音色,操作也比较简单,我们也可以选择其他更全面的音乐软件比如FL Studio等等。
  S; ^6 `4 \- B6 C我们首先打开EOPmidi,它的界面是一个键盘的形状。
9 j5 N8 M! `9 R1 e/ T( p* r; ~! b. k( U8 S- [' n! vwww.audioapp.cn  audio app

我们首先要开启loopMIDI和Hairless MIDI这两个软件将Arduino模拟为一个MIDI键盘。然后点击EOPmidi界面右上角的倒三角标志,点击选项。在设置界面我们就可以看到我们模拟的MIDI键盘了。
$ D+ l- k/ ?+ Q& x% f, D aea02fb8c56739a007c3ac29edfa9b5f.png
, F5 v5 u$ b4 m; V7 ]2 F, ~  l将右边的OFF开关打开后就连接上我们的MIDI键盘了。
0 Y# j: C2 Y6 u- P e0103e0e86f8ee99a577658201c290c8.png 6 j, J7 u. X$ o" X, D0 p' m* rwww.audioapp.cn  audio app

开启后关闭设置界面,现在当我们按下设置好的按键后,电脑就会发出对应的音调了。MIDI键盘的制作到这里就完成了。, S/ P1 u- T& R( S; Hwww.audioapp.cn  audio app

7 B: i- [, g% I/ e- e+ ^www.audioapp.cn  audio app

6639e0df083b7e55245da14b06216334.png
$ j6 u6 K; P( Z; L 10fabcd7949c73eb9c7688d08f17b2a0.png
0 n% p% \) g) }3 s# ?' Y2 X
音频应用 Audio app

13

帖子

0

听众

414

积分

音频应用新手发布

Rank: 1

积分
414
 楼主| 发表于 2019-9-26 23:19:51 | 显示全部楼层
MIDI音符代码表
6 M/ t* v* u8 i; L2 ~- I编号 二进制音符代码 十六进制音符代码 所在的音阶 音调4 \0 Q' }; e% z( Q/ n1 Zwww.audioapp.cn  audio app

0 0000000 00 -1 C# _% U0 N$ n" l9 x: {+ w& mwww.audioapp.cn  audio app

1 0000001 01 -1 C#6 i7 n- w! s1 w' t+ ~5 C& zwww.audioapp.cn  audio app

2 0000010 02 -1 D
: O9 l) V' Q3 D9 G# P3 0000011 03 -1 D#
8 n  q7 s4 y; V8 l6 Y4 0000100 04 -1 E
6 \! K' C! c2 M6 O2 b5 0000101 05 -1 F
! l( n: d  S" E4 a( X2 F# @* p4 ]6 0000110 06 -1 F#
$ N( c7 `1 u2 I, |: X7 0000111 07 -1 G$ n2 F! x# S6 ?) U2 P2 F' o  Vwww.audioapp.cn  audio app

8 0001000 08 -1 G#" e0 P! E( [( Vwww.audioapp.cn  audio app

9 0001001 09 -1 A, z5 n3 X" a/ a- V6 xwww.audioapp.cn  audio app

10 0001010 0A -1 A#
  P/ J) H  F8 @11 0001011 0B -1 B# O9 }0 ^$ t; o6 N8 O$ w2 Hwww.audioapp.cn  audio app

12 0001100 0C 0 C
0 v$ C% C) y, f2 b$ _. b! ?13 0001101 0D 0 C#8 C$ N3 h- Z- A4 O" Wwww.audioapp.cn  audio app

14 0001110 0E 0 D
. y! @; j8 {& N# S# X6 R8 i7 l15 0001111 0F 0 D#
" d$ I* n$ T% K$ F- h/ [( x1 ], w2 }16 0010000 10 0 E7 J( K( F4 L4 h. Fwww.audioapp.cn  audio app

17 0010001 11 0 F
+ h; g2 \8 Q" X. N* F18 0010010 12 0 F#  g2 Y: ]  b5 B  T7 M1 j3 Z0 Ewww.audioapp.cn  audio app

19 0010011 13 0 G
, e) C. Z$ t5 l$ k7 o/ z20 0010100 14 0 G#  W. x. C% [  Z1 D8 F5 ]0 P5 {www.audioapp.cn  audio app

21 0010101 15 0 A
. N" x9 A  n  ~+ v* |3 H& Y22 0010110 16 0 A#7 J* ?# ^  M: rwww.audioapp.cn  audio app

23 0010111 17 0 B
, F$ L: t! e7 C8 o  C24 0011000 18 1 C/ {/ Z2 v8 `, _0 j, c* f+ ]# kwww.audioapp.cn  audio app

25 0011001 19 1 C#
: |! N6 L3 d, J26 0011010 1A 1 D
" O- o9 I3 Z7 {( ^27 0011011 1B 1 D#
' O& q# g  n/ g  y  r8 {% _28 0011100 1C 1 E: \$ h2 \5 S- G: Z) a5 b, Gwww.audioapp.cn  audio app

29 0011101 1D 1 F
9 u. T6 }  M+ F30 0011110 1E 1 F#
& |' x* U7 a. y* ]6 Z$ g* S31 0011111 1F 1 G, d* \4 N: [" |8 I  Swww.audioapp.cn  audio app

32 0100000 20 1 G#
+ B! T, l! ~0 K) p$ A, B33 0100001 21 1 A& \7 K. k1 J# k5 T5 e9 ?+ ]9 Qwww.audioapp.cn  audio app

34 0100010 22 1 A#
0 [( Q% u3 E- `" T9 ~; P# m) E35 0100011 23 1 B
% \6 h: [4 x4 v$ \+ P36 0100100 24 2 C
+ c! s) m' H; N% B( `37 0100101 25 2 C#7 h" A/ R5 y- V3 f6 pwww.audioapp.cn  audio app

38 0100110 26 2 D! F6 T# `1 R  S- g; w( y: M0 Iwww.audioapp.cn  audio app

39 0100111 27 2 D#- w, \3 s2 k' d3 R' b" [www.audioapp.cn  audio app

40 0101000 28 2 E
3 i! z% t) A+ r2 H7 t7 O41 0101001 29 2 F9 e  Y- v8 t+ p, j9 L, A  T. [7 c. Nwww.audioapp.cn  audio app

42 0101010 2A 2 F#- d3 h: y0 q8 U9 awww.audioapp.cn  audio app

43 0101011 2B 2 G
0 V2 T+ X" c0 l" ^& s44 0101100 2C 2 G#
1 Q; u( a# r, u: _9 j) T$ m45 0101101 2D 2 A
( O2 w+ o; F; ?; U4 K; ]( H46 0101110 2E 2 A#
$ v6 X) s4 @! N47 0101111 2F 2 B+ Q+ Y0 d  [  D/ V1 \2 j( swww.audioapp.cn  audio app

48 0110000 30 3 C4 y; s1 Y8 @2 o/ y; j! Hwww.audioapp.cn  audio app

49 0110001 31 3 C#$ l) {8 _9 i- l; Q: `4 t& z4 s8 ywww.audioapp.cn  audio app

50 0110010 32 3 D
3 J: `9 ?/ f7 J5 L0 h- b& r1 r51 0110011 33 3 D#6 A0 @- k2 r& G# z0 Y% N- Q$ |3 e1 kwww.audioapp.cn  audio app

52 0110100 34 3 E
; w3 T& N5 B# N53 0110101 35 3 F  K+ G/ V' ]- U: D9 k0 twww.audioapp.cn  audio app

54 0110110 36 3 F#0 G/ a8 f8 x0 jwww.audioapp.cn  audio app

55 0110111 37 3 G
) g3 j6 p% U3 W4 ~56 0111000 38 3 G#/ O! E. @& r2 ^7 f. `& [1 a0 g2 awww.audioapp.cn  audio app

57 0111001 39 3 A
6 K5 M& H; o& H( z58 0111010 3A 3 A#! a* [4 W8 n- h% e% Dwww.audioapp.cn  audio app

59 0111011 3B 3 B* i- N. s1 }2 A3 a+ ~8 I) q& _www.audioapp.cn  audio app

60 0111100 3C 4 C2 J: P+ ?6 l4 e: a" r& vwww.audioapp.cn  audio app

61 0111101 3D 4 C#3 |3 J, d" W9 K% t. y1 Hwww.audioapp.cn  audio app

62 0111110 3E 4 D
6 q" n, d+ @- b1 Z63 0111111 3F 4 D#
! g' W( g. R' u64 1000000 40 4 E
; \) S; l7 S3 i3 p* R65 1000001 41 4 F
9 u) X8 F6 r$ {66 1000010 42 4 F#% ]4 i8 t+ y5 X3 ^5 l3 e# Owww.audioapp.cn  audio app

67 1000011 43 4 G- L( T; z3 u* Q8 G: S+ ]www.audioapp.cn  audio app

68 1000100 44 4 G#
& z) ?$ d. U$ Z5 F. G7 I69 1000101 45 4 A& t  V& m: \% B4 Y! Mwww.audioapp.cn  audio app

70 1000110 46 4 A#  q! ?+ ^# @! }! Zwww.audioapp.cn  audio app

71 1000111 47 4 B
5 d3 j3 R4 j7 z3 _, ]) Z$ S0 E+ K72 1001000 48 5 C; Y0 [) H" C! I" V' N, rwww.audioapp.cn  audio app

73 1001001 49 5 C#
' F' z5 ?/ J; f+ V( t74 1001010 4A 5 D
7 O4 d8 g$ ?5 ]+ A9 M' c75 1001011 4B 5 D#
+ I& s% d, i! F7 A/ G8 r9 V. |76 1001100 4C 5 E+ F2 h4 N7 `$ _! ]  Xwww.audioapp.cn  audio app

77 1001101 4D 5 F; v3 O: U0 v4 \6 f1 o" ewww.audioapp.cn  audio app

78 1001110 4E 5 F#4 _" O4 s3 d7 `www.audioapp.cn  audio app

79 1001111 4F 5 G( Z0 c7 J4 H8 W5 i2 r4 o7 iwww.audioapp.cn  audio app

80 1010000 50 5 G#
# @: O" h- H8 t2 e# \! y! _3 c81 1010001 51 5 A0 ]$ @/ a/ C, \9 G- d' D) Y- D7 Bwww.audioapp.cn  audio app

82 1010010 52 5 A#
) k  A, G' }/ g7 k' t83 1010011 53 5 B
5 ?8 s% B3 G5 O$ T& ~# X& {84 1010100 54 6 C
8 w$ E" w* _/ V4 V& F# f9 L5 L! t85 1010101 55 6 C#* \2 k$ h; D! ~* y) ]* Swww.audioapp.cn  audio app

86 1010110 56 6 D! g6 @: m+ e6 v3 |8 E" e2 T+ I& wwww.audioapp.cn  audio app

87 1010111 57 6 D#
) S7 `  H4 F) p/ \3 X88 1011000 58 6 E1 u* ^1 L! {* @! O; E8 cwww.audioapp.cn  audio app

89 1011001 59 6 F
" H' ?5 z: o) s0 X/ j90 1011010 5A 6 F#
& }7 I4 I0 X' J- M: Y91 1011011 5B 6 G" u& [' f$ N8 x$ Nwww.audioapp.cn  audio app

92 1011100 5C 6 G#
4 ?) Y6 I: N: F7 L, \93 1011101 5D 6 A
& {# N  E& F0 P# G& h94 1011110 5E 6 A#0 S4 P9 ?5 N/ O- c2 M  cwww.audioapp.cn  audio app

95 1011111 5F 6 B
: B5 c0 j/ z- D6 U# q! ?96 1100000 60 7 C
) H+ W1 Z9 t+ R97 1100001 61 7 C#
) l  F' z# a# z1 T, H98 1100010 62 7 D
4 W6 E9 o, f4 u- C  D+ p99 1100011 63 7 D#
3 G" k8 e6 q4 D3 G( e. k% p; J100 1100100 64 7 E
& p! ^7 h8 {4 I101 1100101 65 7 F2 ^; K7 D: F* ?' z' ^6 Y0 zwww.audioapp.cn  audio app

102 1100110 66 7 F#2 o" I0 E5 D* A$ i% R3 r9 nwww.audioapp.cn  audio app

103 1100111 67 7 G
! b8 B5 s0 }: {$ F104 1101000 68 7 G#
; g1 M( Y: s. K) [* f, ]0 O1 A% C, _105 1101001 69 7 A
# _# Y0 Y. Z6 ]2 B5 {106 1101010 6A 7 A#$ D* V: Q$ F  P" y' ~4 `8 I2 owww.audioapp.cn  audio app

107 1101011 6B 7 B
; a7 h6 n  o/ ]' [- M/ p" \108 1101100 6C 8 C
1 s* k0 L9 g: T5 T& j/ v) C0 f109 1101101 6D 8 C#
& }2 ~/ U! l- i  r: a; G110 1101110 6E 8 D- l' A7 o& n# u/ d; }6 e: `www.audioapp.cn  audio app

111 1101111 6F 8 D#! _: C( }* h3 ?* _. mwww.audioapp.cn  audio app

112 1110000 70 8 E
2 j7 V: E* c4 a. C9 D' q! n* P7 P113 1110001 71 8 F* a3 t- Y3 ?9 d+ bwww.audioapp.cn  audio app

114 1110010 72 8 F#: B6 U5 w( x, \, Owww.audioapp.cn  audio app

115 1110011 73 8 G
/ ^9 d2 E$ u( t6 N/ C' D116 1110100 74 8 G#/ O' _! y0 o: _- R" L% Jwww.audioapp.cn  audio app

117 1110101 75 8 A
0 h' t- ~4 c, V% x! A# C4 x118 1110110 76 8 A#
/ K5 `0 q- T! Z8 |119 1110111 77 8 B
7 X6 V" c1 x- b9 }5 A$ y120 1111000 78 9 C
( }4 T3 J3 b, p; U121 1111001 79 9 C#: y, a5 k) X- nwww.audioapp.cn  audio app

122 1111010 7A 9 D+ Y' P6 W7 y# r% V3 x: A' owww.audioapp.cn  audio app

123 1111011 7B 9 D#, }' w! @3 k0 C2 C5 Kwww.audioapp.cn  audio app

124 1111100 7C 9 E+ [' [& R% d2 |! ]# R' \6 twww.audioapp.cn  audio app

125 1111101 7D 9 F! V3 S3 C. J/ V- Swww.audioapp.cn  audio app

126 1111110 7E 9 F#
( Q" V8 B7 Y: z: Y4 `/ ~127 1111111 7F 9 G
音频应用 Audio app
回复 支持 反对

使用道具 举报

180

帖子

2

听众

1763

积分

音频应用新手发布

Rank: 1

积分
1763
发表于 2019-9-27 19:23:21 来自手机音频应用 | 显示全部楼层
分享,谢谢楼主
音频应用 Audio app
回复 支持 反对

使用道具 举报

高级模式 自动排版
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

QQ|小黑屋|手机版|Archiver|音频应用 ( 鄂ICP备16002437号-6)

Powered by Audio app

快速回复 返回顶部 返回列表