MIDIコマンド

目 次

  1. MIDI関数を使用したExcel VBAの例
  2. MIDIについて
  3. ノート・メッセージ
  4. プログラムチェンジ
  5. システムエクスクルーシブメッセージ
  6. バンクセレクト
  7. モジュレーション
  8. ポルタメント・タイム
  9. ポルタメント
  10. パンポット(パン)
  11. ボリューム
  12. エクスプレッション
  13. チャネルプレッシャー
    (チャネルアフタータッチ)
  14. ポリフォニック・キー・プレッシャー
    (キーアフタータッチ)
  15. ホールドペダル
  16. ソステヌート
  17. ソフト
  18. レガート
  19. ピッチベンド
  20. オール・サウンド・オフ
  21. リセット・オール・コントローラー
  22. オール・ノート・オフ
  23. データエントリー
  24. NRPN MSB/LSB
  25. RPN MSB/LSB
  26. MIDIファイルの作成
  27. 音声合成
  28. 無効なMIDIメッセージ集(※MSGS・Excel VBA使用)
  29. リンク・参考文献

MIDI関数を使用したExcel VBAの例

ゆっくり亭「【VBAでmidi】エクセルでピアノを弾く【ゆっくり解説】」2023/01/31
https://www.nicovideo.jp/watch/sm41728265

Dylan Tallchief, "I made an actual Drum Machine in Excel", 2019/11/04.
https://www.youtube.com/watch?v=To2JIXGoYzA

Kaburanet「Excel VBAでピアノを作って遊んでみた2」2021/3/6.
https://www.nicovideo.jp/watch/sm38378175

MIDIについて

MIDIは、Musical Instrument Digital Interface の頭文字で演奏情報を伝達するための規格

ノート・メッセージ
Note Message

Excel_VBA_MIDI_Note On & Note Off(【耳コピ】ロンドン橋)

https://www.nicovideo.jp/watch/sm44961028

ノート・メッセージは、「どの鍵盤」を、「どれくらいの強さ」で、「どれくらい押さえた」か、という情報を持っていて、メッセージを受信した「音源」がその情報をもとに演奏を再現します。


  1. ノート・ナンバー (Note Number)
  2. 弾いた鍵を表す番号

  3. ベロシティー (Velocity)
  4. 鍵を押さえる速さ(強さ)を伝えるメッセージ

  5. ノート・オン (Note On)
  6. 鍵を押さえたことを伝えるメッセージ

    thirdsecondstatus
    vvHkkH9nH
    • n = MIDI Channel number:
      0H - FH (0 - 15)
    • kk = Note Number:
      00H - 7FH (0 - 127)
    • vv = Velocity:
      00H - 7FH (0 - 127)

                                        
                                        「ノート・オンのコード」
                                        
                                    
  7. ノート・オフ (Note Off)
  8. 鍵から指を離したことを伝えるメッセージ

    thirdsecondstatus
    vvHkkH8nH
    00HkkH9nH
    • n = MIDI Channel number:
      0H - FH (0 - 15)
    • kk = Note Number:
      00H - 7FH (0 - 127)
    • vv = Velocity:
      00H - 7FH (0 - 127)

    ※ノート・オフのとき、Velocityの数値は何でも良い。


                                        
                                        「ノート・オフのコード」
                                        
                                    

プログラムチェンジ
Program Change

secondstatus
ppHCnH
  • n = MIDI Channel number:
    0H - FH (0 - 15)
  • pp = program Number:
    00H - 7FH (0 - 127)

                            
                            「プログラムチェンジのコード」
                            
                        

システムエクスクルーシブメッセージ
System Exclusive Message

ByteDescription
F0HSystem exclusive
41HManufacturer ID (Roland)
DEVDevice ID
MDLModel ID
CMDCommand ID
[BODY]Main data
F7HEOX (End of exclusive)

  1. GSリセット」F0, 41, 10, 42, 12, 40, 00, 7F, 00, 41, F7
    GSリセットをすることで、鳴らせる楽器、打楽器が増えて、いろいろできます!
  2. リズムパートの指定」F0, 41, 10, 42, 12, 40, 1A, 15, 02, 0F, F7
    → AChがリズムパート(Map2)になる
    ※詳しくは、https://www.nicovideo.jp/watch/sm44968869
                        
                        Dim Execlusive() As Byte    'エクスクルーシブ・メッセージを格納する変数

                        Type MIDIHDR
                        lpData As Long
                        dwBufferLength As Long
                        dwBytesRecorded As Long
                        dwUser As Long
                        dwFlags As Long
                        lpNext As Long
                        Reserved As Long
                        dwOffset As Long
                        Rev(3) As Long
                        End Type
                        Dim MIDI_HDR As MIDIHDR
                        
                        #If Win64 Then
                            'MIDI API
                            Private Declare PtrSafe Function midiOutGetNumDevs Lib "winmm" () As Integer
                            Private Declare PtrSafe Function midiOutOpen Lib "winmm.dll" (lphMidiOut As LongPtr, ByVal uDeviceID As Long, ByVal dwCallback As LongPtr, ByVal dwInstance As LongPtr, ByVal dwFlags As Long) As Long
                            Private Declare PtrSafe Function midiOutShortMsg Lib "winmm.dll" (ByVal hMidiOut As LongPtr, ByVal dwMsg As Long) As Long
                            Private Declare PtrSafe Function midiOutLongMsg Lib "winmm.dll" (ByVal hMidiOut As Long, lpMidiOutHdr As MIDIHDR, ByVal uSize As Long) As Long
                            Private Declare PtrSafe Function midiOutClose Lib "winmm.dll" (ByVal hMidiOut As LongPtr) As Long
                            Private Declare PtrSafe Function midiOutPrepareHeader Lib "winmm.dll" (ByVal hMidiOut As Long, lpMidiOutHdr As MIDIHDR, ByVal uSize As Long) As Long
                            Private Declare PtrSafe Function midiOutUnprepareHeader Lib "winmm.dll" (ByVal hMidiOut As Long, lpMidiOutHdr As MIDIHDR, ByVal uSize As Long) As Long
                            Dim Handle As LongPtr
    
                            'Sleep API
                            Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)
                        #Else
                            'MIDI API
                            Private Declare Function midiOutGetNumDevs Lib "winmm" () As Integer 'midiデバイスの取得
                            Private Declare Function midiOutOpen Lib "winmm.dll" (lphMidiOut As Long, ByVal uDeviceID As Long, ByVal dwCallback As Long, ByVal dwInstance As Long, ByVal dwFlags As Long) As Long '開く
                            Private Declare Function midiOutShortMsg Lib "winmm.dll" (ByVal hMidiOut As Long, ByVal dwMsg As Long) As Long 'メッセージを送る
                            Private Declare Function midiOutLongMsg Lib "winmm.dll" (ByVal hMidiOut As Long, lpMidiOutHdr As MIDIHDR, ByVal uSize As Long) As Long
                            Private Declare Function midiOutClose Lib "winmm.dll" (ByVal hMidiOut As Long) As Long '閉じる
                            Private Declare Function midiOutPrepareHeader Lib "winmm.dll" (ByVal hMidiOut As Long, lpMidiOutHdr As MIDIHDR, ByVal uSize As Long) As Long
                            Private Declare Function midiOutUnprepareHeader Lib "winmm.dll" (ByVal hMidiOut As Long, lpMidiOutHdr As MIDIHDR, ByVal uSize As Long) As Long
                            Dim Handle As Long
    
                            'Sleep API
                            Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
                        #End If
                        
                        '-------- 中 略 ----------
                        
                        '「GSリセット」の場合は、
                        '「F0, 41, 10, 42, 12, 40, 00, 7F, 00, 41, F7」を下記のように入力
                        ReDim Execlusive(10)
                        Execlusive(0) = &HF0
                        Execlusive(1) = &H41
                        Execlusive(2) = &H10
                        Execlusive(3) = &H42
                        Execlusive(4) = &H12
                        Execlusive(5) = &H40
                        Execlusive(6) = &H0
                        Execlusive(7) = &H7F
                        Execlusive(8) = &H0
                        Execlusive(9) = &H41
                        Execlusive(10) = &HF7
    
                        With MIDI_HDR
                            .lpData = VarPtr(Execlusive(0))
                            .dwBufferLength = UBound(Execlusive) + 1
                            .dwBytesRecorded = 0
                            .dwUser = 0
                            .lpNext = 0
                            .dwFlags = 0
                        End With
                        
                        '出力のために、MIDI システム排他バッファまたはストリームバッファを準備する
                        Call midiOutPrepareHeader(Handle, MIDI_HDR, LenB(MIDI_HDR))
                        '指定された MIDI 出力デバイスにシステム排他 MIDI メッセージを送信する。
                        '(MIDI 出力デバイスのハンドル,MIDIHDR 構造体のアドレス,MIDIHDR 構造体のサイズをバイト単位で指定)
                        Call midiOutLongMsg(Handle, MIDI_HDR, LenB(MIDI_HDR)) 
                        'デバイスドライバがバッファでの作業を完了するまで待つ
                        DoEvents
                        'midiOutPrepareHeader 関数を使って行なった準備をクリーンアップする。
                        Call midiOutUnprepareHeader(Handle, MIDI_HDR, LenB(MIDI_HDR)) 
                        
                    
                        
                        'エクスクルーシブ・メッセージをセルにF04110421240007F0041F7,F041104212401A15020FF7のように打ち込む場合
                        Dim Original_Exclusive As String    'SystemExclusiveMessageを格納する変数を宣言
                        Original_Exclusive = Sheets("演奏").Cells(2, 43).Value  'セルからSystemExclusiveMessageを取得
                        arr_Exclusive = Split(Original_Exclusive, ",")          'カンマで分割して配列に格納
                        
                        For k = 0 To UBound(arr_Exclusive)
                            Len_Exclusive_Message = Len(arr_Exclusive(k)) / 2 - 1 '{(SystemExclusiveMessageの文字数÷2)-1}の計算
                            ReDim Execlusive(Len_Exclusive_Message)
                            For i = 0 To Len_Exclusive_Message
                                Execlusive(i) = "&H" & Mid(arr_Exclusive(k), (i + 1) * 2 - 1, 2)
                            Next i
                            With MIDI_HDR
                                .lpData = VarPtr(Execlusive(0))
                                .dwBufferLength = UBound(Execlusive) + 1
                                .dwBytesRecorded = 0
                                .dwUser = 0
                                .lpNext = 0
                                .dwFlags = 0
                            End With
                            Call midiOutPrepareHeader(Handle, MIDI_HDR, LenB(MIDI_HDR))
                            Call midiOutLongMsg(Handle, MIDI_HDR, LenB(MIDI_HDR)) 
                            DoEvents
                            Call midiOutUnprepareHeader(Handle, MIDI_HDR, LenB(MIDI_HDR)) 
                        Next k
                        
                    

Excel_VBA_MIDI_Kirby Super Star ~Aqualiss~

https://www.nicovideo.jp/watch/sm44376955

Excel_VBA_MIDI_System Exclusive Message_Use For Rhythm Part

https://www.nicovideo.jp/watch/sm44968869

バンクセレクト
Bank Select

Excel_VBA_MIDI_Bank Select and Program Change

https://www.nicovideo.jp/watch/sm44718954

thirdsecondstatus
BnH00HmmH
BnH20HLLH
  • n = MIDI Channel number:
    0H - FH (0 - 15)
  • mm, LL = Bank number:
    00 00H - 7F 7FH (0 - 16383)

※バンクセレクトLSBの「LL」の数値は無視され、「LL = 00H」となる。
 (XG、GM2ではmm, LLの数値の打ち込み方が異なる)
※バンクセレクトは、プログラムチェンジを受け取るまで保留される。


                            
                            「バンクセレクトMSB、バンクセレクトLSB➡プログラムチェンジのコード」
                            
                        

モジュレーション
Modulation

thirdsecondstatus
vvH01HBnH
  • n = MIDI Channel number:
    0H - FH (0 - 15)
  • vv = Modulation depth:
    00H - 7FH (0 - 127)

                            
                            「Modulation code」
                            
                        

ポルタメント・タイム
Portamento Time

thirdsecondstatus
vvH05HBnH
  • n = MIDI Channel number:
    0H - FH (0 - 15)
  • vv = Portamento Time:
    00H - 7FH (0 - 127)

                            
                            「Portamento Time code」
                            
                        

ポルタメント
Portamento

thirdsecondstatus
vvH41HBnH
  • n = MIDI Channel number:
    0H - FH (0 - 15)
  • vv = control value:
    00H - 3FH (0 - 63)[OFF]
    40H - 7FH (64 - 127)[ON]

                            
                            「Portamento code」
                            
                        

パンポット(パン)
Panpot

Excel_VBA_MIDI_Panpot

https://www.nicovideo.jp/watch/sm44741814

thirdsecondstatus
vvH0AHBnH
  • n = MIDI Channel number:
    0H - FH (0 - 15)
  • vv = Panpot:
    00H - 40H - 7FH
    (0 - 64 - 127)

※音の方向
 0:左、64:中央、127:右


                            
                            「panpot L63-0-R63」
                            
                        

ボリューム
Volume

Excel_VBA_MIDI_Volume

https://www.nicovideo.jp/watch/sm44766477
thirdsecondstatus
vvH07HBnH
  • n = MIDI Channel number:
    0H - FH (0 - 15)
  • vv = Volume:
    00H - 7FH (0 - 127)

パートの音量の変化
※Volume:絶対指定、発音中の変化には使用しない。
 Expression:相対指定、発音中の音量の変化に使用。

                            
                            「Volume code」
                            
                        

エクスプレッション
Expression

thirdsecondstatus
vvH0BHBnH
  • n = MIDI Channel number:
    0H - FH (0 - 15)
  • vv = Expression:
    00H - 7FH (0 - 127)

パートの音量の変化
※Volume:絶対指定、発音中の変化には使用しない。
 Expression:相対指定、発音中の音量の変化に使用。

                            
                            「expression code」
                            
                        

チャネルプレッシャー
(チャネルアフタータッチ)
Channel Pressure

secondstatus
vvHDnH
  • n = MIDI Channel number:
    0H - FH (0 - 15)
  • vv = Value:
    00H - 7FH (0 - 127)

鍵盤を弾いた後さらに押え込みその強さで発音中色々な変化を付ける(同チャンネル全てに影響)

                            
                            「チャネルプレッシャーのコード」
                            
                        

ポリフォニック・キー・プレッシャー
(キーアフタータッチ)
Polyphonic Key Pressure

thirdsecondstatus
vvHkkHAnH
  • n = MIDI Channel number:
    0H - FH (0 - 15)
  • kk = Note Number:
    00H - 7FH (0 - 127)
  • vv = Velocity:
    00H - 7FH (0 - 127)

鍵盤を弾いた後さらに押え込みその強さで発音中色々な変化を付ける(その音のみに影響)

                            
                            「ポリフォニック・キー・プレッシャーのコード」
                            
                        

ホールドペダル
Hold1

Excel_VBA_MIDI_Hold

https://www.nicovideo.jp/watch/sm44808327
thirdsecondstatus
vvH40HBnH
  • n = MIDI Channel number:
    0H - FH (0 - 15)
  • vv = control value:
    00H (0)[OFF]
    01H - 7FH (1 - 127)[ON]

ONにしている間、ノートオフを無効化する。※使い終わったらOFFにする。

                            
                            「Hold1 code」
                            
                        

ソステヌート
Sostenuto

thirdsecondstatus
vvH42HBnH
  • n = MIDI Channel number:
    0H - FH (0 - 15)
  • vv = control value:
    00H - 3FH (0 - 63)[OFF]
    40H - 7FH (64 - 127)[ON]

                            
                            「Sostenuto code」
                            
                        

ソフト
Soft

thirdsecondstatus
vvH43HBnH
  • n = MIDI Channel number:
    0H - FH (0 - 15)
  • vv = control value:
    00H - 3FH (0 - 63)[OFF]
    40H - 7FH (64 - 127)[ON]

                            
                            「Soft code」
                            
                        

レガート
Legato Control (LGC)

thirdsecondstatus
kkH54HBnH
  • n = MIDI Channel number:
    0H - FH (0 - 15)
  • kk = Legato source key number:
    00H - 7FH (0 - 127)

MIDI
メッセージ
内容結果
403C90
3C54B0
404090
403C80
404080
Note on C4
LGC from C4
Note on E4
Note off C4
Note off E4
C4 on
no Change
re-tuning from C4 to E4
no Change
E4 off

                            
                            「Legato Control code」
                            
                        

ピッチベンド
Pitch Bend

Excel_VBA_MIDI_Pitch Bend

https://www.nicovideo.jp/watch/sm44654720

thirdsecondstatus
mmHLLHEnH
  • n = MIDI Channel number:
    0H - FH (0 - 15)
  • mm,LL = value:
    00H,00H ~ 40H,00H ~ 7FH,7FH
    (-8192 ~ 0 ~ +8191)

                            
                            'The pitch bend is often used to create vibrato effects and to emulate the sound of a violin or the bending strings on an electric guitar.
                            
                        

オール・サウンド・オフ
All Sounds Off

Excel_VBA_MIDI_All Sounds Off

https://www.nicovideo.jp/watch/sm44896288
thirdsecondstatus
00H78HBnH
  • n = MIDI Channel number:
    0H - FH (0 - 15)
  • オールサウンドオフは、任意のチャネルの音をオフにする。
    ただし、ノート・オンやホールドペダルは維持される。

                            
                            「オール・サウンド・オフ」
                            
                        

リセット・オール・コントローラー
Reset All Controllers

Excel_VBA_MIDI_Reset All Controllers ⇔ Pitch Bend

https://www.nicovideo.jp/watch/sm44907812
thirdsecondstatus
00H79HBnH
  • n = MIDI Channel number:
    0H - FH (0 - 15)
  • リセット・オール・コントローラーは、
    ピッチベンドやエクスプレッション等を初期値に戻す。

                            
                            「リセット・オール・コントローラー」
                            
                        

オール・ノート・オフ
All Notes Off

Excel_VBA_MIDI_All Notes Off

https://www.nicovideo.jp/watch/sm44901561
thirdsecondstatus
00H7BHBnH
  • n = MIDI Channel number:
    0H - FH (0 - 15)
  • オールノートオフは、任意のチャネルのノートをオフにする。
    ただし、ホールドペダル及びソステヌートは維持される。

                            
                            「オール・ノート・オフ」のコード
                            
                        

データエントリー
Data Entry

thirdsecondstatus
mmH06HBnH
LLH26HBnH
  • n = MIDI Channel number:
    0H - FH (0 - 15)
  • mm = Value of the parameter specified
       with RPN and/or NRPN (MSB)
  • LL = Value of the parameter specified
       with RPN and/or NRPN (LSB)

NRPN MSB/LSB
(Non Registerd Parameter Number)

thirdsecondstatus
mmH63HBnH
LLH62HBnH
  • n = MIDI Channel number:
    0H - FH (0 - 15)
  • mm = NRPN MSB
  • LL = NRPN LSB

※① NRPN MSB/LSBを設定
 ② Data Entryを送る


NRPN
MSB, LSB
Data Entry
MSB
01H, 08H

Vibrate rate

  • mm = 0EH~40H~72H (-50~0~+50)
01H, 09H

Vibrate depth

  • mm = 0EH~40H~72H (-50~0~+50)
01H, 0AH

Vibrate delay

  • mm = 0EH~40H~72H (-50~0~+50)
01H, 20H

TVF cutoff frequency

  • mm = 0EH~40H~72H (-50~0~+50)
01H, 21H

TVF resonance

  • mm = 0EH~40H~72H (-50~0~+50)
01H, 63H

TVF&TVA Env. Attack time

  • mm = 0EH~40H~72H (-50~0~+50)
01H, 64H

TVF&TVA Env. Decay time

  • mm = 0EH~40H~72H (-50~0~+50)
01H, 66H

TVF&TVA Env. Release time

  • mm = 0EH~40H~72H (-50~0~+50)
18H, rrH

Pitch coarse of drum instrument

  • rr = key number of drum instrument
  • mm = 00H~40H~7FH (-64~0~+63 semitone)
1AH, rrH

Pitch coarse of drum instrument

  • rr = key number of drum instrument
  • mm = 00H~7FH (zero~maximum)
1CH, rrH

Panpot of drum instrument

  • rr = key number of drum instrument
  • mm = 00H, 01H~40H~7FH (Random, Left-Center-Right)
1DH, rrH

Reverb send level of drum instrument

  • rr = key number of drum instrument
  • mm = 00H~7FH (zero-maximum)

RPN MSB/LSB
(Registerd Parameter Number)

thirdsecondstatus
mmH65HBnH
LLH64HBnH
  • n = MIDI Channel number:
    0H - FH (0 - 15)
  • mm = RPN MSB
  • LL = RPN LSB

※① RPN MSB/LSBを設定
 ② Data Entryを送る


RPN
MSB, LSB
Data Entry
MSB, LSB
00H, 00H

Pitch Bend Sensitivity
ピッチベンド変化率の変更(初期は「2」)

  • mm = 00H - 18H (0 - 24 semitone)
  • LL = ignored(無視)

Excel_VBA_MIDI_Pitch Bend

https://www.nicovideo.jp/watch/sm44654720

00H, 01H

Master Fine Tuning
ピッチの微調整。最大値が1音半

  • mm,LL = 00H,00H ~ 40H,00H ~ 7FH,7FH
    (-8192x100/8192 ~ 0 ~ +8191x100/8192 cent)
00H, 02H

Master Coarse Tuning
半音単位のピッチ調整

  • mm = 28H ~ 40H ~ 58H
    (-24 ~ 0 ~ +24 semitone)
  • LL = ignored(無視)

7FH, 7FH

RPN RESET

  • mm, LL = ignored(無視)

MIDIファイルの作成
Create MIDI file from Excel

                            
                            「Excelでmidiファイルを作る」コード
                            
                        
  1. プログラムの部屋(転倒夢想庵)「MIDI(SMF)の作り方」
    https://tendomusoan.web.fc2.com/midi.html
  2. 読み人知らず(t)「もう1回、ExcelでMIDI」2016/12/24
    https://otktake.blogspot.com/2016/12/1excelmidi.html
  3. 読み人知らず(t)「ExcelでMIDI」2015/01/17
    https://otktake.blogspot.com/2015/01/excelmidi.html
  4. プチモンテ「MIDIファイルを作成する(Visual Basic)」
    https://www.petitmonte.com/format/create_midi_vb.html
  5. 休日の空間「エクセルで「オーケストラ」を作って聞いてみた」
    https://fft-0064.blogspot.com/2018/10/blog-post.html
  6. Wikipedia「スタンダードMIDIファイル」
    https://ja.wikipedia.org/wiki/スタンダードMIDIファイル

無効なMIDIメッセージ集(※MSGS・Excel VBA使用)
Invalid MIDI Messages

  1. sai-mas「レインダスト」Microsoft GS Wavetable SW Synth について
    https://www5e.biglobe.ne.jp/~general/writing/msgs/aboutmsgs.html

音声合成
Voice_Synthesis

  1. Zenn(mogesystem)「MIDIで歌声を再現する」2025.04.20.
    https://zenn.dev/mogesystem/articles/31cc2449558b6d#振幅の制御%3A-expression
  2. Eleken「midiで音声を表現するテスト」2009.02.27.
    https://www.nicovideo.jp/watch/sm6280081
  3. MDPC「【MIDI】Windows内蔵MIDI音源(MSGS)のみで音声合成実験【音声合成】」2023.05.14.
    https://www.youtube.com/watch?v=w-JxYgIeCD8

リンク・参考文献

  1. ゆっくり亭「【VBAでmidi】エクセルでピアノを弾く【ゆっくり解説】」
    https://www.nicovideo.jp/watch/sm41728265
  2. Dylan Tallchief; I made an actual Drum Machine in Excel
    https://www.youtube.com/watch?v=To2JIXGoYzA
  3. sai-mas「レインダスト」Microsoft GS Wavetable SW Synth について
    https://www5e.biglobe.ne.jp/~general/writing/msgs/aboutmsgs.html
  4. くず「おーぷんMIDIぷろじぇくと」資料,MIDIメッセージ早見表
    https://openmidiproject.opal.ne.jp/documentations.html
  5. arcrab「DTM Solutions」
    https://dtm-solutions.jp/
  6. (た)「忘備録」ExcelでMIDI
    http://tanlab.blog.fc2.com/blog-entry-50.html
  7. ローランドサポート窓口「Roland BLOG -SUPPORT CATEGORY-」
    https://blog.roland.jp/support/request_midi/
  8. 株式会社インターネット;ドラム・パーカッションの入力方法,複数ドラムパートの指定
    https://www.ssw.co.jp/dtm/drums/
  9. 「F-Basic Programming Tips」API,API Index, MN
    midi関数
    https://www.tokovalue.jp/API_INDEX_MN.htm
  10. Ed D; MIDI: Visualize "Bank Select" and "Program Change" MIDI messages
    https://www.youtube.com/watch?v=gaElxbCa1XI
  11. Ed D; MIDI: Visualize "Control Change" and "Pitch Wheel Change" MIDI messages
    https://m.youtube.com/watch?v=sBEJWk_R_Nc
  12. 蛞蝓なめちゃん「蛞蝓屋敷」MIDI資料, Pitch Bend Value Table
    ピッチベンド数値表
    http://odasan.s48.xrea.com/dtm/wheel.html
    http://odasan.s48.xrea.com/index.html
  13. 音楽研究所
    https://www.asahi-net.or.jp/~HB9T-KTD/music/musj.html
  14. 「Newton別冊 式がなくても数学は楽しめる、味わえる! 数式いらずの数学入門」, ニュートンプレス, 2025年1月25日.
  15. 豊穣ミノリ / Hojo Minori「音律解説音楽「Tone Palette」」2025/03/08
    https://www.youtube.com/watch?v=UBhwla7_BdQ
    https://note.com/hojo_minori/n/n17a7eb889d68
  16. 炙れ⭐︎えんがわ「カービィ楽曲でわかる!コードネーム【ワドルディおんがく教室】」2025/04/05
    https://www.youtube.com/watch?v=4qe-CpGZeVs
  17. SQUISHY Piano
    https://www.youtube.com/@SQUISHY0427
  18. traP「MSGSで無課金DTMする人」2016.12.19
    https://trap.jp/post/111/
  19. 逃亡者「初心者になるための耳コピMIDI講座」【メモ】いろいろ
    https://mimikopi.nomaki.jp/midi/memo/index.html
  20. 電気通信大学 X680x0同好会, akima「MSGSで遊ぼう!」,2008
    https://www.x68uec.org/files/other/press/2008/text/akima/index.html
  21. 【彳▼亍 ▼てきちょく】TETH_Main「【第94話】楽器の構造を数式で表現【グラフ計算機/Desmos】」,2025/04/26.
    https://www.youtube.com/watch?v=9BRwiEg9d9c&t=465s
  22. Mag.「Mag.のホームページ」MIDIの掟
    https://magarchive.halfmoon.jp/nifty/midi/midirules-content.html
    https://magarchive.halfmoon.jp/nifty/midi/vvesymidi.html
    https://magarchive.halfmoon.jp/nifty/midi/vvesymidi2.html
  23. 犬かい「T's Square」MIDIとDTMの広場,打ち込み虎の巻
    http://www.tim.hi-ho.ne.jp/t-inukai/uchitora.html
    http://www.tim.hi-ho.ne.jp/t-inukai/midi.html
    http://www.tim.hi-ho.ne.jp/t-inukai/
  24. BTT - better than television, "MIDI programming in C#"
    https://www.youtube.com/watch?v=wKEyzLfvJH8&list=PLT1oacQFeNK5Q5LVx82_Rv_7fH4X5lYp9
    https://www.youtube.com/@audio_programming101