Se connecter
Se connecter

ou
Créer un compte

ou

Sujet division d'objets midi

  • 9 réponses
  • 3 participants
  • 509 vues
  • 3 followers
Sujet de la discussion division d'objets midi
bonjour,
j'ai des questions sur la gestion des éléments midi dans reaper:

1) lorsque j'ai un objet MIDI avec mélodie, ligne de basse et accords piano, je voudrais pouvoir diviser le bloc midi en deux avec la mélodie dans un et le reste dans l'autre. Je voudrais donc pouvoir sélectionner une partie des notes midi et faire un split de ce que j'ai sélectionné. Je n'arrive pas à créer de macro pour ça. J'ai tenté un couper / créer bloc midi vide / coller mais je n'ai pas toutes ces fonctions dans le TCP seul ou dans le midi éditeur seul ou dans l'éditeur midi en ligne seul donc pas de macro possible. Pour l'instant je duplique l'objet puis j'efface les notes...

2) Peut-on prendre une partie des notes midi d'un item et les déplacer vers une autre piste par glissé déposé? Là aussi, c'est tout l'objet ou rien.

Merci

...si seulement la musique pouvait servir à quelquechose

 

[ Dernière édition du message le 08/10/2021 à 09:38:10 ]

2
up :fleche:

...si seulement la musique pouvait servir à quelquechose

 

3
Non !!

Ya du son par là :                                      Et de l'image qui bouge aussi :

https://hearthis.at/thierryvastel/                https://www.youtube.com/user/jeranx1

4
Je rigaule...

A part en copié/collé d'objet à objet, je ne vois pas.

Après ya des trucs très spécifiques dans les actions.

Je vois celle-là par exemple : "Script: mpl_Paste MIDI notes to selected item.lua". Cela devrait correspondre mais je n'arrive pas à la faire fonctionner. Mais ça devrait être possible. Et il y en a tellement...

@+

Ya du son par là :                                      Et de l'image qui bouge aussi :

https://hearthis.at/thierryvastel/                https://www.youtube.com/user/jeranx1

[ Dernière édition du message le 21/10/2021 à 18:40:42 ]

5
En prenant le temps de le coder, ça doit être scriptable oui. Pas sur que tu puisse le faire avec des macros.
Si j'ai un peu de temps je vous fait ça.
6
Voilà, j'ai codé ce nouveau script.
Il crée des nouveaux objets MIDI avec une copie des notes sélectionnées, puis efface les notes sélectionnés des objets MIDI sélectionnés.
Ce qui revient à "splitter" les notes sélectionnées d'un objet MIDI.

Voici un lien pour télécharger le fichier LUA.
Testez-le. S'il fonctionne bien chez vous je le partagerai dans ReaPack.

-- @description Split selected notes into new midi items
-- @author Rodilab
-- @version 0.1
-- @about
--   Delete selected notes in selected MIDI items, and create new midi item with selected notes
--   by Rodrigo Diaz (aka Rodilab)

count = reaper.CountSelectedMediaItems(0)

if count > 0 then
  reaper.Undo_BeginBlock()
  reaper.PreventUIRefresh(1)
  
  local trim = reaper.GetToggleCommandState(41117)
  if trim == 1 then
    reaper.Main_OnCommand(41117, 0)
  end
  
  local itemGUID_list = {}
  for i=0, count-1 do
    table.insert(itemGUID_list, reaper.BR_GetMediaItemGUID(reaper.GetSelectedMediaItem(0, i)))
  end
  
  for i, sGUID in ipairs(itemGUID_list) do
    local item = reaper.BR_GetMediaItemByGUID(0, sGUID)
    local take = reaper.GetActiveTake(item)
    local source = reaper.GetMediaItemTake_Source(take)
    local track = reaper.GetMediaItem_Track(item)
    local position = reaper.GetMediaItemInfo_Value(item, 'D_POSITION')
    local length = reaper.GetMediaItemInfo_Value(item, 'D_LENGTH')
    
    if reaper.GetMediaSourceType(source, '') == 'MIDI' then
      local rv, notecnt, ccevtcnt, textsyxevtcnt = reaper.MIDI_CountEvts(take)
      local new_item = reaper.CreateNewMIDIItemInProj(track, position, position+length)
      local new_take = reaper.GetActiveTake(new_item)
      
      for j=0, notecnt-1 do
        j = notecnt-1-j
        local rv, selected, muted, startppqpos, endppqpos, chan, pitch, vel = reaper.MIDI_GetNote(take, j)
        if selected then
          reaper.MIDI_InsertNote(new_take, selected, muted, startppqpos, endppqpos, chan, pitch, vel, true)
          reaper.MIDI_DeleteNote(take, j)
        end
      end
      
      reaper.MIDI_Sort(take)
      reaper.MIDI_Sort(new_take)
    end
  end
  
  if trim == 1 then
    reaper.Main_OnCommand(41117, 0)
  end
  
  reaper.Undo_EndBlock("Split selected notes into new midi items",0)
  reaper.PreventUIRefresh(-1)
  reaper.UpdateArrange()
end
7
Waw, chez moi ça marche parfaitement, merci infiniment d'avoir pris le temps de créer cette fonction que je trouve SUPER MEGA UTILE !
Je ne pensais pas que quelqu'un prendrait le temps de faire ça, c'est très cooooool de ta part.
MERCIIIIIIIIIIIIIIIIIIIIIIIIIIII

...si seulement la musique pouvait servir à quelquechose

 

8
Je t’en prie :)
Ça n’a pas été très long à coder, et ton idée m’a semblé plutôt utile.
Je le partagerai sur ReaPack.
9
Le script est maintenant disponible dans ReaPack sous le nom de « rodilab_Move selected notes to a new MIDI item »
10
hello,
après utilisation, voici un retour sur un petit bug: je ne sais pas exactement dans quelle circonstances ça le fait mais si on timestretch un objet midi et qu'on applique le script, le nouveau fichier midi n'est pas synchro, les notes sont plus serrées ou plus éloignées:
4142820.jpg
4142823.jpg

...si seulement la musique pouvait servir à quelquechose