xeniades Posted December 13, 2006 Report Share Posted December 13, 2006 Hallo MIDI Freunde ;DIch 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 Quote Link to comment Share on other sites More sharing options...
dj3nk Posted December 13, 2006 Report Share Posted December 13, 2006 sollte kein prob sein Quote Link to comment Share on other sites More sharing options...
xeniades Posted December 13, 2006 Author Report Share Posted December 13, 2006 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. Quote Link to comment Share on other sites More sharing options...
dj3nk Posted December 13, 2006 Report Share Posted December 13, 2006 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. Quote Link to comment Share on other sites More sharing options...
xeniades Posted December 13, 2006 Author Report Share Posted December 13, 2006 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. Quote Link to comment Share on other sites More sharing options...
TK. Posted December 13, 2006 Report Share Posted December 13, 2006 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 +14Das ganze laeuft dann auf einem normalen Core Modul ohne zweiten MIDI InGruss, Thorsten. Quote Link to comment Share on other sites More sharing options...
xeniades Posted December 14, 2006 Author Report Share Posted December 14, 2006 Ok - verstehe. Dann werde ich das gute Stück mal zusammenlöten !Vielen Dank Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.