Old 08-16-2018, 02:56 AM   #1
Dr-Mbogo
Human being with feelings
 
Join Date: Feb 2011
Posts: 56
Default MIDI Daten uminterpretieren

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
Dr-Mbogo is offline   Reply With Quote
Old 08-16-2018, 12:53 PM   #2
solger
Human being with feelings
 
solger's Avatar
 
Join Date: Mar 2013
Posts: 5,844
Default

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/mus...m-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
__________________
ReaLauncher

Last edited by solger; 08-16-2018 at 01:10 PM.
solger is offline   Reply With Quote
Old 08-17-2018, 12:03 AM   #3
Dr-Mbogo
Human being with feelings
 
Join Date: Feb 2011
Posts: 56
Default

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.
__________________
www.christianschweyda.de
Dr-Mbogo is offline   Reply With Quote
Old 08-17-2018, 11:29 PM   #4
Dr-Mbogo
Human being with feelings
 
Join Date: Feb 2011
Posts: 56
Default

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;
);
__________________
www.christianschweyda.de
Dr-Mbogo is offline   Reply With Quote
Old 08-18-2018, 04:00 AM   #5
solger
Human being with feelings
 
solger's Avatar
 
Join Date: Mar 2013
Posts: 5,844
Default

Quote:
Originally Posted by Dr-Mbogo View Post
Es ist vollbracht!
Cool
__________________
ReaLauncher
solger is offline   Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -7. The time now is 09:04 AM.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2024, vBulletin Solutions Inc.