Help us understand the problem. What is going on with this article?

openFrameworksでAPC40 MKIIのモードを変更する

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モードで制御することになる。

ofApp.h
ofxMidiIn midiIn;
ofxMidiOut midiOut;
ofApp.cpp
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();
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした