键盘钢琴发音原理
相信很多喜歡音樂的小伙伴都玩過一款軟件,叫做鍵盤鋼琴,這款軟件的確做得很棒,這時,可能有一些會開發的小伙伴就要想這個鍵盤鋼琴軟件是如何開發的呢?可以這么說,想要開發這款軟件需要對樂理有一定的了解,并且對MIDI要非常的熟悉,本篇文章,我們主要介紹一下這個鍵盤鋼琴的發音原理,如果我們要讓計算機發聲,那么我們需要使用midi設備,所以,我們需要選擇要打開的midi設備,然后向設備輸出消息,就可以讓計算機發出聲音,我們主要介紹發音原理,其它的功能,同學們感興趣可以去看MIDI消息格式。
MIDI發音主要使用了兩條命令,一個打開音符,一個是關閉音符,它們的命令如下:
打開音符和關閉音符都是3個字節,但是我們的程序只使用了打開音符,關閉音符和打開音符用法一樣,所以,我們就只演示了一種。
打開音符的命令格式:
1000 xxxx 0nnn nnnn 0ppp pppp
其中4位xxxx代表使用的通道號,除了10號通道,1-9,11-16,都可以使用,因為10號通道是打擊類樂器的通道,通道的編號從0開始,比如通道1對應的索引就是0。
音符一共有128個,也是從0開始,所以它的值是0-127,因此第2個字節的最高位是0。
第3個字節代表按鍵力度,也是從0-127。
音符表如下:
| C | C# | D | D# | E | F | F# | G | G# | A | A# | B | 
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 
| 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 
| 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 
| 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 
| 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 
| 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 
| 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 
| 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 
| 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 
| 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 
| 120 | 121 | 122 | 123 | 124 | 125 | 126 |   127  | 
現在舉個例子:
比如我們要讓midi設備發音,可以這么發送消息:
01000000 00111100 10010000
這里一共有3個字節,這里第一個字節代表力度,第二個字節代表音符,第3個字節代表打開音符,并且使用第一個通道輸出。
這里的表示形式和midi消息的格式順序正好相反,這里一定要注意,否則你寫的代碼沒有辦法發音,對應代碼如下:
midiOutShortMsg(m_hMusic, 0x00403C90);這里的0x00403C90就是上面的3字節的十六進制表示。
至于打開設備,關閉設備,查詢設備,同學們可以自己看代碼,因為很簡單,所以不介紹了。
程序運行界面如下:
選擇一個設備,打開,然后點擊1-7可以發音,不用了可以關閉。
喜歡的小伙伴可以從這里下載
https://download.csdn.net/download/u011711997/13106889
總結
                            
                        - 上一篇: HC_SR04超声波模块的应用
 - 下一篇: 分享一款非常好用的免费画图软件