APC40 MKIIのモードについて
APC40 MKIIには次の3つのモードがある。参照
- Generic Mode : 完全にAPC40上で操作できるモード
- Ableton Live Mode(LED Ring Remote Controled) : LEDのつまみはAPC40で制御し、それ以外はPC上で制御
- Alternate Ableton Live Mode : 全てPC上で制御
openFrameworksでMidiコンを扱う場合は、ofxMidiというAddonを使うが、下のように単純に接続するだけではGenericモードで制御することになる。
ofxMidiIn midiIn;
ofxMidiOut midiOut;
midiIn.listInPorts();
midiIn.openPort("APC40 mkII 0");//マシンによって違うかも
midiIn.ignoreTypes(false, false, false);
midiIn.addListener(this);
midiIn.setVerbose(false);
midiOut.listOutPorts();
midiOut.openPort("APC40 mkII 1");//マシンによって違うかも
Genericモードでは、APC40 MKII上の操作で、値の上書きがされる。
例えば、Padを押した際に、oFからsendNoteOn
でPadの色を光らせても、離した際に勝手に光が消えてしまう(SendNoteOff
がAPC40上で発生)。また、LEDリングもつまみを回すと値が上書きされる。
APC40 MKIIの値を、コントローラーとしてPCから完全に制御したい場合は、Alternate Ableton Live Modeが良い。このモードにすれば、Midiコン操作時の処理をPCで書かない限り、値は絶対に変化しない。したがって一度SendNoteOn
で光らせれば、oFから処理を行わない限り、押しても離しても光が消えることはない。もちろんSendNoteOff
を送れば消せる。
モード変更方法
APC40 MKIIのモード変更は、SysExメッセージを送ることで変更可能。先ほどのofApp.cppの後に、次のコードを追加する。7つ目の0x42
となっている箇所の値を変えることでモードが変えられる。
-
0x40
: Generic Mode -
0x41
: Ableton Live Mode (LED Ring Remote Controled) -
0x42
: Alternate Ableton Live Mode
////akai apc40 mkii
vector<unsigned char> sysexMsg;
sysexMsg.push_back(MIDI_SYSEX);
sysexMsg.push_back(0x47);
sysexMsg.push_back(0x7F);
sysexMsg.push_back(0x29);
sysexMsg.push_back(0x60);
sysexMsg.push_back(0x00);
sysexMsg.push_back(0x04);
//---change mode
///0x40 Generic (Startup Default) Track select Radio- Channel Toggle
///0x41 Ableton Live(LED Ring Remote Controlled) Momentary All
///0x42 Alternate Ableton Live Momentary All
sysexMsg.push_back(0x42);
//---
sysexMsg.push_back(0x09);
sysexMsg.push_back(0x07);
sysexMsg.push_back(0x01);
sysexMsg.push_back(MIDI_SYSEX_END);
midiOut.sendMidiBytes(sysexMsg);
または、下のコードでも動く。
midiOut << StartMidi() << MIDI_SYSEX
<< 0x47 << 0x7F << 0x29 << 0x60 << 0x00 << 0x04 << 0x42
<< 0x09 << 0x07 << 0x01
<< MIDI_SYSEX_END << FinishMidi();