1. IMPORTANT:
    We launched a new online community and this space is now closed. This community will be available as a read-only resources until further notice.
    JOIN US HERE

Transpose applied to groups?

Discussion in 'Scripting Workshop' started by nerine, Apr 18, 2015.

  1. nerine

    nerine NI Product Owner

    Messages:
    74
    Hello.
    I want to create 8 groups that i can apply a transpose in each one of them separate.
    I have created a script but i doesn't work.
    The part of the script that is related with this is the following:
    Code:
    on init
    declare $i
    declare ui_slider $transpose_1 (-12, 12)
    declare ui_slider $transpose_2 (-12, 12)
    declare ui_slider $transpose_3 (-12, 12)
    declare ui_slider $transpose_4 (-12, 12)
    declare ui_slider $transpose_5 (-12, 12)
    declare ui_slider $transpose_6 (-12, 12)
    declare ui_slider $transpose_7 (-12, 12)
    declare ui_slider $transpose_8 (-12, 12)
    
    declare %transid[8]
    %transid[0] := get_ui_id($transpose_1)
    %transid[1] := get_ui_id($transpose_2)
    %transid[2] := get_ui_id($transpose_3)
    %transid[3] := get_ui_id($transpose_4)
    %transid[4] := get_ui_id($transpose_5)
    %transid[5] := get_ui_id($transpose_6)
    %transid[6] := get_ui_id($transpose_7)
    %transid[7] := get_ui_id($transpose_8)
    
    $transpose_1 := 0
    $transpose_2 := 0
    $transpose_3 := 0
    $transpose_4 := 0
    $transpose_5 := 0
    $transpose_6 := 0
    $transpose_7 := 0
    $transpose_8 := 0
    
    $i := 0
    while ($i<8)
    
            set_control_par_str(%transid[$i],$CONTROL_PAR_TEXT,"")
            set_control_par(%transid[$i],$CONTROL_PAR_MOUSE_BEHAVIOUR,-425)
            set_control_par(%transid[$i],$CONTROL_PAR_POS_Y,350)   
            set_control_par(%transid[$i],$CONTROL_PAR_POS_X,52+($i*53))
            set_control_par_str(%transid[$i],$CONTROL_PAR_PICTURE,"panTest")
            set_control_par_str(%transid[$i],$CONTROL_PAR_HELP,"Transpose")
    
    inc($i)
    end while
    
    make_persistent ($transpose_1)
    make_persistent ($transpose_2)
    make_persistent ($transpose_3)
    make_persistent ($transpose_4)
    make_persistent ($transpose_5)
    make_persistent ($transpose_6)
    make_persistent ($transpose_7)
    make_persistent ($transpose_8)
    
    $transpose_1 := _get_engine_par($ENGINE_PAR_TUNE, 0, -1, -1)
    $transpose_2 := _get_engine_par($ENGINE_PAR_TUNE, 1, -1, -1)
    $transpose_3 := _get_engine_par($ENGINE_PAR_TUNE, 2, -1, -1)
    $transpose_4 := _get_engine_par($ENGINE_PAR_TUNE, 3, -1, -1)
    $transpose_5 := _get_engine_par($ENGINE_PAR_TUNE, 4, -1, -1)
    $transpose_6 := _get_engine_par($ENGINE_PAR_TUNE, 5, -1, -1)
    $transpose_7 := _get_engine_par($ENGINE_PAR_TUNE, 6, -1, -1)
    $transpose_8 := _get_engine_par($ENGINE_PAR_TUNE, 7, -1, -1)
    end on
    
    
    on ui_control ($transpose_1)
    _set_engine_par($ENGINE_PAR_TUNE,$transpose_1,0,-1,-1)
    set_text ($lab1, $transpose_1)
    end on
    on ui_control ($transpose_2)
    _set_engine_par($ENGINE_PAR_TUNE,$transpose_2,1,-1,-1)
    set_text ($lab2, $transpose_2)
    end on
    on ui_control ($transpose_3)
    _set_engine_par($ENGINE_PAR_TUNE,$transpose_3,2,-1,-1)
    set_text ($lab3, $transpose_3)
    end on
    on ui_control ($transpose_4)
    _set_engine_par($ENGINE_PAR_TUNE,$transpose_4,3,-1,-1)
    set_text ($lab4, $transpose_4)
    end on
    on ui_control ($transpose_5)
    _set_engine_par($ENGINE_PAR_TUNE,$transpose_5,4,-1,-1)
    set_text ($lab5, $transpose_5)
    end on
    on ui_control ($transpose_6)
    _set_engine_par($ENGINE_PAR_TUNE,$transpose_6,5,-1,-1)
    set_text ($lab6, $transpose_6)
    end on
    on ui_control ($transpose_7)
    _set_engine_par($ENGINE_PAR_TUNE,$transpose_7,6,-1,-1)
    set_text ($lab7, $transpose_7)
    end on
    on ui_control ($transpose_8)
    _set_engine_par($ENGINE_PAR_TUNE,$transpose_8,7,-1,-1)
    set_text ($lab8, $transpose_8)
    end on
    
    Does anyone know how to fix this?
    Thanks in advance
     
  2. David Das

    David Das Moderator Moderator

    Messages:
    7,060
    Moving to the scripting forum.
     
  3. EvilDragon

    EvilDragon Well-Known Member

    Messages:
    19,938
    That should work. Although what you're doing there is not transposing, it's repitching the samples...
     
  4. nerine

    nerine NI Product Owner

    Messages:
    74
    Thank you Evil Dragon for you response.
    Yes I can hear that.
    Any idea how can i make the repitching function into transposing function?
    Thanks in advance
     
  5. EvilDragon

    EvilDragon Well-Known Member

    Messages:
    19,938
    You can't do that the way you did. You will need to use change_note() in conjunction with disallow/allow_group() to set the MIDI transposition of each group.
     
  6. nerine

    nerine NI Product Owner

    Messages:
    74
    Thanks! I will try that now .
     
  7. djbeyhan

    djbeyhan New Member

    Messages:
    29
    But change_note() only applies all groups (instrument midi transposition), am I right? I think she wants midi transpose each group seperately, not disallowing other groups while one is transposed. Is it possible transpose with change_note() , to each group seperately?
     
    Last edited: Apr 22, 2015
  8. EvilDragon

    EvilDragon Well-Known Member

    Messages:
    19,938
    No. You can change note for each group individually, if you use disallow_group()/allow_group() as well as play_note(). You first have to ignore_event(), of course.
     
  9. djbeyhan

    djbeyhan New Member

    Messages:
    29
    I made this code, but there is a mistake. change_note, disallow_group()/allow_group() and ignore_event are there.

    There are three groups, Transpose_Knob_1 only controls group 1 MIDI transpose. If it works, there will be 2 more knobs too.

    But it doesn't work.... Please help...

    Code:
    
    on init
        set_ui_height_px(350)
        make_perfview
        message(" ")
    
    
    declare ui_slider $Transpose_Knob_1(-1, 1)
        make_persistent($Transpose_Knob_1)
        read_persistent_var($Transpose_Knob_1)
        set_control_par(get_ui_id($Transpose_Knob_1), $CONTROL_PAR_MOUSE_BEHAVIOUR, -500)   
        set_control_par_str(get_ui_id($Transpose_Knob_1), $CONTROL_PAR_PICTURE,"Octave_Select")     
        move_control_px($Transpose_Knob_1,20,50)
    
    
    end on
    
    
    
    
    on note
     
    ignore_event($EVENT_ID)                               { stop original note   }
       disallow_group($ALL_GROUPS)  
    
    
    if ($Transpose_Knob_1 = -1)
       allow_group(0)   
        change_note($EVENT_ID, $EVENT_NOTE - 12)     { change pitch, transpose 12 steps downwards   }
    allow_group(1)   
    allow_group(2)   
    
    end if
    
    
    if ($Transpose_Knob_1= 0)
       disallow_group($ALL_GROUPS)   
       allow_group(0)   
        change_note($EVENT_ID, 0)    
    allow_group(1)   
    allow_group(2)   
    
    end if
    
    
    
    if ($Transpose_Knob_1= 1)
       disallow_group($ALL_GROUPS)   
       allow_group(0)   
        change_note($EVENT_ID, $EVENT_NOTE + 12)     { change pitch, transpose 12 steps upwards   }
    allow_group(1)   
    allow_group(2)   
    
    end if
    
    
    end on
       
      
    
     
  10. EvilDragon

    EvilDragon Well-Known Member

    Messages:
    19,938
    Sorry, I need to correct myself. Instead of change_note() you need to use play_note(). :)
     
  11. djbeyhan

    djbeyhan New Member

    Messages:
    29
    Yes, I've arranged the code like below and it works now. 3 groups, 3 knobs that controls MIDI octave notes of each groups' :) thank you Dragon....

    Code:
    
    on init
    
    
    
        set_ui_height_px(350)
        make_perfview
        message(" ")
    
    
    
    declare ui_slider $Transpose_Knob_1(-1, 1)
        make_persistent($Transpose_Knob_1)
        read_persistent_var($Transpose_Knob_1)
        set_control_par(get_ui_id($Transpose_Knob_1), $CONTROL_PAR_MOUSE_BEHAVIOUR, -500)  
        set_control_par_str(get_ui_id($Transpose_Knob_1), $CONTROL_PAR_PICTURE,"Octave_Select")    
        move_control_px($Transpose_Knob_1,20,50)
    
    
    
    declare ui_slider $Transpose_Knob_2(-1, 1)
        make_persistent($Transpose_Knob_2)
        read_persistent_var($Transpose_Knob_2)
        set_control_par(get_ui_id($Transpose_Knob_2), $CONTROL_PAR_MOUSE_BEHAVIOUR, -500)  
        set_control_par_str(get_ui_id($Transpose_Knob_2), $CONTROL_PAR_PICTURE,"Octave_Select")    
        move_control_px($Transpose_Knob_2,100,50)  
    
    
    declare ui_slider $Transpose_Knob_3(-1, 1)
        make_persistent($Transpose_Knob_3)
        read_persistent_var($Transpose_Knob_3)
        set_control_par(get_ui_id($Transpose_Knob_3), $CONTROL_PAR_MOUSE_BEHAVIOUR, -500)  
        set_control_par_str(get_ui_id($Transpose_Knob_3), $CONTROL_PAR_PICTURE,"Octave_Select")    
        move_control_px($Transpose_Knob_3,180,50)
    
    
    end on
    
    
    
    
    on note
    
    ignore_event($EVENT_ID)                               { stop original note   }
       disallow_group($ALL_GROUPS) 
    
    
    if ($Transpose_Knob_1 = -1)
       allow_group(0)  
        play_note($EVENT_NOTE - 12, 120, 0, -1)     { change pitch, transpose 12 steps downwards   }
    allow_group(1)  
    allow_group(2)  
    
    end if
    
    
    if ($Transpose_Knob_1= 0)
       disallow_group($ALL_GROUPS)  
       allow_group(0)  
         play_note($EVENT_NOTE, 120, 0, -1)  
    allow_group(1)  
    allow_group(2)  
    
    end if
    
    
    
    if ($Transpose_Knob_1= 1)
       disallow_group($ALL_GROUPS)  
       allow_group(0)  
         play_note($EVENT_NOTE + 12, 120, 0, -1)     { change pitch, transpose 12 steps upwards   }
    allow_group(1)  
    allow_group(2)  
    
    end if
    
    
    
    
    
    
    
    
    if ($Transpose_Knob_2 = -1)
       allow_group(1)  
        play_note($EVENT_NOTE - 12, 120, 0, -1)     { change pitch, transpose 12 steps downwards   }
    allow_group(0)  
    allow_group(2)  
    
    end if
    
    
    if ($Transpose_Knob_2= 0)
       disallow_group($ALL_GROUPS)  
       allow_group(1)  
         play_note($EVENT_NOTE, 120, 0, -1)  
    allow_group(0)  
    allow_group(2)  
    
    end if
    
    
    
    if ($Transpose_Knob_2= 1)
       disallow_group($ALL_GROUPS)  
       allow_group(1)  
         play_note($EVENT_NOTE + 12, 120, 0, -1)     { change pitch, transpose 12 steps upwards   }
    allow_group(0)  
    allow_group(2)  
    
    end if
    
    
    
    
    if ($Transpose_Knob_3 = -1)
       allow_group(2)  
        play_note($EVENT_NOTE - 12, 120, 0, -1)     { change pitch, transpose 12 steps downwards   }
    allow_group(0)  
    allow_group(1)  
    
    end if
    
    
    if ($Transpose_Knob_3= 0)
       disallow_group($ALL_GROUPS)  
       allow_group(2)  
         play_note($EVENT_NOTE, 120, 0, -1)  
    allow_group(0)  
    allow_group(1)  
    
    end if
    
    
    
    if ($Transpose_Knob_3= 1)
       disallow_group($ALL_GROUPS)  
       allow_group(2)  
         play_note($EVENT_NOTE + 12, 120, 0, -1)     { change pitch, transpose 12 steps upwards   }
    allow_group(0)  
    allow_group(1)  
    
    end if
    
    
    
    
    
    
    
    
    
    
    
    end on
      
      
    
    
     
  12. nerine

    nerine NI Product Owner

    Messages:
    74
    Thanks both of you.
    In my case, I can not use change_note() because each key triggers a different group. So i used engine_par_tune and it works. (+/-12 semitones).
    I have a tempo_sync switch and the problem now is that when the tempo_sync switch is pressed the tune works right, but when it is not pressed i have a time stretching. Do you know how to fix this?
    Thank you.
     
  13. EvilDragon

    EvilDragon Well-Known Member

    Messages:
    19,938
    Then use play_note(). It was my mistake, I've corrected myself :)
     
  14. nerine

    nerine NI Product Owner

    Messages:
    74
    Thank you very much for your response Evil Dragon.
    I tried to fix this using play_note() and it was triggering a different group. (each key is a different group)
    I have a per note change and i think i have to use change_tune.
    In the note callback i have used the code bellow but it doesn't work:

    Code:
    $i:=0
    while($i<8)
    allow_group($i+9)
    change_tune($EVENT_ID,100000*%transpose[$i],0)
    inc($i)
    end while
    
    Do you know how to fix this?
    Thanks in advance
     
  15. EvilDragon

    EvilDragon Well-Known Member

    Messages:
    19,938
    Once again, change_tune won't transpose the MIDI input! It will retune the sample, which sounds completely different!

    You have to make it work with play_note() if you want proper MIDI transpose for a set of groups.