webGandalf
06-20-2010, 01:26 AM
Hallo zusammen
Ich suche nach einem Weg innerhalb eines Midi-Tracks das "Note Off" Event auszufiltern. Mir ist bewusst, dass das bei bspw. bei Syntis gefährlich sein kann. Wenn aber Sampels von einer Drum abgefeuert werden sollen, kann dies notwendig werden weil die Drum gleich nach dem "Note On" Event den "Note Off" hinterher schickt.
Im Moment mache ich das, indem ich MIDI-OX vorschalte und dort das "Note Off" Event ausfiltere und auf einen Virtuellen Midi-Port route. Ich würde das aber gerne direkt mittels einem FX im entsprechenden Track innerhalb von Reaper machen.
Gibt es da eine Möglichkeit? Alle Midi-Filter die ich finde sind nur auf reine Tonhöhen anwendbar und nicht auf Events.
Grüsse Dieter
gofer
06-20-2010, 04:04 AM
Man könnte sicherlich ein JS plugin stricken das Note-Offs (und Note-On velocity=0) rausfiltert, aber üblicherweise würde man dem Sampler sagen dass er das betreffende Sample im sogenannten "One Shot" Modus abspielen soll. Das heisst, dass das Sample nicht von einem Note-Off abgebrochen wird, sondern bis zum bittren Ende durchgespielt wird.
Das ist wesentlich ungefährlicher als Note-Offs komplett rauszufiltern. Ich kenne keinen Sampler der das nicht kann. Normalerweise ist es ein Abspielparameter auf Sample-Basis.
In Cockos' ReaSamplomatic heisst es "Obey note-off messages".
Diese JesuSonic Script File sollte tun was du willst:
desc:No note off
@block
while(
midirecv(offset,msg1,msg23) ?
(
(msg1&$xF0) != $x80 ?
midisend(offset, msg1, msg23) : 1;
);
);
webGandalf
06-20-2010, 04:18 AM
Herzlichen Dank Ihr beide.
Ich verwende DigiDrum Pro welches leider keinen "On Shot" Modus kennt. Habe mich deshalb vorhin selber an ein JS Script gewagt - Mein erstes :)
Herausgekommen ist jetzt das folgende:
desc:"Note Off" Events will filter out for the Track
slider1:0<0,2,1{-,All Notes Off}>PANIC: All Notes Off
@init
@slider
slider1 == 1 ? (
panic = 1;
);
@block
while (
panic == 1 ? (
midisend(ts,$xB0,123|(0*256));
midisend(ts,$xB1,123|(0*256));
midisend(ts,$xB2,123|(0*256));
midisend(ts,$xB3,123|(0*256));
midisend(ts,$xB4,123|(0*256));
midisend(ts,$xB5,123|(0*256));
midisend(ts,$xB6,123|(0*256));
midisend(ts,$xB7,123|(0*256));
midisend(ts,$xB8,123|(0*256));
midisend(ts,$xB9,123|(0*256));
midisend(ts,$xBA,123|(0*256));
midisend(ts,$xBB,123|(0*256));
midisend(ts,$xBC,123|(0*256));
midisend(ts,$xBD,123|(0*256));
midisend(ts,$xBE,123|(0*256));
midisend(ts,$xBF,123|(0*256));
slider1 = 0;
panic = 0;
);
);
while (
midirecv(ts,msg1,msg23) ? (
statusHi = (msg1 / 16) | 0;
statusLo = msg1 - (statusHi * 16);
data2 = (msg23 / 256) | 0;
data1 = msg23 - (data2 * 256);
statusHi != 8 ? (
data2 != 0 ? (
midisend(ts,msg1,msg23)
);
);
);
);
@sample
Scheint zu funktionieren...
Und sollte es doch einmal passieren, dass dieses Script am falschen Ort eingesetzt wird und es zu Endlostönen kommt habe ich gleich noch versucht eine Panic-Funktion einzubauen. Bei mir scheint sie zu funktionieren. Ich hoffe das trifft auf alle Situationen zu, die ich mit diesem Script verursachen könnte.
Wenn da jemand noch einen Fehler findet bin ich natürlich für hilfe Dankbar.
Andernfalls ist jeder dem das dient herzlich eingeladen es selber zu verwenden.
vBulletin® v3.8.11, Copyright ©2000-2025, vBulletin Solutions Inc.