Jump to content

Midibox-Link und Encoder


talion303
 Share

Recommended Posts

Hallo zusammen,

in meinem Projekt habe ich mehrere Cores in Reihe geschaltet.

Einige DIN's sind an Encoer angeschlossen. Zum Einsatz kommt ain64_din128_dout128_v2c.

Also habe ich zunächst Midibox-Link angeschaltet was grundsätzlich auch funktioniert:

in main.c:

// ENABLE AND CONFIGURE MIDI MERGER

MIOS_MIDI_MergerSet(MIOS_MIDI_MERGER_ENABLED);

MIOS_MIDI_MergerSet(MIOS_MIDI_MERGER_MBLINK_FP); (auf dem letzten Core entsprechend MBLINK_EP)

Wenn ich jetzt Knöppe oder Potis drehe kommt am Midi-Out des letzten Cores alles raus, so wie es soll.

Wenn ich allerdings Encoder drehe nicht. Ich habe mal Midi an den MBLINK_FP Cores abgegriffen und festgestellt das bei Knöppen und Potis zusätzliche Informationen gesendet werden. Ich meine F9 oder 9F - scheint so als wären das die Tunnelinformationen die der MBLINK_EP dann erkennt, abschneidet und die Nutzinformationen aus dem Midi-Out schickt.

Beim Drehen der Encoder fehlen diese zusätzlichen Informationen, was sehr wahrscheinlich den Fehler verursacht. Funktionieren tun sie allerding so wie sie sollen - halt nur nicht in der Midi-Core-Schlange - da kommt em Ende nix an, vorher abgegriffen: Alles super.

Die Encoder habe ich wie folgt in die ain64_din128_dout128_v2c integriert:

in mein.c:

// set speed mode for 13 encoders

for(i=0; i<13; ++i) {

// available speed modes: SLOW, NORMAL and FAST

MIOS_ENC_SpeedSet(i, MIOS_ENC_SPEED_FAST, 2); // encoder, speed mode, divider

}

und:

void ENC_NotifyChange(unsigned char encoder, char incrementer) __wparam

{

MIOS_MIDI_TxBufferPut(0xb0); // CC at MIDI Channel #1

MIOS_MIDI_TxBufferPut(0x20 + encoder); // CC# is 0x10 (16) for first encoder

MIOS_MIDI_TxBufferPut((0x40 + incrementer) & 0x7f);

// this "40 +/- speed" format is used by NI software and some others

}

In der Enc_Table sind die Encoder natürlich entsprechend definiert. Sie funktionieren wie gesagt auch so wie sie sollen.

Ja so weit - ist das nicht so, dass die Funktion TxBufferPut generell quasi "durch" den Midimerger geleitet wird, sobald er angeschaltet ist? Klappt ja bei den den Knöppen und Potis auch...

Kann natürlich sein dass die Frage dumm ist, da ich mal NULL "C" kann - ich such mir die Sachen für die Software aus dem Forum zusammen und versuche damit erst mal klarzukommen... ;-) Wahrscheinlich fehlt irgendwas.... nur was?

Vielen Dank und Grüße, Christoph

Link to comment
Share on other sites

Hallo,

es fehlt der Hinweis an MIOS, wann der Stream beginnt, und wann er zuende ist - ohne diese "Markierung" (dass hierbei F9 und FA gesendet wird, hast Du ja bereits gemerkt) wird das Event am Endpoint gefiltert.

Das Tunneln sollte wie folgt funktionieren:


void ENC_NotifyChange(unsigned char encoder, char incrementer) __wparam
{
MIOS_MIDI_BeginStream();
MIOS_MIDI_TxBufferPut(0xb0); // CC at MIDI Channel #1
MIOS_MIDI_TxBufferPut(0x20 + encoder); // CC# is 0x10 (16) for first encoder
MIOS_MIDI_TxBufferPut((0x40 + incrementer) & 0x7f);
MIOS_MIDI_EndStream();
}
[/code]

Gruss, Thorsten.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

×
×
  • Create New...