Publicité

Annonce

Réduire
Aucune annonce.

Ecrire un scipt dans Kontakt

Réduire
X
 
  • Filtre
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages

  • Ecrire un scipt dans Kontakt

    Bonjour,
    J'ai des instruments virtuels dans kontakt (des cordes) chaque articulation est sur un canal midi différent.
    Je voudrais écrire un script sous kontakt tout simple :
    lorsque kontakt reçoit une note sur un canal midi spécifique, kontakt répond sur un canal midi spécifié.
    Pour essayer d'être clair :
    C0 sur canal 1 ----> l'instrument reglé sur canal 1 répond
    C#0 sur canal 1 ----> l'instrument réglé sur canal 2 répond
    D0 sur canal 1 ----> l'instrument réglé sur canal 3 répond
    D#0 sur canal 1 ---> l'instrument réglé sur canal 4 répond

    C0 sur canal 2 ----> l'instrument régé sur canal 5 répond
    C#0 sur canal 2 ----> l'instrument réglé sur canal 6 répond

    et au delà du canal 16 pouvoir basculer sur les autres ports kontakt

    etc....
    c'est tout simplement pour pouvoir utiliser des Keyswitch pour piloter des canaux midi différents

    Quelqu'un aurait-il une astuce
    Merci
    jpex
    Dernière modification par Invité, 10 avril 2017, 06h39. Motif: Ortho du titre

  • #2
    La dernière fois que j'ai voulu faire quelque chose d'approchant, c'était un script Reaper. (Il s'agissait d'activer des registres d'un orgue de Barbarie).

    Je viens d'ouvrir le Kontakt Script Language Manual et fait un recherche plein texte de "channel" : pas trouvé (sauf 2 occurences qui ne sont pas pertinentes). J'en déduis que ce que tu as décris risque fort de ne pas être possible.

    Ceci-dit, c'est assez rare d'avoir besoin de changer de canal par script. Le besoin est en général de basculer d'un jeu de notes à un autre. Le manuel décrit l'usage d'une déclaration "on note" qui intercepte les évènements "note on". Logiquement, on trouve un "play_note" qui permet de jouer une note. (Ma compréhension est qu'il ajoute une note, il faut peut-être utiliser "ignore_event" pour éviter de se retrouver avec 2 notes). Il suffit alors de calculer les notes à sortir d'après des variables d'état (articulation choisie) elles même mises à jour d'après les mêmes évènements "note on". Si les articulations sont chacune dans une banque séparée, il sera plutôt question de jouer la note ou pas selon si l'articulation est choisie. Pas sûr qu'un script puisse être sur plusieurs canaux. Cela va poser problème si tu souhaites différentier le C0 canal 1 du C0 du canal 2... C'est là où un DAW scriptable (comme Reaper) est le bien venu. (Mais ce dernier ne gère pas les ports de Kontakt : tout va sur le A). On peut aussi avoir un canal MIDI par groupe de 4 articulations, chacun géré indépendamment. (Il faut juste éviter de changer de canal lorsqu'une touche est enfoncée )

    NB: Je ne dispose que de Kontakt Player qui ne permet pas de définir de scripts (juste utiliser ceux intégrés aux bibliothèques achetées). Ma lecture ne me permet que de comprendre les grandes lignes, il me faudrait pratiquer pour connaître les points de détail.
    Dernière modification par floyer, 10 avril 2017, 08h17.
    http://www.sinerj.org/~loyer/piano/

    It's never too late to learn to play the piano. (tip of the day)

    Côté piano : Yamaha N1X, pianos VSL Syncron et Vienna Imperial, Garritan CFX, Bechstein Digital Grand, Ivory, Galaxy et beaucoup d’autres pianos virtuels - Côté synthé : Roland A-500 Pro, Native-Instruments Komplete 13, Arturia V Collection 9, Korg Collection 3, Air Music Technology plugins, OP-X Pro II, dexed (émulateur DX7 libre), Yamaha S-YXG50 - DAW : Reaper 6, Cubase Artist 9 - Interface audio : Steinberg UR22 - Casque : AKG K-702

    Commentaire


    • #3
      De même, je ne suis pas du tout un spécialiste des scripts pour Kontakt. Mais je m'étais posé la question quand j'ai souhaité pouvoir enlever le filtre du Kontakt player qui bloque l'ajustement des hauteurs via les midicents via les données du Pitch Bend sur les instruments de base comme le trombone ou le violoncelle. Sur ces deux instruments qui ont une couleur intéressante, on peut les jouer en quart de tons mais pas au-delà et encore moins pouvoir les ajuster sur des fréquences non tempérées alors qu'on peut le faire sans aucun problème avec l'UviWorkStation ou le Falcon d'Uvi. Geronimo, qui a pas mal travaillé sur les scripts de Kontakt avait "planché" sur cette question, en la posant notamment sur des forums spécialisés, mais sans succès.
      Ceci étant, je suppose que Geronimo, en découvrant ton message va très certainement te répondre et peut-être te donner une solution.

      Commentaire


      • #4
        Le fonctionnement par quart de ton semble assez particulier, et semble être une caractéristique de l'instrument. De toute façon, avec Kontakt Player, le principe est de prendre l'instrument tel qu'il est livré. Je ne vois pas de solution.
        http://www.sinerj.org/~loyer/piano/

        It's never too late to learn to play the piano. (tip of the day)

        Côté piano : Yamaha N1X, pianos VSL Syncron et Vienna Imperial, Garritan CFX, Bechstein Digital Grand, Ivory, Galaxy et beaucoup d’autres pianos virtuels - Côté synthé : Roland A-500 Pro, Native-Instruments Komplete 13, Arturia V Collection 9, Korg Collection 3, Air Music Technology plugins, OP-X Pro II, dexed (émulateur DX7 libre), Yamaha S-YXG50 - DAW : Reaper 6, Cubase Artist 9 - Interface audio : Steinberg UR22 - Casque : AKG K-702

        Commentaire


        • #5
          Bien Merci pour vos réponses,
          je vais attendre Géronimo

          Commentaire


          • #6
            Envoyé par jpex Voir le message
            c'est tout simplement pour pouvoir utiliser des Keyswitch pour piloter des canaux midi différents

            Quelqu'un aurait-il une astuce
            Bon, je tombe tardivement par hasard sur cette question intéressante, pas banale mais pas du tout facile à résoudre, Avec mon expérience moyenne autour des Scripts, je pense d'abord qu'un simple Script pour KONTAKT ne permettra pas de satisfaire ta demande mais je peux me tromper . Néanmoins, un Script s'adresse et s'insère dans un seul Instrument or tu en a plusieurs, dans ton scénario .

            J'ai donc regardé la partie concernant le Multi Script à la page 236 du manuel des Scripts fourni par Native Instruments et n'entrevois pas de solution également .
            J'ai ensuite pensé à regarder du côté d'une Librairie ayant un Multi Script gérant plusieurs Instruments comme "Morphestra Génération" par l'éditeur Sample LOGIC .

            MultiScript.jpg


            En regardant les conditions posées autour de ton problème, l'idéal serait d'empiler tes Instruments individuellement dans une Configuration Multichannel dans KONTAKT et de mapper sur le clavier correctement tes Instruments afin qu'ils se retrouvent sur la note désirée du clavier . Chaque Instrument réglé sur le mode omni répondra à tous les canaux MIDI ou un seul .
            Précision: avec KONTAKT en mode Standalone, tu as un grand nombre possible d'Instruments pouvant s'ouvrir alors que le mode de KONTAKT en Plug-in te limite à 16 Instruments .
            Le problème posé est intéressant et mérite encore d'y réfléchir; j'espère que toutes ces approches permettront la concrétisation de ton Projet .
            MacPro 2 X 3,06 Ghz & Apple 20" X 2 _ 24 Go de RAM _ SIERRA 10.12.4. _ Digital Performer 9.42 & Komplete 7 _ Eventide DSP 7000 & Virus C _ Gibson Explorer Pro & Adrenalinn III _ Gibson ES-295 & KORE 2 _ UAD-2 Quad + Duo _ TEMPEST Dave Smith _ KORG MS-20 mini _
            http://www.youtube.com/watch?v=SxV67...layer_embedded

            Commentaire


            • #7
              Envoyé par geronimo Voir le message
              Précision: avec KONTAKT en mode Standalone, tu as un grand nombre possible d'Instruments pouvant s'ouvrir alors que le mode de KONTAKT en Plug-in te limite à 16 Instruments .
              Mon côté "pointilleux" m'obliger à préciser : en mode plug-in, on peut charger jusqu'à 64 instruments... mais comme on n'a que 16 canaux utilisables, le DAW ne peux pas les adresser chacun individuellement. (Je note que la limitation à 16 est liée à l'intégration VST... je me demandais si c'était dû à Reaper ou que sais-je. Je me demande aussi si l'on peut mieux faire en AudioUnit, RTAS, AAX)

              Après lecture du passage sur les MultiScript, il semble que c'est bien plus simple que ce que je pensais. (J'avais zappé le MultiScript.... car absent du premier manuel trouvé sur le Net !! Merci geronimo !!! Ceci-dit, je ne suis toujours pas à jour, car j'ai désormais le manuel de la version 4.2.0). Et cela supporte les 64 canaux :

              Since Kontakt can handle four different MIDI ports, this number can go from 0 - 63 (four ports x 16 MIDI channels)
              Cela permet d'exploiter des canaux inaccessibles directement par le DAW en mode Plugin.

              PS: Je viens de voir que Kontakt Player a un bouton "KSP"... Je vais faire quelques essais...

              EDIT : C'est OK. Le Multiscript suivant prends les notes 24 à 28 (5 notes à partir de C1), et leur fait associer des canaux de 1 à 5 du port A pour le premier canal, 6 à 10 pour le deuxième canal, etc). Au delà des 16 canaux, cela continue en B-1, B/2, etc.

              Tu choisis ton canal, enfonce sur une de ces touches, et tout ce que tu joueras ensuite sera aiguillé vers le bon canal. Le changement de canal n'a aucun effet tant que tu ne choisis pas les touches particulières. Le changement d'instrument affiche un message dans la barre de statut (Canal 1 = le premier... pas de convention à 0, et 17 = B-1)

              Pour installer le script (sur Kontakt Player) juste après les 0-16 17-32 33-48 et 49-64, tu as un bouton KSP. Sur des vidéos de Kontakt, il semble que le bouton affiche un dessin au lieu de KSP. En cliquant dessus, tu as une fenêtre d'édition. Tu choisis ton nom de script, copier-coller, Apply.... et surtout Preset / Save Preset (sinon, cela ne supportera pas le redémarrage).

              Code:
              on init
                declare $target_channel := 0
                declare const $first_note := 24
                declare const $last_note := 28
              end on
              
              on midi_in
                 if ($MIDI_COMMAND = $MIDI_COMMAND_NOTE_ON)
                     if ($MIDI_BYTE_1 >= $first_note and $MIDI_BYTE_1 <= $last_note)
                        $target_channel := ($MIDI_BYTE_1 - $first_note) + $MIDI_CHANNEL * ($last_note-$first_note+1)
                        message ("New channel " & 1+$target_channel)
                        ignore_midi
                     else 
                        set_event_par($EVENT_ID, $EVENT_PAR_MIDI_CHANNEL, $target_channel)
                     end if
                end if
                 if ($MIDI_COMMAND = $MIDI_COMMAND_NOTE_OFF)
                     if ($MIDI_BYTE_1 >= $first_note and $MIDI_BYTE_1 <= $last_note)
                        ignore_midi
                     else 
                        set_event_par($EVENT_ID, $EVENT_PAR_MIDI_CHANNEL, $target_channel)
                     end if
                end if
              end on
              PS: J'ai été flemme sur ce coup là : il n'y a que les notes on et les notes off... tu risques d'avoir des surprises avec la pédale forte, le pitchbend ou que sais-je !
              Dernière modification par floyer, 08 mai 2017, 20h54.
              http://www.sinerj.org/~loyer/piano/

              It's never too late to learn to play the piano. (tip of the day)

              Côté piano : Yamaha N1X, pianos VSL Syncron et Vienna Imperial, Garritan CFX, Bechstein Digital Grand, Ivory, Galaxy et beaucoup d’autres pianos virtuels - Côté synthé : Roland A-500 Pro, Native-Instruments Komplete 13, Arturia V Collection 9, Korg Collection 3, Air Music Technology plugins, OP-X Pro II, dexed (émulateur DX7 libre), Yamaha S-YXG50 - DAW : Reaper 6, Cubase Artist 9 - Interface audio : Steinberg UR22 - Casque : AKG K-702

              Commentaire


              • #8
                Oui, je pense que cela peut aider notre ami jpex: peut-être ajouter des label-témoins de numéro de canal et de notes pour l'interface MultiScript, non ?
                En prévision de cela, élargir la fenêtre du Script avec la mention qui va bien: set_ui_height(2)
                ou alors: set_ui_height(3)

                C'est histoire de l'étoffer et pourquoi pas le démarrer, petit à petit . Par exemple, pour le titre de ce futur Script insérer également la ligne suivante: set_script_title("Canal change")

                Sinon, j'ai regardé parmi ceux proposés par Native Instruments mais aucun ne convient au scénario demandé par jpex . Faudrait qu'il nous réponde, un peu _

                MultiScript.jpg
                MacPro 2 X 3,06 Ghz & Apple 20" X 2 _ 24 Go de RAM _ SIERRA 10.12.4. _ Digital Performer 9.42 & Komplete 7 _ Eventide DSP 7000 & Virus C _ Gibson Explorer Pro & Adrenalinn III _ Gibson ES-295 & KORE 2 _ UAD-2 Quad + Duo _ TEMPEST Dave Smith _ KORG MS-20 mini _
                http://www.youtube.com/watch?v=SxV67...layer_embedded

                Commentaire


                • #9
                  En me basant sur ton premier Script, foyer et avec l'idée que les valeurs montent aussi dans la GUI du MultiScript, voici un petit exemple où j'ai ajouté les valeurs des contrôleurs MIDI également .

                  Code:
                  on init 
                    set_ui_height(2)
                    set_script_title("       Canal change")
                    declare $target_channel := 0
                    declare const $first_note := 24
                    declare const $last_note := 28
                    declare const $ROOT_X := 66
                    declare const $ROOT_Y := 2
                    declare const $GRID_X := 92
                    declare const $GRID_Y := 21
                    declare $count
                  
                  
                          {control MIDI value}
                  
                  
                     declare ui_label $label_1 (3,1)
                      set_text ($label_1,"MIDI  CC")
                      move_control_px ($label_1,390+$ROOT_X,14)
                      declare $label_id
                      $label_id := get_ui_id($label_1)
                      set_control_par ($label_id,$CONTROL_PAR_TEXT_ALIGNMENT,1)
                      set_control_par ($label_id,$CONTROL_PAR_WIDTH,110)
                  
                  
                      declare ui_label $readout_label2(2,1)
                      set_text ($readout_label2,"Controller")
                      move_control_px ($readout_label2,360+$ROOT_X,45)
                      set_control_help ($readout_label2,"    Displays the Controller MIDI values .")
                      declare $readout_label2_id
                      $readout_label2_id := get_ui_id($readout_label2)
                      set_control_par ($readout_label2_id,$CONTROL_PAR_TEXT_ALIGNMENT,1)
                      set_control_par ($readout_label2_id,$CONTROL_PAR_WIDTH,150)
                      set_control_par($readout_label2_id,$CONTROL_PAR_FONT_TYPE,4)
                   
                          {NOTE value}
                  
                  
                  declare ui_label $Scale_label (1,1)
                      set_text ($Scale_label,"   Control MIDI")
                      move_control_px ($Scale_label,0+$ROOT_X,14)
                  
                  
                      
                      declare ui_label $readout_label(2,1)
                      set_text ($readout_label,"Note Out :")
                      move_control_px ($readout_label,10+$ROOT_X,45)
                      set_control_help ($readout_label,"    Displays the MIDI NOTE messages.")
                      declare $readout_label_id
                      $readout_label_id := get_ui_id($readout_label)
                      set_control_par ($readout_label_id,$CONTROL_PAR_TEXT_ALIGNMENT,1)
                      set_control_par ($readout_label_id,$CONTROL_PAR_WIDTH,230)
                      set_control_par($readout_label_id,$CONTROL_PAR_FONT_TYPE,4)
                  
                  
                  end on
                  
                  
                  on midi_in
                     if ($MIDI_COMMAND = $MIDI_COMMAND_NOTE_ON and $MIDI_BYTE_2 > 0)
                         if ($MIDI_BYTE_1 >= $first_note and $MIDI_BYTE_1 <= $last_note)
                            $target_channel := ($MIDI_BYTE_1 - $first_note) + $MIDI_CHANNEL * ($last_note-$first_note+1)
                            message ($MIDI_BYTE_1 & "    New channel:   " & 1+$target_channel)
                          set_text ($readout_label," NOTE: " & $MIDI_BYTE_1 & "   on MIDI Channel " & 1+$target_channel)
                            ignore_midi
                         else 
                            set_event_par($EVENT_ID, $EVENT_PAR_MIDI_CHANNEL, $target_channel)
                            
                         end if
                    end if
                     if ($MIDI_COMMAND = $MIDI_COMMAND_NOTE_OFF or ($MIDI_COMMAND = $MIDI_COMMAND_NOTE_ON and $MIDI_BYTE_2 = 0))
                         if ($MIDI_BYTE_1 >= $first_note and $MIDI_BYTE_1 <= $last_note)
                            ignore_midi
                         else 
                            set_event_par($EVENT_ID, $EVENT_PAR_MIDI_CHANNEL, $target_channel)
                         end if
                    end if
                  
                  
                     if ($MIDI_COMMAND = $MIDI_COMMAND_CC)
                            message ($MIDI_BYTE_1 & "  value:  " & $MIDI_BYTE_2)
                          set_text ($readout_label2," Ctrl: " & $MIDI_BYTE_1 & "   value: " & $MIDI_BYTE_2)
                         end if
                  end on

                  J'ai évidemment laissé l'apparition des messages dans le bas de la GUI de KONTAKT et ai rectifié un problème de Note Off non détecté en ajoutant un bout de code (dans la partie NOTE_OFF) prenant en compte le fait que certains claviers MIDI utilisent une note avec une vélocité sur 0 pour désigner une commande note off.

                  Et moi également, j'avais assez zappé ces MultiScripts et découvre que cela peut se révéler bien utile . C'est la première fois que j'insère du code dans un message; c'est bien pratique comme fonction .
                  Faut dire que c'est assez rare de discuter de ce genre de choses .
                  MacPro 2 X 3,06 Ghz & Apple 20" X 2 _ 24 Go de RAM _ SIERRA 10.12.4. _ Digital Performer 9.42 & Komplete 7 _ Eventide DSP 7000 & Virus C _ Gibson Explorer Pro & Adrenalinn III _ Gibson ES-295 & KORE 2 _ UAD-2 Quad + Duo _ TEMPEST Dave Smith _ KORG MS-20 mini _
                  http://www.youtube.com/watch?v=SxV67...layer_embedded

                  Commentaire


                  • #10
                    Je note qu'avec l'IHM, cela double de taille.

                    Attention, pour les CC, il y a un set_event_par... qui doit être l'essentiel du traitement (réponse depuis un iPhone, ce qui explique l'absence de contreproposition que je ne peux tester). Accessoirement, le pitchbend et les aftertouch... mais plutôt orienté piano, j'ai tendance à privilégier les CC (sustain,susteneto,una corda... vous en connaissez d'autres?)

                    Le bug du NoteOn 0 de ma proposition est mineur : cela déclenche un changement de canal sur un relâcher de touche (en plus du changement redondant sur l'enfoncement). Mais comme je suis puriste, j'apprécie la correction que tu apportes.
                    Dernière modification par floyer, 09 mai 2017, 18h20.
                    http://www.sinerj.org/~loyer/piano/

                    It's never too late to learn to play the piano. (tip of the day)

                    Côté piano : Yamaha N1X, pianos VSL Syncron et Vienna Imperial, Garritan CFX, Bechstein Digital Grand, Ivory, Galaxy et beaucoup d’autres pianos virtuels - Côté synthé : Roland A-500 Pro, Native-Instruments Komplete 13, Arturia V Collection 9, Korg Collection 3, Air Music Technology plugins, OP-X Pro II, dexed (émulateur DX7 libre), Yamaha S-YXG50 - DAW : Reaper 6, Cubase Artist 9 - Interface audio : Steinberg UR22 - Casque : AKG K-702

                    Commentaire


                    • #11
                      Envoyé par floyer Voir le message
                      Je note qu'avec l'IHM, cela double de taille.

                      Attention, pour les CC, il y a un set_event_par... qui doit être l'essentiel du traitement (réponse depuis un iPhone, ce qui explique l'absence de contreproposition que je ne peux tester).
                      C'est quoi l'IHM ?

                      Pour les CC, je viens de découvrir que le Pitchbend se code à part dans les multiscripts .
                      MacPro 2 X 3,06 Ghz & Apple 20" X 2 _ 24 Go de RAM _ SIERRA 10.12.4. _ Digital Performer 9.42 & Komplete 7 _ Eventide DSP 7000 & Virus C _ Gibson Explorer Pro & Adrenalinn III _ Gibson ES-295 & KORE 2 _ UAD-2 Quad + Duo _ TEMPEST Dave Smith _ KORG MS-20 mini _
                      http://www.youtube.com/watch?v=SxV67...layer_embedded

                      Commentaire


                      • #12
                        Finalement, ma contribution, basée sur la tienne...

                        Code:
                        on init 
                           set_ui_height(1)
                           set_script_title("       Canal change")
                           declare $target_channel := 0
                           declare @target_channel_text
                           @target_channel_text := "A-1"
                           message("[A-1]")
                           declare const $first_note := 24
                           declare const $last_note := 28
                           declare const $ROOT_X := 66
                           declare const $ROOT_Y := 2
                           declare const $GRID_X := 92
                           declare const $GRID_Y := 21
                           declare $count
                           declare $cmd
                        
                           declare !ports[4]
                           !ports[0] := "A"
                           !ports[1] := "B"
                           !ports[2] := "C"
                           !ports[3] := "D"
                            
                            declare ui_label $readout_label(2,1)
                            set_text ($readout_label,"Target channel : A-1")
                            move_control_px ($readout_label,10+$ROOT_X,20)
                            set_control_help ($readout_label,"    Displays the taget channel.")
                            declare $readout_label_id
                            $readout_label_id := get_ui_id($readout_label)
                            set_control_par ($readout_label_id,$CONTROL_PAR_TEXT_ALIGNMENT,1)
                            set_control_par ($readout_label_id,$CONTROL_PAR_WIDTH,230)
                            set_control_par($readout_label_id,$CONTROL_PAR_FONT_TYPE,4)
                        end on
                        
                        on midi_in
                           $cmd := $MIDI_COMMAND
                           if ($MIDI_COMMAND = $MIDI_COMMAND_NOTE_ON and $MIDI_BYTE_2 = 0)
                               $cmd := $MIDI_COMMAND_NOTE_OFF
                           end if
                           select ($cmd)
                           case $MIDI_COMMAND_NOTE_ON
                               if ($MIDI_BYTE_1 >= $first_note and $MIDI_BYTE_1 <= $last_note)
                                  $target_channel := ($MIDI_BYTE_1 - $first_note) + $MIDI_CHANNEL * ($last_note-$first_note+1)
                                  @target_channel_text := !ports[$target_channel/16] & "-"  & 1+$target_channel mod 16
                                  set_text ($readout_label,"Target channel: " & @target_channel_text)
                                  ignore_midi
                               else
                                  set_event_par($EVENT_ID, $EVENT_PAR_MIDI_CHANNEL, $target_channel)
                               end if
                               message ("[" & @target_channel_text & "] Note on (" & $MIDI_BYTE_1 & "," & $MIDI_BYTE_2 & ") on channel " & $MIDI_CHANNEL+1)
                           case $MIDI_COMMAND_NOTE_OFF
                              message ("[" & @target_channel_text & "] Note off (" & $MIDI_BYTE_1  & ") on channel " & $MIDI_CHANNEL+1)
                              if ($MIDI_BYTE_1 >= $first_note and $MIDI_BYTE_1 <= $last_note)
                                 ignore_midi
                              else 
                                 set_event_par($EVENT_ID, $EVENT_PAR_MIDI_CHANNEL, $target_channel)
                              end if
                           case $MIDI_COMMAND_CC
                              message ("[" & @target_channel_text & "] Control Change (" & $MIDI_BYTE_1  & "," & $MIDI_BYTE_2 & ") on channel " & $MIDI_CHANNEL+1)
                              set_event_par($EVENT_ID, $EVENT_PAR_MIDI_CHANNEL, $target_channel)
                           case $MIDI_COMMAND_PITCH_BEND
                              message ("[" & @target_channel_text & "] Pitchbend (" & $MIDI_BYTE_1  & "," & $MIDI_BYTE_2 & ") on channel " & $MIDI_CHANNEL+1)
                              set_event_par($EVENT_ID, $EVENT_PAR_MIDI_CHANNEL, $target_channel)
                           case $MIDI_COMMAND_MONO_AT
                              message ("[" & @target_channel_text & "] Channel pressure (" & $MIDI_BYTE_1  & ") on channel " & $MIDI_CHANNEL+1)
                              set_event_par($EVENT_ID, $EVENT_PAR_MIDI_CHANNEL, $target_channel)
                           case $MIDI_COMMAND_POLY_AT
                              message ("[" & @target_channel_text & "] Poly key pressure (" & $MIDI_BYTE_1  & "," & $MIDI_BYTE_2 & ") on channel " & $MIDI_CHANNEL+1)
                              set_event_par($EVENT_ID, $EVENT_PAR_MIDI_CHANNEL, $target_channel)
                           case $MIDI_COMMAND_PROGRAM_CHANGE
                              message ("[" & @target_channel_text & "] Program change (" & $MIDI_BYTE_1  & ") on channel " & $MIDI_CHANNEL+1)
                              set_event_par($EVENT_ID, $EVENT_PAR_MIDI_CHANNEL, $target_channel)
                           case $MIDI_COMMAND_RPN
                              message ("[" & @target_channel_text & "] RPN (" & $MIDI_BYTE_1  & "," & $MIDI_BYTE_2 &") on channel " & $MIDI_CHANNEL+1)
                              set_event_par($EVENT_ID, $EVENT_PAR_MIDI_CHANNEL, $target_channel)
                           case $MIDI_COMMAND_NRPN
                              message ("[" & @target_channel_text & "] NRPN (" & $MIDI_BYTE_1  & "," & $MIDI_BYTE_2 &") on channel " & $MIDI_CHANNEL+1)
                              set_event_par($EVENT_ID, $EVENT_PAR_MIDI_CHANNEL, $target_channel)
                           end select
                        end on
                        J'ai pris le parti de simplifier la partie IHM en haut, avec que l'essentiel : le port de destination. Il s'agit de savoir avec quel instrument on joue. (Sous forme B-13 par exemple pour être plus lisible). L'affichage des événements est dans la barre de statut, ce qui permet de diagnostiquer. Cela est moins apparent, car n'est pas la fonction première. (La destination est aussi rappelée en bas systématiquement... car on n'a pas toujours la page de script sous les yeux, alors que la barre de statut, si).

                        J'en profite pour aiguiller tout les événements disponibles vers le canal de destination. Cela en fait un paquet !

                        Pratique, le script de Native Instrument, "Midi Monitor", cela permet d'afficher les événements modifiés et vérifier ce qui se passe. C'est comme cela que j'ai pu voir que la redirection des Control Change ne redirige pas implicitement les RPN et NRPN.

                        J'ai pu voir que $MIDI_COMMAND est une constante et ne peut être changée... si on essaye, aucune erreur n'est remontée, mais au final, cela ne marche pas.
                        Dernière modification par floyer, 09 mai 2017, 19h52.
                        http://www.sinerj.org/~loyer/piano/

                        It's never too late to learn to play the piano. (tip of the day)

                        Côté piano : Yamaha N1X, pianos VSL Syncron et Vienna Imperial, Garritan CFX, Bechstein Digital Grand, Ivory, Galaxy et beaucoup d’autres pianos virtuels - Côté synthé : Roland A-500 Pro, Native-Instruments Komplete 13, Arturia V Collection 9, Korg Collection 3, Air Music Technology plugins, OP-X Pro II, dexed (émulateur DX7 libre), Yamaha S-YXG50 - DAW : Reaper 6, Cubase Artist 9 - Interface audio : Steinberg UR22 - Casque : AKG K-702

                        Commentaire


                        • #13
                          Envoyé par floyer Voir le message
                          J'ai pris le parti de simplifier la partie IHM en haut, avec que l'essentiel : le port de destination. Il s'agit de savoir avec quel instrument on joue. (Sous forme B-13 par exemple pour être plus lisible).
                          Tu as bien fait .

                          Sinon, je ne comprends pas ce que tu évoques lorsque tu dis que cela ne fonctionne pas : est-ce pour la tentative de transformer $MIDI_COMMAND ?
                          MacPro 2 X 3,06 Ghz & Apple 20" X 2 _ 24 Go de RAM _ SIERRA 10.12.4. _ Digital Performer 9.42 & Komplete 7 _ Eventide DSP 7000 & Virus C _ Gibson Explorer Pro & Adrenalinn III _ Gibson ES-295 & KORE 2 _ UAD-2 Quad + Duo _ TEMPEST Dave Smith _ KORG MS-20 mini _
                          http://www.youtube.com/watch?v=SxV67...layer_embedded

                          Commentaire


                          • #14
                            En fait, à la place du

                            $cmd := $MIDI_COMMAND_NOTE_OFF

                            J'avais commencé à écrire :

                            $MIDI_COMMAND := $MIDI_COMMAND_NOTE_OFF

                            et utilisais cette valeur. Au résultat, les notes off de mon piano (des note on avec velocity=0) n'étaient pas détectés !

                            D'ailleurs, c'est même pire : si je laisse le "$MIDI_COMMAND := $MIDI_COMMAND_NOTE_OFF", mais utilise quand même la variable $cmd, cela ne marche pas. Comme si le script plantait et s'arrêter de tourner sans afficher d'erreur...

                            Cela m'a obligé à créer une petite variable $cmd qui contient la même chose que $MIDI_COMMAND, sauf pour les NoteOn à 0.

                            Très curieux !
                            http://www.sinerj.org/~loyer/piano/

                            It's never too late to learn to play the piano. (tip of the day)

                            Côté piano : Yamaha N1X, pianos VSL Syncron et Vienna Imperial, Garritan CFX, Bechstein Digital Grand, Ivory, Galaxy et beaucoup d’autres pianos virtuels - Côté synthé : Roland A-500 Pro, Native-Instruments Komplete 13, Arturia V Collection 9, Korg Collection 3, Air Music Technology plugins, OP-X Pro II, dexed (émulateur DX7 libre), Yamaha S-YXG50 - DAW : Reaper 6, Cubase Artist 9 - Interface audio : Steinberg UR22 - Casque : AKG K-702

                            Commentaire


                            • #15
                              Mais c'est ce que je te disais dans un de mes précédents messages et cela est évoqué dans le manuel sur les Scripts de KONTAKT, en page 237 (partie sur les Multiscripts) . La vélocité 0 équivalent à une commande de Note Off pour certains claviers .
                              Envoyé par geronimo Voir le message
                              J'ai évidemment laissé l'apparition des messages dans le bas de la GUI de KONTAKT et ai rectifié un problème de Note Off non détecté en ajoutant un bout de code (dans la partie NOTE_OFF) prenant en compte le fait que certains claviers MIDI utilisent une note avec une vélocité sur 0 pour désigner une commande note off.
                              Voici ce qu'ils recommandent, dans ce manuel et je n'aurai jamais trouvé tout seul, tu t'en doutes .

                              Code:
                              [FONT=CourierNewPSMT]on midi_in[/FONT]      
                                       [FONT=CourierNewPSMT]if ($MIDI_COMMAND = $MIDI_COMMAND_NOTE_ON and $MIDI_BYTE_2 > 0)[/FONT]
                                                      [FONT=CourierNewPSMT] ignore_midi
                                   end if
                              [/FONT]         [FONT=CourierNewPSMT]if ($MIDI_COMMAND = $MIDI_COMMAND_NOTE_OFF or ...
                              ($MIDI_COMMAND = $MIDI_COMMAND_NOTE_ON and $MIDI_BYTE_2 = 0))[/FONT]
                                                      [FONT=CourierNewPSMT] ignore_midi [/FONT]                    
                                              
                                      [FONT=CourierNewPSMT]end if
                              [/FONT]
                              Dernière modification par geronimo, 09 mai 2017, 23h56.
                              MacPro 2 X 3,06 Ghz & Apple 20" X 2 _ 24 Go de RAM _ SIERRA 10.12.4. _ Digital Performer 9.42 & Komplete 7 _ Eventide DSP 7000 & Virus C _ Gibson Explorer Pro & Adrenalinn III _ Gibson ES-295 & KORE 2 _ UAD-2 Quad + Duo _ TEMPEST Dave Smith _ KORG MS-20 mini _
                              http://www.youtube.com/watch?v=SxV67...layer_embedded

                              Commentaire

                              Chargement...
                              X