MacroPad改造(その1)

以前マクロパッドを購入してようやくいじる余裕ができたので、
プログラム書いてみた。

経緯

以前からの腱鞘炎でライブコーディングツール作ったりしていたが、
その前にまともにノートの入力ができないのはいずれにしても困る。

このため、キーボードの形をしてノートを自由に入力できるツールを作る予定。

用意

  • RP2040 Macropad(本来なら自分で設計してもいいんだけど、まずはお試し)
  • CircuitPython
  • 各種ライブラリ

コード

割と適当に書いても動くので便利。


import board
import time
import random
import usb_midi
import adafruit_midi
import simpleio

from adafruit_midi.control_change import ControlChange
from adafruit_midi.note_off import NoteOff
from adafruit_midi.note_on import NoteOn
from adafruit_midi.pitch_bend import PitchBend
from digitalio import DigitalInOut, Pull
from adafruit_macropad import MacroPad
from adafruit_display_text import label

button = [DigitalInOut(board.KEY1),
    DigitalInOut(board.KEY2),
    DigitalInOut(board.KEY3),
    DigitalInOut(board.KEY4),
    DigitalInOut(board.KEY5),
    DigitalInOut(board.KEY6),
    DigitalInOut(board.KEY7),
    DigitalInOut(board.KEY8),
    DigitalInOut(board.KEY9),
    DigitalInOut(board.KEY10),
    DigitalInOut(board.KEY11),
    DigitalInOut(board.KEY12),
]

# ノート管理
note=[0,0,0,0,0,0, 0,0,0,0,0,0]
note_vel=[0,0,0,0,0,0, 0,0,0,0,0,0]
note_state=[False,False,False,False,False,False,
False,False,False,False,False,False]

for i in range(12):
    button[i].pull = Pull.UP # 内部のプルアップ抵抗を有効化する
    note[i]=0
    note_vel[i]=0
    print(button[i].value)

led = simpleio.DigitalOut(board.LED)

# MIDIポートの入出力についてデバイス取得
midi = adafruit_midi.MIDI(
    midi_out=usb_midi.ports[1], out_channel=0
)

while True:
    nt=0
    for i in range(12):
        if button[i].value==False:
            if note_state[i]==False:
                nt=i+45
                midi.send(NoteOn( nt, 120)) 
                note_state[i]=True 
        else:
            if note_state[i]==True:
                nt=i+45
                midi.send(NoteOff(nt, 120))
                note_state[i]=False