Wio Terminalの操作で、Chromebookで音を鳴らす。

2025年8月25日月曜日

マイコン工作

https://notyet-maker.blogspot.com/2025/08/blog-post_15.html

で、ギター風 電子楽器の部品を再選定したが、まずは、Wio Terminal単体で動作確認をしてみようと思った。


ChatGPTによると、USB-MIDIというものが使えるそうで、Wio Terminalの操作で、Chromebookから音を再生してみようと思う。


midi.city というサイトの利用を提案された。

https://midi.city/



右下の INPUT を選択すると、SEEEDUINO WIO TERMINAL MIDI 1 が認識されている。



次に、Wio Terminal側で adafruit_midi を使い、Ch.1でNoteOn/NoteOffメッセージを送信するコードをREPLで実行する。

(コードはChatGPTが生成。)


まずは、送信テスト。

///// コードここから /////
# 出力(PortOut)を自動選択し、C4を1秒だけ鳴らして止める簡易テスト
import time, usb_midi
from adafruit_midi import MIDI
from adafruit_midi.note_on import NoteOn
from adafruit_midi.note_off import NoteOff

outs = [p for p in usb_midi.ports if hasattr(p, "write")]
print("ports:", usb_midi.ports)
print("outs:", outs)
if not outs:
    raise RuntimeError("送信できるUSB-MIDIポート(PortOut)が見つかりません")

midi = MIDI(midi_out=outs[0], out_channel=0)  # ch1固定
print("TX test on PortOut:", outs[0])

midi.send(NoteOn(60, 100))  # C4
time.sleep(1.0)
midi.send(NoteOff(60, 0))
print("Sent NoteOn/Off C4 on ch1")
///// コードここまで /////

MIDI Input Debugger に、

Latest Input Channel: 1 (success)

と表示された。


さらに、

///// コードここから /////

# Wio Terminal / CircuitPython

# BUTTON_1/2/3 = C4/D4/E4(押している間だけ)、

# SWITCH_UP/DOWN = CC#7 音量±8、SWITCH_PRESS = Panic(All Notes Off)

import time, board, keypad, usb_midi

from adafruit_midi import MIDI

from adafruit_midi.note_on import NoteOn

from adafruit_midi.note_off import NoteOff

from adafruit_midi.control_change import ControlChange

from adafruit_midi.all_notes_off import AllNotesOff


# ---- 送信ポート自動選択(PortOutだけ抽出) ----

outs = [p for p in usb_midi.ports if hasattr(p, "write")]

if not outs:

    raise RuntimeError("USB-MIDIの送信ポート(PortOut)が見つかりません")

midi = MIDI(midi_out=outs[0], out_channel=0) # ch1


# ---- 入力(3ボタン+上下+中央) ----

KEYS = (

    board.BUTTON_1, # ド C4

    board.BUTTON_2, # レ D4

    board.BUTTON_3, # ミ E4

    board.SWITCH_UP, # Volume +

    board.SWITCH_DOWN, # Volume -

    board.SWITCH_PRESS, # Panic

)

km = keypad.Keys(KEYS, value_when_pressed=False, pull=True)

IDX_C, IDX_D, IDX_E, IDX_VOL_UP, IDX_VOL_DN, IDX_PANIC = range(len(KEYS))


# ---- ノート/音量 ----

NOTE_C4, NOTE_D4, NOTE_E4 = 60, 62, 64

BUTTON_NOTE = {IDX_C: NOTE_C4, IDX_D: NOTE_D4, IDX_E: NOTE_E4}

velocity = 96

volume = 100

VOL_STEP = 8

active = set()


def send_volume():

    global volume

    volume = max(0, min(127, volume))

    midi.send(ControlChange(7, volume))


# 起動時に音量を通知

send_volume()

print("Ready: BUTTON_1/2/3=C/D/E, UP/DOWN=Vol, PRESS=Panic")


while True:

    ev = km.events.get()

    if ev:

        # ド・レ・ミ(押している間だけ)

        if ev.key_number in (IDX_C, IDX_D, IDX_E):

            note = BUTTON_NOTE[ev.key_number]

            if ev.pressed:

                midi.send(NoteOn(note, velocity))

                active.add(note)

            else:

                midi.send(NoteOff(note, 0))

                active.discard(note)


        # 音量(CC#7)

        elif ev.key_number == IDX_VOL_UP and ev.pressed:

            volume = min(127, volume + VOL_STEP); send_volume()

        elif ev.key_number == IDX_VOL_DN and ev.pressed:

            volume = max(0, volume - VOL_STEP); send_volume()


        # Panic(全ノート停止)

        elif ev.key_number == IDX_PANIC and ev.pressed:

            midi.send(AllNotesOff(0))

            for n in list(active):

                midi.send(NoteOff(n, 0))

            active.clear()


    time.sleep(0.003)

///// コードここまで /////

で、Wio Terminal上部の3つのボタンを押すと、Chromebookからドレミの音が出た。


5方向スイッチで、音量操作したかったが、どうもCircuitPythonでは対応していないようだ。


このブログを検索

ブログ アーカイブ

頭蓋仙骨療法 16回目

https://notyet-maker.blogspot.com/2025/11/15.html の続き。 https://notyet-maker.blogspot.com/2025/12/blog-post.html に記載したように、レーラー呼吸法がHRVに良い影響を与...

QooQ