KeyStation Mini 32 MK3のMIDI制御スクリプト
M-AUDIOのKeyStation MINI 32 MK3のMIDI制御スクリプトを作成したので添付しておきます。
- VOLUME: 再生位置の変更
- SUST(サスティン)): 再生・停止
- PB(ピッチベンド): 選択しているチャンネルの上下移動
- MOD(モジュレーション): Pattern/Loopモードの切り替え
+
|
モジュレーションのベンド速度を127にする |
- 「EDIT」ボタンを押します。「EDIT」ボタンが 100% の明るさで点灯します
- 「MODRATE」キー(F、左から 4 番目の白鍵)を押します
- E (右から 10 番目の白鍵)を押して「1」を入力します
- F (右から 9 番目の白鍵)を押して「2」を入力します
- D (右から 4 番目の白鍵)を押して「7」を入力します
- 「ENTER」キー(G、右の最後の白鍵)を押します
|
+
|
ピッチベンド速度を127にする |
- 「EDIT」ボタンを押してエディット・モードをオンにします。「EDIT」ボタンが 100% の明るさで点灯します。
- 「PB RATE」キー(E、左から 3 番目の白鍵)を押します。
- E (右から 10 番目の白鍵)を押して「1」を入力します。
- F (右から 9 番目の白鍵)を押して「2」を入力します。
- D (右から 4 番目の白鍵)を押して「7」を入力します。
- 「ENTER」キー(G、右の最後の白鍵)を押すと、「EDIT」ボタンが 50% の明るさになり、プログラミ ングが完了したことを示します。
|
M-AUDIOの "KeyStation Mini 32 MK3" は値段もサイズもお手頃 (32鍵盤、6000円、重さ0.5kg) なので、モバイル作曲時のMIDIキーボードとしておすすめです。
#name=M-AUDIO KeyStation Mini 32 MK3
# ↑使用しているデバイスの名前.
import transport # FLのTransport(Play, Stop, Pause & Record)を操作する.
import channels # FLのチャンネルラック操作.
import patterns # FLのパターン操作.
import plugins # FLのプラグイン操作.
import ui # FLのUI操作.
# 定義が見つからないのでここで定義してみる...
SONGLENGTH_MS = 0 # SONGモードの長さをMSで取得.
# MIDI信号/CCの番号.
KS32_VOLUME = 7 # ボリューム
KS32_MOD = 1 # モジュレーション番号.
KS32_SUSTAIN = 64 # サスティン.
VAL_MIN = 0 # 値の最小.
VAL_MAX = 127 # 値は0〜127まで.
## MIDI入力時に呼び出されるコールバック関数.
def OnNoteOn(event):
# FLが受け取ったMIDI信号を出力.
print("note on channel:%d number:%d"%(event.status, event.data1))
## CCメッセージ受け取り.
def OnControlChange(event):
# FLが受け取ったCCを出力.
print("CC channel:%d number:%d"%(event.status, event.data1))
print("- data2:%d"%event.data2)
# 選択しているチャンネル番号を取得する.
channel_idx = channels.channelNumber()
if event.data1 == KS32_VOLUME:
# ノブの位置で再生位置を移動してみる.
if transport.getLoopMode() == 0:
# パターンモード.
idx = patterns.patternNumber() # 現在選択しているパターン.
total = patterns.getPatternLength(idx) # パターンの長さ.
pos = int(total * event.data2 / VAL_MAX)
print("pos:", pos , " total:", total)
transport.setSongPos(1.0 * pos / total)
else:
# ソングモード.
total = transport.getSongLength(SONGLENGTH_MS) # 曲の長さ.
pos = total * event.data2 / VAL_MAX
print("pos:", pos , " total:", total)
transport.setSongPos(pos, SONGLENGTH_MS)
event.handled = True # FLに処理させる.
elif event.data1 == KS32_MOD:
# ループモード切り替え.
if event.data2 == 127: # 入力時のみ.
transport.setLoopMode()
event.handled = True # FLに処理させる
elif event.data1 == KS32_SUSTAIN:
# 再生・停止
if transport.isPlaying(): # 再生中
transport.stop() # 停止.
else: # 停止している.
transport.start() # 再生.
event.handled = True # FLに処理させる
## プログラムチェンジメッセージのコールバック関数.
def OnProgramChange(event):
# FLが受け取ったMIDI信号を出力.
print("program change channel:%d number:%d"%(event.status, event.data1))
## システムエクスクルーシブのコールバック関数.
def OnSysEx(event):
# FLが受け取ったMIDI信号を出力.
print("sys ex channel:%d number:%d"%(event.status, event.data1))
## ピッチベンドのコールバック関数.
def OnPitchBend(event):
# イベントを処理する場合はこれをTrueにする.
event.handled = False
# FLが受け取ったMIDI信号を出力.
print("pitch bend channel:%d number:%d"%(event.status, event.data1))
print("- data2:%d"%event.data2)
if event.data2 == 127:
# ピッチを上げる.
# 選択しているチャンネル番号を返す.
idx = channels.selectedChannel()
channels.selectOneChannel(idx+1) # 1つ上を選択する.
print("selectOneChannel(%d)"%idx)
event.handled = True # FLに処理させる.
elif event.data2 == 0:
# ピッチを下げる.
print("setFocused(widChannelRack)")
# 選択しているチャンネル番号を返す.
idx = channels.selectedChannel()
channels.selectOneChannel(idx-1) # 1つ下を選択する.
print("selectOneChannel(%d)"%idx)
event.handled = True # FLに処理させる.
最終更新:2024年01月03日 18:40