ユーザーフォーラム

よくある質問
フォーラムTOP最近の投稿プロフィール 

MIDI信号送信したらかんぷれがリセッ...
 

MIDI信号送信したらかんぷれがリセット

4 投稿
2 ユーザー
0 Likes
127 表示
(@karaage0703)
Active Member
結合: 3週間前
投稿: 3
Topic starter  

MIDI信号送信したらリセットしました。

 

接続は以下です。

PC→USB-MIDI(UM-1 EX) → MIDI Unit Mini for GROVE → かんぷれ

https://necobit.com/denshi/midi-unit-mini-for-grove/

 

MIDIはLLMからMCPサーバ(mcp-midi-server)を経由して出力しています。

https://github.com/necobit/mcp-midi-server

 

以下が動画です。5回ほど試しましたが、どれも1音だけなってリセットしました。

https://x.com/karaage0703/status/1932807109298794856

 

MIDI信号の詳細や波形などは見れていないのですが、一旦投稿させていただきます。


   
引用
Yu-ichi
(@ynaga)
Noble Member Admin
結合: 8年前
投稿: 573
 

@karaage0703

詳しいご報告ありがとうございます。

MIDI通信中にかんぷれがリセットする現象は、他の条件でも発生しておりますので原因を調査致します。

 


   
返信引用
(@karaage0703)
Active Member
結合: 3週間前
投稿: 3
Topic starter  

@ynaga 

ありがとうございます!


   
返信引用
(@karaage0703)
Active Member
結合: 3週間前
投稿: 3
Topic starter  

 rtmidiだとリセットして、midiだとリセットしませんでした。

以下でリセットしました。

 

```

#!/usr/bin/env python3
"""
rtmidiライブラリで直接MIDI信号を高速送信するテスト
MCPサーバーと同じライブラリを使用
"""

import rtmidi
import time
import sys

def test_rtmidi_rapid_fire():
"""rtmidiで高速MIDI信号送信テスト"""
try:
midi_out = rtmidi.MidiOut()
available_ports = midi_out.get_ports()

print(f"利用可能なMIDI出力ポート: {available_ports}")

if not available_ports:
print("MIDI出力ポートが見つかりません")
return

# 最初のポートを使用
midi_out.open_port(0)
port_name = available_ports[0]
print(f"使用するポート: {port_name}")

# テストシーケンス: C4, D4, E4, F4, G4
notes = [60, 62, 64, 65, 67]

print("\n=== rtmidi 高速送信テスト ===")
# BPM 120での計算
beat_duration = 60.0 / 120 # 0.5秒
note_duration = beat_duration * 0.5 # 0.25秒
note_gap = beat_duration * 0.25 # 0.125秒

print(f"ノート長: {note_duration * 1000:.1f}ms, 間隔: {note_gap * 1000:.1f}ms")

for note in notes:
print(f"Note {note} 開始")

# Note On (MCPサーバーと同じ形式)
midi_on = [0x90, note, 64]
midi_out.send_message(midi_on)
print(f"Note {note} ON送信")

time.sleep(note_duration)

# Note Off
midi_off = [0x90, note, 0]
midi_out.send_message(midi_off)
print(f"Note {note} OFF送信")

time.sleep(note_gap)

print(f"Note {note} 完了")

print("\n=== 極短時間テスト (10ms間隔) ===")
for note in notes:
midi_on = [0x90, note, 64]
midi_out.send_message(midi_on)
print(f"Note {note} ON (10ms)")

time.sleep(0.01) # 10ms

midi_off = [0x90, note, 0]
midi_out.send_message(midi_off)

time.sleep(0.05) # 50ms間隔

midi_out.close_port()
print("\nrtmidiテスト完了")

except Exception as e:
print(f"エラー: {e}")
import traceback

traceback.print_exc()

if __name__ == "__main__":
test_rtmidi_rapid_fire()

```


   
返信引用