Jump to content

MIDI Merger modifizieren ?


xeniades
 Share

Recommended Posts

Hallo MIDI Freunde  ;D

Ich hätte folgendes Problem anzubieten:

An meinem Roland A33 habe ich 2x MIDI OUT (OUT1, OUT2). Beide Ausgänge sind identisch und übertragen die gleichen Signale.

Das A33 kann max. mit 2 unterschiedlichen Kanälen senden. Ich möchte jetzt an OUT2 diese beiden Kanäle in andere MIDI Kanäle übersetzen. Also z.B. aus Kanal 1 und 2 wird dann Kanal 14 und 15.

OUT1 liefert die am A33 eingestellten Midikanäle 1 und 2. Dadurch hätte ich 4 unterschiedliche Midikanäle (1,2,14,15) , die mir der MIDIMerger auf eine Leitung zusammenführt.

Aber leider kann der die Kanalzuordnung nich ändern !

Ist es möglich, eine geänderte Firmware für den MIDI Merger zu erstellen, die z.B. die Kanäle von IN1 (=OUT1) auf Kanäle 14, 15 übersetzt, egal mit welchen Kanälen an diesem Port gearbeitet wird ?

Gruß

Thomas

Link to comment
Share on other sites

Ok - und wer kann mir das freundlicherweise ändern ?  ::)

Wahrscheinlich der Programmierer selbst. Bist Du das ?

Es wäre doch ganz gut, diese Kanalzuordnung in einem header-file zu definieren.

Oh, was wäre das komfortabel und flexibel....

Gibt es auch noch eine andere (preiswerte) Lösung ?

Wenn ich den Quellcode in C hätte, könnte ich das wohl selbst machen.

Link to comment
Share on other sites

kP musst jemand anders fragen :) Kann kein asm ausm kopf. Aber viel kanns doch nich sein. man muss ja nur im quelltext bei der ausgaberoutine die variable für den midikanal (welche ja normal die Eingängskanäle darstellt) mit einem festen Wert vertauschen. Mal so einfach ausgedrückt. Dann copy&paste mit der Zeile und den 2. kanal eingetragn.

Link to comment
Share on other sites

ja so ähnlich wirds gehen !

Aber ich bin zu blöd dazu  :P  ??? :'(

Ich weiß nicht mal, in welcher Datei der Sourcecode stehen soll, der die beiden Midi Ports merged.

Und mit Assembler kenne ich mich ned aus - und wills auch garnimmer.

Hoffe mal, daß der Thorsten Klose mir weiterhelfen kann.

Link to comment
Share on other sites

Der Thorsten Klose hat momentan leider nur sehr wenig Zeit, eine hoehere Prioritaet haetten zumindest die anderen Leute, die schon seit Wochen auf eine Antwort von ihm warten :-(

Ich verstehe nicht ganz, warum es ein Merger sein muss.

Du schreibst, dass die beiden MIDI Outs exakt die gleichen MIDI Daten ausgeben. Es wuerde also keinen Unterschied machen, ob die Events nun von einem Merger zusammengefuegt werden, oder ob sie einfach von einem einzigen MIDI Out dupliziert werden, richtig?

Dann saehe die Loesung naemlich ganz einfach aus - nimm einfach das C Skeleton, und setze folgendes in den MPROC_NotifyReceivedEvnt() Hook:


void MPROC_NotifyReceivedEvnt(
  unsigned char evnt0, unsigned char evnt1, unsigned char evnt2) __wparam
{
  switch( evnt0 & 0xf0 ) {
      case 0x80: // Note-Off: 3 bytes
      case 0x90: // Note-On: 3 bytes
      case 0xa0: // Aftertouch: 3 bytes
      case 0xb0: // CC: 3 bytes
      case 0xe0: // Pitchbend: 3 bytes
        MIOS_MIDI_TxBufferPut(evnt0);
        MIOS_MIDI_TxBufferPut(evnt1);
        MIOS_MIDI_TxBufferPut(evnt2);


// if channel 0 or 1 - send again via channel 14 and 15
if( (evnt0 & 0x0f) == 0 || (event0 & 0x0f) == 1 ) {
          MIOS_MIDI_TxBufferPut(evnt0 + 14); // send again with channel offset 14
          MIOS_MIDI_TxBufferPut(evnt1);
          MIOS_MIDI_TxBufferPut(evnt2);
}

        break;
      case 0xc0: // Program Change: 2 bytes
      case 0xd0: // Poly Aftertouch: 2 bytes
        MIOS_MIDI_TxBufferPut(evnt0);
        MIOS_MIDI_TxBufferPut(evnt1);

// if channel 0 or 1 - send again via channel 14 and 15
if( (evnt0 & 0x0f) == 0 || (event0 & 0x0f) == 1 ) {
          MIOS_MIDI_TxBufferPut(evnt0 + 14); // send again with channel offset 14
          MIOS_MIDI_TxBufferPut(evnt1);
}

        break;
      default:
        // note: status messages must be handled within MPROC_NotifyReceivedByte()
        break;
    }
  }
}
[/code]

Was passiert hier: je nach MIDI Event Typ werden entweder zwei oder drei Byte weitergeleitet.

Wenn das MIDI Event auf Kanal 0 oder 1 (wir zaehlen ab 0) empfangen wird, wird es zweimal weitergeleitet. Einmal auf dem urspruenglichen Kanal, und einmal auf Kanal +14

Das ganze laeuft dann auf einem normalen Core Modul ohne zweiten MIDI In

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...