Old 12-11-2018, 06:48 AM   #1
Aleskis
Human being with feelings
 
Join Date: Jan 2015
Location: Paris
Posts: 296
Default RS5k et Portamento.

Salut à tous,

Sauf erreur, ReaSamplomatic 5000 ne permet pas le portamento . Existe-t-il une manière de ruser, comme ce qu'on peut faire en ajoutant un JS MIDI Choke pour interrompre une note par une autre ?
Sinon, ça ne vous manque pas, tout de même, cette fonction de base ? Comment palliez-vous son absence ?

Merci.
__________________
Reaper X64, Behringer U-Phoria UMC1820, Beyerdynamic DT 770 Pro 250 Ohms, i7-4930K @ 3.40GHz exacore, 16Go DDR3, Win10.
https://www.youtube.com/channel/UC2Z..._as=subscriber
Aleskis is offline   Reply With Quote
Old 12-11-2018, 07:02 AM   #2
Vincent Sermonne
Human being with feelings
 
Vincent Sermonne's Avatar
 
Join Date: Feb 2009
Location: Marseille France
Posts: 5,625
Default

Quote:
Originally Posted by Aleskis View Post
Salut à tous,

Sauf erreur, ReaSamplomatic 5000 ne permet pas le portamento . Existe-t-il une manière de ruser, comme ce qu'on peut faire en ajoutant un JS MIDI Choke pour interrompre une note par une autre ?
Sinon, ça ne vous manque pas, tout de même, cette fonction de base ? Comment palliez-vous son absence ?

Merci.
il existe un JS MIDI glissando
__________________
Vincent
http://www.tchackpoum.fr
Vincent Sermonne is online now   Reply With Quote
Old 12-12-2018, 12:49 PM   #3
Aleskis
Human being with feelings
 
Join Date: Jan 2015
Location: Paris
Posts: 296
Default

Euh. Non. Pas par défaut du moins. Ou pas sous ce nom.
__________________
Reaper X64, Behringer U-Phoria UMC1820, Beyerdynamic DT 770 Pro 250 Ohms, i7-4930K @ 3.40GHz exacore, 16Go DDR3, Win10.
https://www.youtube.com/channel/UC2Z..._as=subscriber
Aleskis is offline   Reply With Quote
Old 12-12-2018, 01:30 PM   #4
Vincent Sermonne
Human being with feelings
 
Vincent Sermonne's Avatar
 
Join Date: Feb 2009
Location: Marseille France
Posts: 5,625
Default

Code:
desc: MIDI Glissando
version: 0.1
author: urtzurd (Urtzi Urdapilleta Roy)
about:
  Mono/poly MIDI chromatic glissando FX with adjustable note delay
changelog:
  Initial release

slider1:1<1, 16, 1>MIDI Channel
slider2:1<1, 16, 1>Polyphony
slider3:50<10, 250, 1>Time (ms)

in_pin:none
out_pin:none

// ----------------------------------------------------------------------------

@init
max_poly = 16;

v_on    = max_poly * 0; // On/off status
v_delay = max_poly * 1; // Current accumulated delay in seconds
v_ckey  = max_poly * 3; // Current key
v_tkey  = max_poly * 4; // Target key
v_vel   = max_poly * 5; // Velocity used when the voice was triggered

function initVoices() local(i) (
  i = 0;
  loop(max_poly,
    v_on[i] = 0;
    v_delay[i] = 0;
    v_ckey[i] = -1;
    v_tkey[i] = -1;
    v_vel[i] = -1;
    i += 1;
  );
);

initVoices();

// ----------------------------------------------------------------------------

@slider
cur_chn = slider1 - 1;
slider2 < cur_poly ? (
  // When reducing polyphony, send all notes off during the next block
  sendAllNotesOff = 1;
);
cur_poly = slider2;
delay_secs = slider3 / 1000;

// ----------------------------------------------------------------------------

@block
secs_per_block = samplesblock / srate;
sendAllNotesOff == 1 ? (
  initVoices();
  midisend(0, 0xB0 | cur_chn, 0x7B, 0x00);
  sendAllNotesOff = 0;
);

function isNoteOn(msg1, msg2, msg3) local(msg_type, msg_chn) (
  msg_type = msg1 >> 4;
  msg_chn = msg1 & 0x0F;
  msg_chn == cur_chn && msg_type == 9 && msg3 != 0;
);

function isNoteOff(msg1, msg2, msg3) local(msg_type, msg_chn) (
  msg_type = msg1 >> 4;
  msg_chn = msg1 & 0x0F;
  msg_chn == cur_chn && (msg_type == 8 || (msg_type == 9 && msg3 == 0));
);

function sendNoteOn(offset, key, vel) (
  midisend(offset, 0x90 | cur_chn, key, vel);
);

function sendNoteOff(offset, key) (
  midisend(offset, 0x80 | cur_chn, key, 0x00);
);

function nextVoiceIndex(key) local(i, j, last, min_dist, cur_dist) (
  // First try to find an unallocated voice, starting from the last one used
  i = -1;
  j = last % cur_poly;
  loop(cur_poly,
    v_on[j] == 0 && i == -1 ? (
      i = j;
    );
    j = (j + 1) % cur_poly;
  );

  // If there are no unallocated voices, steal the nearest one
  i == -1 ? (
    i = 0;
    j = 0;
    min_dist = 128;
    loop(cur_poly,
      cur_dist = abs(v_ckey[j] - key);
      cur_dist < min_dist ? (
        min_dist = cur_dist;
        i = j;
      );
      j += 1;
    );
  );

  last = i;
);

function getVoiceIndex(key) local(i) (
  i = 0;
  while((v_tkey[i] != key || v_on[i] == 0) && i < cur_poly) (
    i += 1;
  );
  i == cur_poly ? -1 : i;
);

function slideVoice(i) (
  v_ckey[i] != v_tkey[i] ? (
    v_ckey[i] += v_tkey[i] > v_ckey[i] ? 1 : -1;
  );
);

// Process any incoming MIDI events
while(midirecv(offset, msg1, msg2, msg3)) (
  isNoteOn(msg1, msg2, msg3) ? (
    v = nextVoiceIndex(msg2);

    v_on[v] == 1 ? (
      // Note stealing, send note off for the current key
      sendNoteOff(offset, v_ckey[v]);
    ) : (
      v_on[v] = 1;
    );

    v_delay[v] = 0;
    v_ckey[v] == -1 ? (
      v_ckey[v] = msg2;
    );
    v_tkey[v] = msg2;
    v_vel[v] = msg3;

    slideVoice(v);
    sendNoteOn(offset, v_ckey[v], v_vel[v]);
  ) : (
    isNoteOff(msg1, msg2, msg3) ? (
      i = getVoiceIndex(msg2);
      i != -1 ? (
        v_on[i] = 0;
        sendNoteOff(offset, v_ckey[i]);
      );
    ) : (
      // Pass-through any other MIDI events
      midisend(offset, msg1, msg2, msg3);
    );
  );
);

// Apply the glissando effect on the active voices
i = 0;
loop(cur_poly,
  v_on[i] && v_ckey[i] != v_tkey[i] ? (
    v_delay[i] + secs_per_block < delay_secs ? (
      v_delay[i] += secs_per_block;
    ) : (
      offset = srate * (delay_secs - v_delay[i]);
      getVoiceIndex(v_ckey[i]) == -1 ? (
        // Only send note off if no other voice has reached the same key
        sendNoteOff(offset, v_ckey[i]);
      );
      slideVoice(i);
      sendNoteOn(offset, v_ckey[i], v_vel[i]);
      v_delay[i] = 0;
    )
  );
  i += 1;
);
Tu sauvegardes sans extension dans le dossier ressource/effect
__________________
Vincent
http://www.tchackpoum.fr
Vincent Sermonne is online now   Reply With Quote
Old 12-13-2018, 12:25 AM   #5
Aleskis
Human being with feelings
 
Join Date: Jan 2015
Location: Paris
Posts: 296
Default

Merci Vincent. Quel logiciel ce REAPER. Pouvoir s'échanger des ajouts de fonctionnalités simplement en collant du code sur un forum.
Malheureusement, ce n'est pas tout à fait ce que je cherche. Les notes passent de demi ton en demi ton pour atteindre la note cible. A la place, il faudrait plutôt une sorte de pitch bend continu jusqu'à la note cible. Un portamento / glid quoi.

Bon matin à tous.
__________________
Reaper X64, Behringer U-Phoria UMC1820, Beyerdynamic DT 770 Pro 250 Ohms, i7-4930K @ 3.40GHz exacore, 16Go DDR3, Win10.
https://www.youtube.com/channel/UC2Z..._as=subscriber
Aleskis is offline   Reply With Quote
Old 12-13-2018, 01:31 AM   #6
sardonicus
Human being with feelings
 
sardonicus's Avatar
 
Join Date: Jan 2010
Posts: 6,364
Default

Et en faisant une automation sur le paramètre "pitch offset" ou en lui assignant un contrôleur?
__________________
Ignorance ou indifférence: J'en sais rien et je m'en fous.
sardonicus 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 10:52 AM.


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