selected = false
muted = false
midiChan = 0

gfx.init("Xsample",1,1)

gfx.x = gfx.mouse_x
gfx.y = gfx.mouse_y

input = gfx.showmenu("1 Vibrato Velocity + MW inverted|2 Vibrato Velocity|3 Vibrato MW|4 Accent Vibrato Velocity|5 Senza Vibrato Velocity + MW inverted|6 Senza Vibrato Velocity|7 Arco Open Strings Velocity|8 Senza Vibrato MW|9 Arco Open Strings MW|10 Accent Senza Vibrato Velocity|11 Light Accent Velocity - high position|12 Marcato sfz Velocity|13 Marcato Staccato Velocity|14 Marcato Staccato Open Strings Velocity|15 Marcato + Spiccato Velocity|16 Spiccato Velocity|17 Spiccato Open Strings Velocity|18 Spiccato Velocity - Soft X Bright MW|19 Staccato Velocity|20 Staccato Open Strings Velocity|21 Gettato Velocity|22 Tremolo Velocity + MW inverted|23 Tremolo Velocity|24 Tremolo Open Strings Velocity|25 Tremolo MW|26 Tremolo Open Strings MW|27 Natural Harmonics Glissando Slow Velocity|28 Natural Harmonics Glissando Slow MW|29 Natural Harmonics Glissando Fast Velocity|30 Natural Harmonics Glissando Fast MW|31 Natural Harmonics Sul C Velocity|32 Natural Harmonics Sul C MW|33 Natural Harmonics Sul G Velocity|34 Natural Harmonics Sul G MW|35 Natural Harmonics Sul D Velocity|36 Natural Harmonics Sul D MW|37 Natural Harmonics Sul A Velocity|38 Natural Harmonics Sul A MW|39 Artificial Harmonics Velocity|40 Artificial Harmonics MW|41 Artificial Harmonics Spiccato Velocity|42 Artificial Harmonics Tremolo MW|43 Flautando Fragile Velocity|44 Flautando Fragile MW|45 Flautando Fragile X Sul Ponticello MW - Velocity|46 Sul Ponticello Velocity|47 Sul Ponticello MW|48 Sul Ponticello Spiccato Velocity|49 Sul Ponticello Tremolo Velocity|50 Sul Ponticello Tremolo MW|51 Sul Ponticello Tremolo X Sul Ponticello MW - Velocity|52 Circular Bowing Velocity|53 Circular Bowing MW|54 Bow Overpressure Velocity|55 Bow Overpressure MW|56 Bow Overpressure X Marcato sfz MW - Velocity|57 Bow Overpressure Staccato Velocity|58 Tailpiece Bowed Velocity|59 Tailpiece Bowed MW|60 Sordino Vibrato Velocity + MW inverted|61 Sordino Vibrato Velocity|62 Sordino Vibrato MW|63 Sordino Senza Vibrato Velocity + MW inverted|64 Sordino Senza Vibrato Velocity|65 Sordino Open Strings Velocity|66 Sordino Senza Vibrato MW|67 Sordino Open Strings MW|68 Sordino Spiccato Velocity|69 Sordino Spiccato Open Strings Velocity|70 Pizzicato Velocity|71 Pizzicato Vibrato Velocity|72 Pizzicato Open Strings Velocity|73 Pizzicato Harmonics Sul C Velocity|74 Pizzicato Harmonics Sul G Velocity|75 Pizzicato Harmonics Sul D Velocity|76 Pizzicato Harmonics Sul A Velocity|77 Pizzicato Sul Ponticello Velocity|78 Pizzicato Sul Ponticello Open Strings Velocity|79 Pizzicato X Sul Ponticello MW - Velocity|80 Bartok Pizzicato Velocity|81 Pizzicato Behind Bridge Velocity|82 Pizzicato In Peg Box Velocity|83 Col Legno Velocity|84 Col Legno Gettato Velocity|85 Finger Velocity|86 Body Strokes Velocity|87 Undefined Sounds Velocity|88 Undefined Sounds MW||")
if input >= 0 then 

function main() 
  take = reaper.MIDIEditor_GetTake(reaper.MIDIEditor_GetActive())
  if take == nil then return end
  item = reaper.GetMediaItemTake_Item(take)
  pos = reaper.GetCursorPosition() 
  ppq = reaper.MIDI_GetPPQPosFromProjTime(take, pos)
  
  MSB = 0
  LSB = 0
  PC  = 0
  
  if input ~= 0 then
  
  reaper.MIDI_InsertCC(
    take, 
    selected,
    muted,
    ppq,
    0xB0,-- midi CC
    midiChan,
    0, -- controller #0: Bank Select MSB
    input-1 -- MSB value
  )
  reaper.MIDI_InsertCC(
    take, 
    selected,
    muted,
    ppq,
    0xB0,-- midi CC
    midiChan,
    32, -- controller #32: Bank Select LSB
    0 -- LSB value
  )
  reaper.MIDI_InsertCC(
    take, 
    selected,
    muted,
    ppq,
    0xC0,-- Program Change
    midiChan,
    PC, -- program change value
    0
  )
  end
  reaper.UpdateItemInProject(item)   
end
end

script_title = "Xsample Acoustic Instruments"
reaper.Undo_BeginBlock()
main()
reaper.Undo_EndBlock(script_title, 0)
