PDA

View Full Version : MIDI Daten uminterpretieren


Dr-Mbogo
08-16-2018, 02:56 AM
Hallo liebe Gemeinde!

Mein MIDI Controller, den ich für das Umschalten von Gitarrensounds nutze, kann lediglich Program Change und Continuous Control Messages senden. Ich möchte die Daten "uminterpretieren". Soll heißen - wenn ich einen bestimmten Program Change oder Control Befehl sende, soll Reaper daraus einen Note-on bzw. Note-off machen. Geht das? Ich könnte mir vorstellen, sowas mit den JS Effekten zu machen. Z.B mit einer if-then Abfrage.

Also:
if(ControllerWert == true)
{
note on senden
}

if(ControllerWert == false)
{
note off senden
}

Leider fehlt mir da der theoretische Unterbau, wie man sowas in JS macht. Hat jemand eine Idee, bzw. ein Tutorial wie ich da am besten rangehen kann?

Besten Dank im Voraus und viele Grüße

solger
08-16-2018, 12:53 PM
Hallo,

Wie viele verschiedene Program Change und Continuous Control Messages möchtest du ungefähr in diesem Fall abfragen? Oder sind es insgesamt eh nur zwei MIDI Messages, wie in deinem Beispiel?



Generell gibt es die meisten Infos zu MIDI JSFX auf Englisch:

- https://www.admiralbumblebee.com/music/2018/02/08/Write-a-Reaper-MIDI-JSFX-from-scratch.html
- https://www.reaper.fm/sdk/js/midi.php


Eventuell findest du auch etwas Brauchbares bei den JS: MIDI Plugins. Bzw. kannst du dir bei den JS Plugins auch den dahinter liegenden Code im Editor anschauen (mittels dem [Edit...] Knopf im Plugin-Fenster).

Oder vielleicht ist auch etwas wie der 'midiconverter3' von der pizmidi MIDI-Plugin-Kollektion interessant: https://code.google.com/archive/p/pizmidi/downloads

Dr-Mbogo
08-17-2018, 12:03 AM
Vielen lieben Dank für die Links. Da ist wirklich eine ganze Menge Info dabei. Prima - um sich während des Wochenendes darin zu vergraben! In der Zwischenzeit habe ich mir auch einige der Onboard JS Plugins im Editor angesehen. Es ist mir dabei auch gelungen, durch "Reverse Engineering" den MIDI Controller Befehl "umzudeuten", so dass ich meinem Ziel tatsächlich etwas näher gekommen bin. Ich habe einen Note-on Befehl gesendet und ich höre auch was!!! Die Umsetzung des Note-off Befehls hakt allerdings noch ein bisschen. Aber das ist ja auch nicht weiter verwunderlich, wenn man die Syntax noch nicht voll verinnerlicht hat. Mit den Links wird das sicher funktionieren. Ich bleibe dran und halte euch auf dem Laufenden.

Dr-Mbogo
08-17-2018, 11:29 PM
Es ist vollbracht! Danke Dir Solger! Dank der super lehrreichen Links ist etwas brauchbares dabei herausgekommen. Der unten angehängte Text macht aus einem Controlchange Befehl mit der #23 einen MIDI Noteon und Noteoff Befehl. Eine super Sache, wenn man als Gitarrist mal wieder Modes üben möchte und dazu einfach einen Drone braucht, über den man improvisieren möchte.

Man kann das sicher noch erweitern, aber mir reicht mir erstmal (für den Moment). Einige kurze Kommentare zur Funktion des Codes: Am Anfang der While schleife werden MIDI Daten gelesen. Wenn Daten da sind, wird der Code ausgeführt; ansonsten passiert nichts. Dann folgt eine if Abfrage nach den MIDI Daten, die mein MIDI Board versendet. Wenn die Bedingung <true> ist, dann versendet er den noteon befehl. Sonst den Noteoff.


desc:MIDI LESEN
//tags: MIDI lesen Test
//author: Chris


slider1:0<0,15,1> MIDI Kanal
slider2:0<0,127,1>Control Change Eingang
slider3:0<0,256,1>Status Byte


@init
noteon = $x90;
noteoff = $x80;
pitch = $x2A;
volume = $x40;

@block

while

(midirecv(mpos, msg1, msg2,msg3))
(
statusbyte = msg1 & $xF0;
midikanal = (msg1 & $x0F)+1;
controlchange = msg2;

statusbyte == 176 && msg2 == 23 && msg3 == $x7F ?
(
midisend(mpos,noteon , pitch,volume)) :

(
midisend(mpos, noteoff , pitch, $x00);
);

slider1 = midikanal;
slider2 = controlchange;
slider3 = statusbyte;
);

solger
08-18-2018, 04:00 AM
Es ist vollbracht!
Cool :)