CircuitPythonの組み込みライブラリには、USB MIDIがあり、AdaruitBundleも使うと簡単にMIDI Controllerが作れる。以下は、ボリュームの操作に応じて、MIDIのControl Changeを送信するアプリ
import time import random from analogio import AnalogIn import usb_midi import adafruit_midi from adafruit_midi.note_off import NoteOff from adafruit_midi.note_on import NoteOn from adafruit_midi.control_change import ControlChange USB_MIDI_channel = 1 usb_midi = adafruit_midi.MIDI(midi_out=usb_midi.ports[1], out_channel=USB_MIDI_channel - 1) # MIDI Channel (from Adaruit: [Code USB MIDI in CircuitPython]) # 0 Bank Select # 1 Modulation Wheel # 2 Breath Controller # 3 Undefined # 4 Foot Controller # 5 Portamento time # 6 Data Entry Most Significant Bits # 7 Volume # 8 Balance # 9 Undefined # 10 Pan # 11 Expression # 12 Effect Controller 1 # 13 Effect Controller 2 # 14 Undefined # 15 Undefined CC_EXPRESSION=11 # range 0-127 MAX_VALUE = 127 knob0 = AnalogIn(board.A0) # e0 - 0xffff def ctrl_knob(): prev_val = 0 while True: level = knob0.value val = int(MAX_VALUE * level / 0xffff ) if prev_val == val : # or abs(prev_val - val) < 2: pass else: usb_midi.send(ControlChange(CC_EXPRESSION, val)) print(" cc:",val,end="") prev_val = val time.sleep(0.1)
ボリュームを操作すると、Control ChangeがPCに送信される。PC側ではDAWのFL Studioが走っていて、Control ChangeがSpireのLowPassFilterのCut Off 周波数ボリュームに割り当てられている。ボリュームを操作すると、SpireのCut Off ボリュームが連動して動く。だから、ボリュームを回すとシンセの音が変わる。
普段だとマウスの上下操作でGUIのボリュームを操作するのだけど、どうも慣れないし、直感的ではない。だけど本物のボリュームをグリグリ回すと微妙な匙加減が可能にるし、自分の指で音色を作っている実感が沸いてくる。
システムの外観:Raspbery Pi Pico上でCircuitPythonを動かしていて、USB経由でPCと接続、PC上ではDAWのFL Studioが動いている。FL Studio内で先日買ったSpireが動いている。
ご参考:
FL-Studioには、MIDIコントローラと、シンセのボリューム類とを紐づけるための機能(Multilink機能とか)があって、ボリュームボタンを押して、シンセのボリュームを操作ー>MIDIコントローラを操作 すると、2つの間で紐づけがなされる。一度学習させると、MIDIコントローラを操作すると、紐づけたシンセのボリュームが連動して動く。赤枠で囲んだ部分がマルチリンクのボタン
USBだとケーブルがぶらぶらするのがちょっとアレですが、、BLE MIDIと比べるとソースコードも極端に短いし(CircuitPythonとAdafruitのライブラリのお陰なのですが)、応答遅延も感じられないので、無理してBLEにしなくてもいいかと思うのでした。
■
参考記事
Adaruit: [Code USB MIDI in CircuitPython]
Code USB MIDI in CircuitPython | Grand Central USB MIDI Controller in CircuitPython | Adafruit Learning System