Advertisement
Guest User

onson

a guest
Apr 20th, 2019
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 52.49 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. # FUNCTION J$UNCTION
  4. # HEADERS
  5. readandcenterlinebyline () {
  6.     while IFS='' read -r line || [[ -n "$line" ]]; do
  7.       COLUMNS=$(tput cols)
  8.       onsonlogo="$line"
  9.       printf "%*s\n" $(((${#onsonlogo}+$COLUMNS)/2)) "$onsonlogo"
  10.     done < "$1"
  11.     }
  12. onson_header () {
  13.   clear
  14.   echo
  15.   readandcenterlinebyline /usr/local/bin/onson/logo
  16.   echo
  17.   echo
  18.   }
  19.   preset_header () {
  20.     mapfile -t currentsong </usr/local/bin/onson/satelites/currentsong
  21.     mapfile -t currentpreset </usr/local/bin/onson/satelites/currentpreset
  22.     mapfile -t bank </usr/local/bin/onson/satelites/currentbank
  23.  
  24.     COLUMNS=$(tput cols)
  25.     presetprompt="SONG:$currentsong     PRESET:$currentpreset     BANK:$bank"
  26.     printf "%*s\n\n" $(((${#presetprompt}+$COLUMNS)/2)) "$presetprompt"
  27.   }
  28. bank_header () {
  29.  
  30.   mapfile -t currentpreset </usr/local/bin/onson/satelites/currentpreset
  31.   mapfile -t bank </usr/local/bin/onson/satelites/currentbank
  32.  
  33.   onson_header
  34.   echo
  35.   preset_header
  36. }
  37. steps_header  () {
  38.  
  39.   COLUMNS=$(tput cols)
  40.   stepprompt="STEPS:"
  41.   printf "%*s\n\n" $(((${#stepprompt}+$COLUMNS)/2)) "$stepprompt"
  42. }
  43.  
  44. direction_header () {
  45.   mapfile -t direction < /usr/local/bin/onson/satelites/direction
  46.   currentdirnum=" 1 2 3"
  47.   currentdirname=(FORWARD REVERSE BOUNCE BACKWARD)
  48.   for i in $currentdirnum
  49.     do
  50.       if [ "$direction" = "$i" ]
  51.         then
  52.           ((arrayplace=$i-1))
  53.           directionprompt="CURRENT DIRECTION IS: ${currentdirname[$arrayplace]}"
  54.           COLUMNS=$(tput cols)
  55.           printf "%*s\n\n" $(((${#directionprompt}+$COLUMNS)/2)) "$directionprompt"
  56.       fi
  57.   done
  58. }
  59. glide_header () {
  60.   echo
  61.   echo
  62.   echo
  63.   echo
  64.   mapfile -t aglide < /usr/local/bin/onson/satelites/glide
  65.  
  66.   COLUMNS=$(tput cols)
  67.   currentglidenum="//// CURRENT GLIDE IS: $glide ////"
  68.   printf "%*s\n\n" $(((${#currentglidenum}+$COLUMNS)/2)) "$currentglidenum"
  69. }
  70.  
  71.  
  72. #BODIES
  73. steps_body () {
  74.       while :
  75.         do
  76.           clear
  77.           echo
  78.           echo
  79.           clear
  80.           bank_header
  81.           print_steps
  82.           menu_footer 8
  83.           center_read 1 stepnumber
  84.           case $stepnumber in
  85.             #
  86.               1)
  87.               while :
  88.                 do
  89.                   clear
  90.                   bank_header
  91.  
  92.                   #DISPLAY CURRENT STEP VALUE
  93.                   mapfile -t step1 </usr/local/bin/onson/satelites/step1
  94.                   mapfile -t allsteps </usr/local/bin/onson/satelites/allsteps
  95.  
  96.  
  97.                   COLUMNS=$(tput cols)
  98.                   stepprompt="CURRENT STEP 1: $step1"
  99.                   printf "%*s\n\n" $(((${#stepprompt}+$COLUMNS)/2)) "$stepprompt"
  100.  
  101.                   COLUMNS=$(tput cols)
  102.                   allstepsprompt="ALL STEPS: $allsteps"
  103.                   printf "%*s\n\n" $(((${#allstepsprompt}+$COLUMNS)/2)) "$allstepsprompt"
  104.  
  105.                   notes_menu_root
  106.                   center_read 4 note
  107.                   notes_validation_vars
  108.  
  109.                   for i in $stepmenu
  110.                     do
  111.                       if [ "$note" = "$i" ]
  112.                         then
  113.                           rootarrayplace=$arrayplace
  114.                           step1="${scale[$rootarrayplace]}"
  115.                           midistep1="${scalevalues[$rootarrayplace]}"
  116.                           echo "$step1" > /usr/local/bin/onson/satelites/step1
  117.                           echo "$midistep1" > /usr/local/bin/onson/midi/satelites/midistep1
  118.                           echo "$rootarrayplace" > /usr/local/bin/onson/satelites/rootarrayplace
  119.                           currentscaleroot=$rootarrayplace
  120.  
  121.  
  122.                       fi
  123.                       ((arrayplace++))
  124.  
  125.                     done
  126.                   clear
  127.                   break
  128.                   done
  129.               ;;
  130.  
  131.               2)
  132.               while :
  133.                 do
  134.                   clear
  135.                   bank_header
  136.  
  137.                   mapfile -t step2 </usr/local/bin/onson/satelites/step2
  138.                   mapfile -t allsteps </usr/local/bin/onson/satelites/allsteps
  139.                   mapfile -t rootarrayplace </usr/local/bin/onson/satelites/rootarrayplace
  140.  
  141.                   #DISPLAY CURRENT STEP VALUE
  142.                   COLUMNS=$(tput cols)
  143.                   stepprompt="CURRENT STEP 2: $step2"
  144.                   printf "%*s\n\n" $(((${#stepprompt}+$COLUMNS)/2)) "$stepprompt"
  145.  
  146.                   COLUMNS=$(tput cols)
  147.                   allstepsprompt="ALL STEPS: $allsteps"
  148.                   printf "%*s\n\n" $(((${#allstepsprompt}+$COLUMNS)/2)) "$allstepsprompt"
  149.  
  150.                   notes_menu_nonroot
  151.                   center_read 4 note
  152.                   notes_validation_vars
  153.                   for i in $stepmenu
  154.                     do
  155.                       if [ "${note^^}" = "${i^^}" ]
  156.                         then
  157.                           step2="${scale[$arrayplace]}"
  158.                           midistep2="${scalevalues[$arrayplace]}"
  159.                           echo "$step2" > /usr/local/bin/onson/satelites/step2
  160.                           echo "$midistep2" > /usr/local/bin/onson/midi/satelites/midistep2
  161.                           save_preset
  162.  
  163.                       fi
  164.                       ((arrayplace++))
  165.                     done
  166.                   clear
  167.                   break
  168.                   done
  169.               ;;
  170.  
  171.               3)
  172.               while :
  173.                 do
  174.                   clear
  175.                   bank_header
  176.  
  177.                   #DISPLAY CURRENT STEP VALUE
  178.                   mapfile -t step3 </usr/local/bin/onson/satelites/step3
  179.                   mapfile -t allsteps </usr/local/bin/onson/satelites/allsteps
  180.  
  181.                   COLUMNS=$(tput cols)
  182.                   stepprompt="STEP 3: $step3"
  183.                   printf "%*s\n\n" $(((${#stepprompt}+$COLUMNS)/2)) "$stepprompt"
  184.  
  185.                   COLUMNS=$(tput cols)
  186.                   allstepsprompt="ALL STEPS: $allsteps"
  187.                   printf "%*s\n\n" $(((${#allstepsprompt}+$COLUMNS)/2)) "$allstepsprompt"
  188.  
  189.                   notes_menu_nonroot
  190.  
  191.                   center_read 4 note
  192.                   notes_validation_vars
  193.                   for i in $stepmenu
  194.                     do
  195.                       if [ "${note^^}" = "${i^^}" ]
  196.                         then
  197.                           step3="${scale[$arrayplace]}"
  198.                           midistep3="${scalevalues[$arrayplace]}"
  199.                           echo "$step3" > /usr/local/bin/onson/satelites/step3
  200.                           echo "$midistep3" > /usr/local/bin/onson/midi/satelites/midistep3
  201.                           save_preset
  202.                       fi
  203.  
  204.                       ((arrayplace++))
  205.                     done
  206.                   clear
  207.                   break
  208.                   done
  209.               ;;
  210.  
  211.               4)
  212.               while :
  213.                 do
  214.                   clear
  215.                   bank_header
  216.  
  217.                   #DISPLAY CURRENT STEP VALUE
  218.                   mapfile -t step4 </usr/local/bin/onson/satelites/step4
  219.                   mapfile -t allsteps </usr/local/bin/onson/satelites/allsteps
  220.  
  221.  
  222.                   COLUMNS=$(tput cols)
  223.                   stepprompt="STEP 4: $step4"
  224.                   printf "%*s\n\n" $(((${#stepprompt}+$COLUMNS)/2)) "$stepprompt"
  225.  
  226.                   COLUMNS=$(tput cols)
  227.                   allstepsprompt="ALL STEPS: $allsteps"
  228.                   printf "%*s\n\n" $(((${#allstepsprompt}+$COLUMNS)/2)) "$allstepsprompt"
  229.  
  230.                   notes_menu_nonroot
  231.  
  232.                   center_read 4 note
  233.                   notes_validation_vars
  234.                   for i in $stepmenu
  235.                     do
  236.                       if [ "${note^^}" = "${i^^}" ]
  237.                         then
  238.                           step4="${scale[$arrayplace]}"
  239.                           midistep4="${scalevalues[$arrayplace]}"
  240.                           echo "$step4" > /usr/local/bin/onson/satelites/step4
  241.                           echo "$midistep4" > /usr/local/bin/onson/midi/satelites/midistep4
  242.                           save_preset
  243.                       fi
  244.                       ((arrayplace++))
  245.                     done
  246.                   clear
  247.                   break
  248.                   done
  249.               ;;
  250.  
  251.               5)
  252.               while :
  253.                 do
  254.                   clear
  255.                   bank_header
  256.  
  257.                   #DISPLAY CURRENT STEP VALUE
  258.                   mapfile -t step5 </usr/local/bin/onson/satelites/step5
  259.                   mapfile -t allsteps </usr/local/bin/onson/satelites/allsteps
  260.  
  261.                   COLUMNS=$(tput cols)
  262.                   stepprompt="STEP 5: $step5"
  263.                   printf "%*s\n\n" $(((${#stepprompt}+$COLUMNS)/2)) "$stepprompt"
  264.  
  265.                   COLUMNS=$(tput cols)
  266.                   allstepsprompt="ALL STEPS: $allsteps"
  267.                   printf "%*s\n\n" $(((${#allstepsprompt}+$COLUMNS)/2)) "$allstepsprompt"
  268.  
  269.  
  270.                   notes_menu_nonroot
  271.  
  272.                   center_read 4 note
  273.                   notes_validation_vars
  274.                   for i in $stepmenu
  275.                     do
  276.                       if [ "${note^^}" = "${i^^}" ]
  277.                         then
  278.                           step5="${scale[$arrayplace]}"
  279.                           midistep5="${scalevalues[$arrayplace]}"
  280.                           echo "$step5" > /usr/local/bin/onson/satelites/step5
  281.                           echo "$midistep5" > /usr/local/bin/onson/midi/satelites/midistep5
  282.                           save_preset
  283.                       fi
  284.                       ((arrayplace++))
  285.                     done
  286.                   clear
  287.                   break
  288.                   done
  289.               ;;
  290.  
  291.               6)
  292.               while :
  293.                 do
  294.                   clear
  295.                   bank_header
  296.  
  297.                   #DISPLAY CURRENT STEP VALUE
  298.                   mapfile -t step6 </usr/local/bin/onson/satelites/step6
  299.                   mapfile -t allsteps </usr/local/bin/onson/satelites/allsteps
  300.  
  301.                   COLUMNS=$(tput cols)
  302.                   stepprompt="STEP 6: $step6"
  303.                   printf "%*s\n\n" $(((${#stepprompt}+$COLUMNS)/2)) "$stepprompt"
  304.  
  305.                   COLUMNS=$(tput cols)
  306.                   allstepsprompt="ALL STEPS: $allsteps"
  307.                   printf "%*s\n\n" $(((${#allstepsprompt}+$COLUMNS)/2)) "$allstepsprompt"
  308.  
  309.                   notes_menu_nonroot
  310.  
  311.                   center_read 4 note
  312.                   notes_validation_vars
  313.                   for i in $stepmenu
  314.                     do
  315.                       if [ "${note^^}" = "${i^^}" ]
  316.                         then
  317.                           step6="${scale[$arrayplace]}"
  318.                           midistep6="${scalevalues[$arrayplace]}"
  319.                           echo "$step6" > /usr/local/bin/onson/satelites/step6
  320.                           echo "$midistep6" > /usr/local/bin/onson/midi/satelites/midistep6
  321.                           save_preset
  322.                         fi
  323.                       ((arrayplace++))
  324.                     done
  325.                   clear
  326.                   break
  327.                   done
  328.               ;;
  329.  
  330.               7)
  331.               while :
  332.                 do
  333.                   clear
  334.                   bank_header
  335.  
  336.  
  337.                   #DISPLAY CURRENT STEP VALUE
  338.                   mapfile -t step7 </usr/local/bin/onson/satelites/step7
  339.                   mapfile -t allsteps </usr/local/bin/onson/satelites/allsteps
  340.  
  341.  
  342.                   COLUMNS=$(tput cols)
  343.                   stepprompt="STEP 7: $step7"
  344.                   printf "%*s\n\n" $(((${#stepprompt}+$COLUMNS)/2)) "$stepprompt"
  345.  
  346.                   COLUMNS=$(tput cols)
  347.                   allstepsprompt="ALL STEPS: $allsteps"
  348.                   printf "%*s\n\n" $(((${#allstepsprompt}+$COLUMNS)/2)) "$allstepsprompt"
  349.  
  350.                   notes_menu_nonroot
  351.  
  352.                   center_read 4 note
  353.                   notes_validation_vars
  354.                   for i in $stepmenu
  355.                     do
  356.                       if [ "${note^^}" = "${i^^}" ]
  357.                         then
  358.                           step7="${scale[$arrayplace]}"
  359.                           midistep7="${scalevalues[$arrayplace]}"
  360.                           echo "$step7" > /usr/local/bin/onson/satelites/step7
  361.                           echo "$midistep7" > /usr/local/bin/onson/midi/satelites/midistep7
  362.                           save_preset
  363.                           save_preset
  364.                         fi
  365.                       ((arrayplace++))
  366.                     done
  367.                   clear
  368.                   break
  369.                   done
  370.               ;;
  371.  
  372.               8)
  373.               while :
  374.                 do
  375.                   clear
  376.                   bank_header
  377.  
  378.                   #DISPLAY CURRENT STEP VALUE
  379.                   mapfile -t step8 </usr/local/bin/onson/satelites/step8
  380.                   mapfile -t allsteps </usr/local/bin/onson/satelites/allsteps
  381.  
  382.  
  383.                   COLUMNS=$(tput cols)
  384.                   stepprompt="STEP 8: $step8"
  385.                   printf "%*s\n\n" $(((${#stepprompt}+$COLUMNS)/2)) "$stepprompt"
  386.  
  387.                   COLUMNS=$(tput cols)
  388.                   allstepsprompt="ALL STEPS: $allsteps"
  389.                   printf "%*s\n\n" $(((${#allstepsprompt}+$COLUMNS)/2)) "$allstepsprompt"
  390.  
  391.                   notes_menu_nonroot
  392.  
  393.                   center_read 4 note
  394.                   notes_validation_vars
  395.  
  396.                   for i in $stepmenu
  397.                     do
  398.                       if [ "${note^^}" = "${i^^}" ]
  399.                         then
  400.                           step8="${scale[$arrayplace]}"
  401.                           midistep8="${scalevalues[$arrayplace]}"
  402.                           echo "$step8" > /usr/local/bin/onson/satelites/step8
  403.                           echo "$midistep8" > /usr/local/bin/onson/midi/satelites/midistep8
  404.                           save_preset
  405.                         fi
  406.                       ((arrayplace++))
  407.                     done
  408.                   clear
  409.                   break
  410.                   done
  411.               ;;
  412.  
  413.               *)
  414.               clear
  415.               break
  416.               ;;
  417.           esac
  418.         done
  419.         }
  420.  
  421. direction_body () {
  422.  
  423.         clear
  424.         bank_header
  425.         direction_header
  426.         print_direction
  427.         menu_footer 4
  428.         center_read 1 input
  429.  
  430.       if [ "$input" -gt 0 ] && [ "$input" -lt 5 ]
  431.         then
  432.           ((direction = "$input"-1))
  433.           echo "$direction"  > /usr/local/bin/onson/satelites/direction
  434.           save_preset
  435.       fi
  436.  
  437.  
  438.  
  439.  
  440. }
  441. glide_body () {
  442.         clear
  443.         bank_header
  444.         glide_header
  445.         echo
  446.         echo
  447.         echo
  448.         echo
  449.         menu_footer 127
  450.         center_read 3 input
  451.  
  452.       if [ "$input" -gt -1 ] && [ "$input" -lt 128 ]
  453.         then
  454.           glide="$input"
  455.           echo "$glide"  > /usr/local/bin/onson/satelites/glide
  456.           save_preset
  457.       fi
  458. }
  459. length_body () {
  460.         clear
  461.         bank_header
  462.         echo
  463.         echo
  464.         echo
  465.         echo
  466.         mapfile -t length < /usr/local/bin/onson/satelites/length
  467.  
  468.         COLUMNS=$(tput cols)
  469.         currentlengthnum="//// CURRENT LENGTH IS: $length ////"
  470.         printf "%*s\n\n" $(((${#currentlengthnum}+$COLUMNS)/2)) "$currentlengthnum"
  471.         echo
  472.         echo
  473.         echo
  474.         menu_footer 8
  475.         center_read 1 input
  476.  
  477.       if [ "$input" -gt 0 ] && [ "$input" -lt 9 ]
  478.         then
  479.           length="$input"
  480.           echo "$length"  > /usr/local/bin/onson/satelites/length
  481.           save_preset
  482.       fi
  483. }
  484.  
  485. #FOOTERS
  486. exit_footer () {
  487.   exitsign="|| OR ANY KEY TO EXIT ||"
  488.   printf "%*s\n\n" $(((${#exitsign}+$COLUMNS)/2)) "$exitsign"
  489. }
  490. preset_footer () {
  491.   tput sc
  492.   tput ll
  493.   echo
  494.   echo
  495.   echo
  496.   echo
  497.   COLUMNS=$(tput cols)
  498.   prompt="|| ENTER PRESET # ||"
  499.   printf "%*s\n\n" $(((${#prompt}+$COLUMNS)/2)) "$prompt"
  500.   presetfooterprompt="© 2019 SPIL KITT"
  501.   printf "%*s\n\n" $(((${#presetfooterprompt}+$COLUMNS)/2)) "$presetfooterprompt"
  502.   tput rc
  503. }
  504. song_footer () {
  505.   tput sc
  506.   tput ll
  507.   echo
  508.   echo
  509.   echo
  510.   echo
  511.   COLUMNS=$(tput cols)
  512.   prompt="|| ENTER SONG # ||"
  513.   printf "%*s\n\n" $(((${#prompt}+$COLUMNS)/2)) "$prompt"
  514.   songfooterprompt="© 2019 SPIL KITT"
  515.   printf "%*s\n\n" $(((${#songfooterprompt}+$COLUMNS)/2)) "$songfooterprompt"
  516.   tput rc
  517. }
  518. menu_footer () {
  519.   tput sc
  520.   tput ll
  521.   echo
  522.   echo
  523.   echo
  524.   echo
  525.   COLUMNS=$(tput cols)
  526.   range="|| 1-$1 ||"
  527.   printf "%*s\n\n" $(((${#range}+$COLUMNS)/2)) "$range"
  528.   exit_footer
  529.   tput rc
  530. }
  531.  
  532.  
  533. #UTILITY FUNCTIONS
  534. append_step_values () {
  535.   # THIS ISN'T USED ANYMORE BUT I KEPT IT FOR REFERENCE.
  536.   # IT'S A HOLDOVER FROM BEFORE I HAD THE IDEA TO QUANTIZE THE STEPS.
  537.   # INSTEAD, I WAS TAKING INPUT  THAT WOULD ADD OR SUBTRACT TO THE
  538.   # CURRENT STEP VALUE WITHIN THE ALLOWABLE RANGE.
  539.  
  540.   #END OF FIRT PASS STEP LOOP / BEGINNING TRAILING STEP LOOP
  541.     unset "y"
  542.     unset "z"
  543.  
  544.       #SYNC THE ARRAY INDICES WITH ASSOCIATED SEQUENCER STEPS
  545.       ((x="$step"-1))
  546.  
  547.       #INPUT CHANGE TO PREVIOUS SLIDER VALUES
  548.       y=${array[$x]}
  549.       ((z="$y" + "$delta"))
  550.       array["$x"]="$z"
  551.       echo > /usr/local/bin/onson/satelites/stepsfile
  552.       echo "${array[@]}" > /usr/local/bin/onson/satelites/stepsfile
  553. }
  554. center_read () {
  555.   echo
  556.   COLUMNS=$(tput cols)
  557.   currentlengthnum="$1"
  558.   ((N=(+$COLUMNS/2)-${currentlengthnum}))
  559.   tput cuf $N
  560.   read -n $1 $2
  561. }
  562. notes_validation_vars () {
  563.   set -f
  564.   GLOBIGNORE="*"
  565.  
  566.  
  567.   scale=(\#\#E \#\#F \#\#F\# \#\#G \#\#G\# \#\#A \#\#Bb \#\#B \#\#C \#\#C\# \#\#D \#\#D\# \#E \#F \#F\# \#G \#G\# \#A \#Bb \#B \#C \#C\# \#D \#D\# E F F\# G G\# A Bb B C C\# D D\# \*E \*F \*F\# \*G \*G\# \*A \*Bb \*B \*C \*C\# \*D \*D\# \*\*E \*\*F \*\*F\# \*\*G \*\*G\# \*\*A \*\*Bb \*\*B \*\*C \*\*C\# \*\*D \*\*D\# \*\*\*E \*\*\*F \*\*\*F\# \*\*\*G \*\*\*G\# \*\*\*A \*\*\*Bb)
  568.  
  569.   #    ##E -  ##D# -  ##01 - ##12 - 1-12   midi- 00 - 21
  570.   #     #E -   #D# -  #001 - #012 - 13-24  midi- 23 - 46
  571.   #      E -    D# -  0001 - 0012 - 25-36  midi- 48 - 70
  572.   #     *E -   *D# -  *001 - *012 - 37-48  midi- 72 - 92
  573.   #    **E -  **D# -  **01 - **12 - 49-60  midi- 25 - 114
  574.   #   ***E - ***Bb -  ***1 - ***7 - 61-67  midi- 115 - 126
  575.  
  576.  
  577.  
  578.   stepmenu="##01 ##02 ##03 ##04 ##05 ##06 ##07 ##08 ##09 ##10 ##11 ##12 #001 #002 #003 #004 #005 #006 #007 #008 #009 #010 #011 #012 0001 0002 0003 0004 0005 0006 0007 0008 0009 0010 0011 0012 *001 *002 *003 *004 *005 *006 *007 *008 *009 *010 *011 *012 **01 **02 **03 **04 **05 **06 **07 **08 **09 **10 **11 **12 ***1 ***2 ***3 ***4 ***5 ***6 ***7"
  579.  
  580.   scalevalues=(00 02 03 05 07 09 11 13 15 18 20 21 23 26 28 30 32 34 35 37 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 73 75 77 79 82 83 85 87 88 91 92 95 97 98 100 102 103 105 107 109 110 113 114 115 118 120 121 123 124 126)
  581.   arrayplace=0
  582.   set +f
  583.  
  584. }
  585. banks_validation_vars () {
  586.   banknames=(A B AB)
  587.   banksmenu="1 2 3"
  588.   arrayplace=0
  589. }
  590. notes_menu_root () {
  591.  
  592.                 paddednote_e=$(menu_pad "##01/#001/0001/*001/**01/***1" E)
  593.                 COLUMNS=$(tput cols)
  594.                 paddednotee="$paddednote_e"
  595.                 printf "%*s\n\n" $(((${#paddednotee}+$COLUMNS)/2)) "$paddednotee"
  596.  
  597.                 paddednote_f=$(menu_pad "##02/#002/0002/*002/**02/***2" F)
  598.                 COLUMNS=$(tput cols)
  599.                 paddednotefprompt="$paddednote_f"
  600.                 printf "%*s\n\n" $(((${#paddednotefprompt}+$COLUMNS)/2)) "$paddednotefprompt"
  601.  
  602.                 paddednote_fsharp=$(menu_pad "##03/#003/0003/*003/**03/***3" F#)
  603.                 COLUMNS=$(tput cols)
  604.                 paddednotefsharpprompt="$paddednote_fsharp"
  605.                 printf "%*s\n\n" $(((${#paddednotefsharpprompt}+$COLUMNS)/2)) "$paddednotefsharpprompt"
  606.  
  607.                 paddednote_g=$(menu_pad "##04/#004/0004/*004/**04/***4" G)
  608.                 COLUMNS=$(tput cols)
  609.                 paddednotegprompt="$paddednote_g"
  610.                 printf "%*s\n\n" $(((${#paddednotegprompt}+$COLUMNS)/2)) "$paddednotegprompt"
  611.  
  612.                 paddednote_gsharp=$(menu_pad "##05/#005/0005/*005/**05/***5" G#)
  613.                 COLUMNS=$(tput cols)
  614.                 paddednotegsharpprompt="$paddednote_gsharp"
  615.                 printf "%*s\n\n" $(((${#paddednotegsharpprompt}+$COLUMNS)/2)) "$paddednotegsharpprompt"
  616.  
  617.                 paddednote_a=$(menu_pad "##06/#006/0006/*006/**06/***6" A)
  618.                 COLUMNS=$(tput cols)
  619.                 paddednoteaprompt="$paddednote_a"
  620.                 printf "%*s\n\n" $(((${#paddednoteaprompt}+$COLUMNS)/2)) "$paddednoteaprompt"
  621.  
  622.                 paddednote_bflat=$(menu_pad "##07/#007/0007/*007/**07/***7" Bb)
  623.                 COLUMNS=$(tput cols)
  624.                 paddednotebflatprompt="$paddednote_bflat"
  625.                 printf "%*s\n\n" $(((${#paddednotebflatprompt}+$COLUMNS)/2)) "$paddednotebflatprompt"
  626.  
  627.                 paddednote_b=$(menu_pad "##08/#008/0008/*008/**08" B)
  628.                 COLUMNS=$(tput cols)
  629.                 paddednotebprompt="$paddednote_b"
  630.                 printf "%*s\n\n" $(((${#paddednotebprompt}+$COLUMNS)/2)) "$paddednotebprompt"
  631.  
  632.                 paddednote_c=$(menu_pad "##09/#009/0009/*009/**09" C)
  633.                 COLUMNS=$(tput cols)
  634.                 paddednotecprompt="$paddednote_c"
  635.                 printf "%*s\n\n" $(((${#paddednotecprompt}+$COLUMNS)/2)) "$paddednotecprompt"
  636.  
  637.                 paddednote_csharp=$(menu_pad "##10/#010/0010/*010/**10" C#)
  638.                 COLUMNS=$(tput cols)
  639.                 paddednotecsharpprompt="$paddednote_csharp"
  640.                 printf "%*s\n\n" $(((${#paddednotecsharpprompt}+$COLUMNS)/2)) "$paddednotecsharpprompt"
  641.  
  642.                 paddednote_d=$(menu_pad "##11/#011/0011/*011/**11" D)
  643.                 COLUMNS=$(tput cols)
  644.                 paddednotedprompt="$paddednote_d"
  645.                 printf "%*s\n\n" $(((${#paddednotedprompt}+$COLUMNS)/2)) "$paddednotedprompt"
  646.  
  647.                 paddednote_dsharp=$(menu_pad "##12/#012/0012/*012/**12" D#)
  648.                 COLUMNS=$(tput cols)
  649.                 paddednotedsharpprompt="$paddednote_dsharp"
  650.                 printf "%*s\n\n" $(((${#paddednotedsharpprompt}+$COLUMNS)/2)) "$paddednotedsharpprompt"
  651.  
  652.                 menu_footer 12
  653. }
  654.  
  655. notes_menu_nonroot () {
  656.  
  657.                 notes_validation_vars
  658.  
  659.                 mapfile -t arrayplace < /usr/local/bin/onson/satelites/arrayplace
  660.  
  661.                 mapfile -t rootarrayplace < /usr/local/bin/onson/satelites/rootarrayplace
  662.  
  663.  
  664.                 ##FIND "MIDDLE" ROOT VALUES TO DISPLAY
  665.  
  666.                 stepmenuarray=(\#\#01 \#\#02 \#\#03 \#\#04 \#\#05 \#\#06 \#\#07 \#\#08 \#\#09 \#\#10 \#\#11 \#\#12 \#\01 \#002 \#003 \#004 \#005 \#006 \#007 \#008 \#009 \#010 \#011 \#012 0001 0002 0003 0004 0005 0006 0007 0008 0009 0010 0011 0012 \*001 \*002 \*003 \*004 \*005 \*006 \*007 \*008 \*009 \*010 \*011 \*012 \*\*01 \*\*02 \*\*03 \*\*04 \*\*05 \*\*06 \*\*07 \*\*08 \*\*09 \*\*10 \*\*11 \*\*12 \*\*\*1 \*\*\*2 \*\*\*3 \*\*\*4 \*\*\*5 \*\*\*6 \*\*\*7)
  667.  
  668.  
  669.  
  670.                   echo
  671.                   displayarrayplace1=$rootarrayplace
  672.                   ((displayarrayplace2 = "$displayarrayplace1"+2))
  673.                   ((displayarrayplace3 = "$displayarrayplace2"+2))
  674.                   ((displayarrayplace4 = "$displayarrayplace3"+1))
  675.                   ((displayarrayplace5 = "$displayarrayplace4"+2))
  676.                   ((displayarrayplace6 = "$displayarrayplace5"+2))
  677.                   ((displayarrayplace7 = "$displayarrayplace6"+2))
  678.  
  679.                   menurootnote="${scale[$displayarrayplace1]}"
  680.                   menu2ndnote="${scale[$displayarrayplace2]}"
  681.                   menu3rdnote="${scale[$displayarrayplace3]}"
  682.                   menu4thnote="${scale[$displayarrayplace4]}"
  683.                   menu5thnote="${scale[$displayarrayplace5]}"
  684.                   menu6thnote="${scale[$displayarrayplace6]}"
  685.                   menu7thnote="${scale[$displayarrayplace7]}"
  686.  
  687.                   rootnoteindex="${stepmenuarray[$displayarrayplace1]}"
  688.                   notetwoindex="${stepmenuarray[$isplayarrayplace2]}"
  689.                   notethreeindex="${stepmenuarray[$displayarrayplace3]}"
  690.                   notefourindex="${stepmenuarray[$displayarrayplace4]}"
  691.                   notefiveindex="${stepmenuarray[$displayarrayplace5]}"
  692.                   notesixindex="${stepmenuarray[$displayarrayplace6]}"
  693.                   notesevenindex="${stepmenuarray[$displayarrayplace7]}"
  694.  
  695.                   menurootnote=${menurootnote/#'*\#'/}
  696.                   menu2ndnote=${menu2ndnote/#'*\#'/}
  697.                   menu3rdnote=${menu3rdnote/#'*\#'/}
  698.                   menu4thnote=${menu4thnote/#'*\#'/}
  699.                   menu5thnote=${menu5thnote/#'*\#'/}
  700.                   menu6thnote=${menu6thnote/#'*\#'/}
  701.                   menu7thnote=${menu7thnote/#'*\#'/}
  702.  
  703.                   menurootnote=${menurootnote//\*/}
  704.                   menu2ndnote=${menu2ndnote//\*/}
  705.                   menu3rdnote=${menu3rdnote//\*/}
  706.                   menu4thnote=${menu4thnote//\*/}
  707.                   menu5thnote=${menu5thnote//\*/}
  708.                   menu6thnote=${menu6thnote//\*/}
  709.                   menu7thnote=${menu7thnote//\*/}
  710.  
  711.                   rootnoteindex=${rootnoteindex:2}
  712.                   notetwoindex=${notetwoindex:2}
  713.                   notethreeindex=${notethreeindex:2}
  714.                   notefourindex=${notefourindex:2}
  715.                   notefiveindex=${notefiveindex:2}
  716.                   notesixindex=${notesixindex:2}
  717.                   notesevenindex=${notesevenindex:2}
  718.  
  719.  
  720.                 paddedrootnote=$(menu_pad "$rootnoteindex" "$menurootnote")
  721.                 COLUMNS=$(tput cols)
  722.                 paddedrootnoteprompt="$paddedrootnote"
  723.                 printf "%*s\n\n" $(((${#paddedrootnoteprompt}+$COLUMNS)/2)) "$paddedrootnoteprompt"
  724.  
  725.                 padded2ndnote=$(menu_pad $notetwoindex "$menu2ndnote")
  726.                 COLUMNS=$(tput cols)
  727.                 padded2ndnoteprompt="$padded2ndnote"
  728.                 printf "%*s\n\n" $(((${#padded2ndnoteprompt}+$COLUMNS)/2)) "$padded2ndnoteprompt"
  729.  
  730.                 padded3rdnote=$(menu_pad "$notethreeindex" "$menu3rdnote")
  731.                 COLUMNS=$(tput cols)
  732.                 padded3rdnoteprompt="$padded3rdnote"
  733.                 printf "%*s\n\n" $(((${#padded3rdnoteprompt}+$COLUMNS)/2)) "$padded3rdnoteprompt"
  734.  
  735.                 padded4thnote=$(menu_pad "$notefourindex" "$menu4thnote")
  736.                 COLUMNS=$(tput cols)
  737.                 padded4thnoteprompt="$padded4thnote"
  738.                 printf "%*s\n\n" $(((${#padded4thnoteprompt}+$COLUMNS)/2)) "$padded4thnoteprompt"
  739.  
  740.                 padded5thnote=$(menu_pad "$notefiveindex" "$menu5thnote")
  741.                 COLUMNS=$(tput cols)
  742.                 padded5thnoteprompt="$padded5thnote"
  743.                 printf "%*s\n\n" $(((${#padded5thnoteprompt}+$COLUMNS)/2)) "$padded5thnoteprompt"
  744.  
  745.                 padded6thnote=$(menu_pad "$notesixindex" "$menu6thnote")
  746.                 COLUMNS=$(tput cols)
  747.                 padded6thnoteaprompt="$padded6thnote"
  748.                 printf "%*s\n\n" $(((${#padded6thnoteaprompt}+$COLUMNS)/2)) "$padded6thnoteaprompt"
  749.  
  750.                 padded7thnote=$(menu_pad "$notesevenindex" "$menu7thnote")
  751.                 COLUMNS=$(tput cols)
  752.                 padded7thnoteaprompt="$padded7thnote"
  753.                 printf "%*s\n\n" $(((${#padded7thnoteaprompt}+$COLUMNS)/2)) "$padded7thnoteaprompt"
  754.  
  755.                   tput sc
  756.                   tput ll
  757.                   echo
  758.                   echo
  759.                   echo
  760.                   echo
  761.                   COLUMNS=$(tput cols)
  762.                   range="|| ##0X || #00X || 000X || *00X  || **0X || ***X ||"
  763.                   printf "%*s\n\n" $(((${#range}+$COLUMNS)/2)) "$range"
  764.                   echo
  765.                   exit_footer
  766.                   tput rc
  767. }
  768.  
  769. menu_pad () {
  770.   # TOOL I STOLE / ADAPTED
  771.   #line='----------------------------------------'
  772.   #MENURIGHT="$2"
  773.   #printf "$1 %s %s \n" "${line:${#MENURIGHT}}" $MENURIGHT
  774.  
  775.   # TOOL I STOLE / ADAPTED
  776.   line='---------------------------------------------------'
  777.   MENURIGHT="$2"
  778.   MENULEFT="$1"
  779.   printf "$1 %s %s %s \n" "${line:${#MENULEFT}}""${line:${#MENURIGHT}}" "$MENURIGHT"
  780. }
  781.  
  782.  
  783. preset_pad () {
  784.   # TOOL I STOLE / ADAPTED
  785.   #line='----------------------------------------'
  786.   #MENURIGHT="$2"
  787.   #printf "$1 %s %s \n" "${line:${#MENURIGHT}}" $MENURIGHT
  788.  
  789.   # TOOL I STOLE / ADAPTED
  790.   line='----------'
  791.   MENURIGHT="$2"
  792.   MENULEFT="$1"
  793.   printf "$1 %s %s %s \n" "${line:${#MENULEFT}}""${line:${#MENURIGHT}}" "$MENURIGHT"
  794. }
  795. save_preset () {
  796.  
  797.   #IMPORT CURRENT VARIABLES
  798.   mapfile -t step1 < /usr/local/bin/onson/satelites/step1
  799.   mapfile -t step2 < /usr/local/bin/onson/satelites/step2
  800.   mapfile -t step3 < /usr/local/bin/onson/satelites/step3
  801.   mapfile -t step4 < /usr/local/bin/onson/satelites/step4
  802.   mapfile -t step5 < /usr/local/bin/onson/satelites/step5
  803.   mapfile -t step6 < /usr/local/bin/onson/satelites/step6
  804.   mapfile -t step7 < /usr/local/bin/onson/satelites/step7
  805.   mapfile -t step8 < /usr/local/bin/onson/satelites/step8
  806.   mapfile -t divide <  /usr/local/bin/onson/satelites/divide
  807.   mapfile -t direction <  /usr/local/bin/onson/satelites/direction
  808.   mapfile -t glide <  /usr/local/bin/onson/satelites/glide
  809.   mapfile -t length <  /usr/local/bin/onson/satelites/length
  810.   mapfile -t currentpreset <  /usr/local/bin/onson/satelites/currentpreset
  811.   mapfile -t currentbank <  /usr/local/bin/onson/satelites/currentbank
  812.  
  813.  
  814.   #MIDI CONVERSION
  815.  
  816.   if [ "$currentbank" = "A" ]
  817.     then
  818.     currentbankmidi="2"
  819.     fi
  820.  
  821.   if [ "$currentbank" = "B" ]
  822.     then
  823.     currentbankmidi="3"
  824.     fi
  825.  
  826.   echo "$currentbankmidi" > /usr/local/bin/onson/midi/satelites/currentbankmidi
  827.  
  828.   scalestring="##01 ##02 ##03 ##04 ##05 ##06 ##07 ##08 ##09 ##10 ##11 ##12 #001 #002 #003 #004 #005 #006 #007 #008 #009 #010 #011 #012 0001 0002 0003 0004 0005 0006 0007 0008 0009 0010 0011 0012 *001 *002 *003 *004 *005 *006 *007 *008 *009 *010 *011 *012 \*\*01 \*\*02 \*\*03 \*\*04 \*\*05 \*\*06 \*\*07 \*\*08 \*\*09 \*\*10 \*\*11 \*\*12 \*\*\*1 \*\*\*2 \*\*\*3 \*\*\*4 \*\*\*5 \*\*\*6 \*\*\*7"
  829.  
  830.   preconversionnames="step1 step2 step3 step4 step5 step6 step7 step8 divide direction glide length"
  831.  
  832.   conversionvalues=($midistep1 $midistep2 $midistep3 $midistep4 $midistep5 $midistep6 $midistep7 $midistep8 $mididivide $mididirection $midiglide $midilength)
  833.  
  834.   postconversionnames=(16 17 18 19 20 21 22 23 29 26 25 27)
  835.  
  836.   scalevalues=(00 02 03 05 07 09 11 13 15 18 20 21 23 26 28 30 32 34 35 37 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 73 75 77 79 82 83 85 87 88 91 92 95 97 98 100 102 103 105 107 109 110 113 114 115 118 120 121 123 124 126)
  837.  
  838.   w=0
  839.  
  840.   for i in $scalestring
  841.   do
  842.     if [ "$step1" = "$i" ]
  843.       then
  844.       echo ${scalevalues[$w]} > /usr/local/bin/onson/midi/satelites/midistep1
  845.       fi
  846.     if [ "$step2" = "$i" ]
  847.       then
  848.       echo ${scalevalues[$w]} > /usr/local/bin/onson/midi/satelites/midistep2
  849.     fi
  850.     if [ "$step3" = "$i" ]
  851.       then
  852.       echo ${scalevalues[$w]} > /usr/local/bin/onson/midi/satelites/midistep3
  853.     fi
  854.     if [ "$step4" = "$i" ]
  855.       then
  856.       echo ${scalevalues[$w]} > /usr/local/bin/onson/midi/satelites/midistep4
  857.     fi
  858.     if [ "$step5" = "$i" ]
  859.       then
  860.       echo ${scalevalues[$w]} > /usr/local/bin/onson/midi/satelites/midistep5
  861.     fi
  862.     if [ "$step6" = "$i" ]
  863.       then
  864.       echo ${scalevalues[$w]} > /usr/local/bin/onson/midi/satelites/midistep6
  865.     fi
  866.     if [ "$step7" = "$i" ]
  867.       then
  868.       echo ${scalevalues[$w]} > /usr/local/bin/onson/midi/satelites/midistep7
  869.     fi
  870.     if [ "$step8" = "$i" ]
  871.       then
  872.       echo ${scalevalues[$w]} > /usr/local/bin/onson/midi/satelites/midistep8
  873.     fi
  874.  
  875.     ((w++))
  876.   done
  877.  
  878.   echo $divide  > /usr/local/bin/onson/midi/satelites/mididivide
  879.   echo $direction  > /usr/local/bin/onson/midi/satelites/mididirection
  880.   echo $glide  > /usr/local/bin/onson/midi/satelites/midiglide
  881.   echo $length  > /usr/local/bin/onson/midi/satelites/midilength
  882.  
  883.   #PRESET CONVERSION
  884.  
  885.   mapfile -t midistep1 < /usr/local/bin/onson/midi/satelites/midistep1
  886.   mapfile -t midistep2 < /usr/local/bin/onson/midi/satelites/midistep2
  887.   mapfile -t midistep3 < /usr/local/bin/onson/midi/satelites/midistep3
  888.   mapfile -t midistep4 < /usr/local/bin/onson/midi/satelites/midistep4
  889.   mapfile -t midistep5 < /usr/local/bin/onson/midi/satelites/midistep5
  890.   mapfile -t midistep6 < /usr/local/bin/onson/midi/satelites/midistep6
  891.   mapfile -t midistep7 < /usr/local/bin/onson/midi/satelites/midistep7
  892.   mapfile -t midistep8 < /usr/local/bin/onson/midi/satelites/midistep8
  893.   mapfile -t mididirection < /usr/local/bin/onson/midi/satelites/mididirection
  894.   mapfile -t mididivide < /usr/local/bin/onson/midi/satelites/mididivide
  895.   mapfile -t midiglide < /usr/local/bin/onson/midi/satelites/midiglide
  896.   mapfile -t midilength < /usr/local/bin/onson/midi/satelites/midilength
  897.   mapfile -t currentbankmidi < /usr/local/bin/onson/midi/satelites/currentbankmidi
  898.   mapfile -t currentbank <  /usr/local/bin/onson/satelites/currentbank
  899.   mapfile -t currentpreset <  /usr/local/bin/onson/satelites/currentpreset
  900.   mapfile -t currentsong <  /usr/local/bin/onson/satelites/currentsong
  901.  
  902.  
  903.  
  904.   echo -e "#!/bin/bash
  905. sleep 0.3
  906. nohup sudo sendmidi ch $currentbankmidi dev pisound MIDI PS-3NQ28DE pc 111&>/dev/null &
  907. disown
  908. sleep 0.3
  909. nohup sudo sendmidi ch $currentbankmidi dev pisound MIDI PS-3NQ28DE cc 16 $midistep1&>/dev/null &
  910. disown
  911. sleep 0.3
  912. nohup sudo sendmidi ch $currentbankmidi dev pisound MIDI PS-3NQ28DE cc 17 $midistep2&>/dev/null &
  913. disown
  914. sleep 0.3
  915. nohup sudo sendmidi ch $currentbankmidi dev pisound MIDI PS-3NQ28DE cc 18 $midistep3&>/dev/null &
  916. disown
  917. sleep 0.3
  918. nohup sudo sendmidi ch $currentbankmidi dev pisound MIDI PS-3NQ28DE cc 19 $midistep4&>/dev/null &
  919. disown
  920. sleep 0.3
  921. nohup sudo sendmidi ch $currentbankmidi dev pisound MIDI PS-3NQ28DE cc 20 $midistep5&>/dev/null &
  922. disown
  923. sleep 0.3
  924. nohup sudo sendmidi ch $currentbankmidi dev pisound MIDI PS-3NQ28DE cc 21 $midistep6&>/dev/null &
  925. disown
  926. sleep 0.3
  927. nohup sudo sendmidi ch $currentbankmidi dev pisound MIDI PS-3NQ28DE cc 22 $midistep7&>/dev/null &
  928. disown
  929. sleep 0.3
  930. nohup sudo sendmidi ch $currentbankmidi dev pisound MIDI PS-3NQ28DE cc 23 $midistep8&>/dev/null &
  931. disown
  932. sleep 0.3
  933. nohup sudo sendmidi ch $currentbankmidi dev pisound MIDI PS-3NQ28DE cc 23 $midistep8&>/dev/null &
  934. disown
  935. sleep 0.3
  936. nohup sudo sendmidi ch $currentbankmidi dev pisound MIDI PS-3NQ28DE cc 29 $mididivide&>/dev/null &
  937. disown
  938. sleep 0.3
  939. nohup sudo sendmidi ch $currentbankmidi dev pisound MIDI PS-3NQ28DE cc 26 $mididirection&>/dev/null &
  940. disown
  941. sleep 0.3
  942. nohup sudo sendmidi ch $currentbankmidi dev pisound MIDI PS-3NQ28DE cc 25 $midiglide&>/dev/null &
  943. disown
  944. sleep 0.3
  945. nohup sudo sendmidi ch $currentbankmidi dev pisound MIDI PS-3NQ28DE cc 27 $midilength&>/dev/null &
  946. disown
  947. sleep 0.3" > /usr/local/bin/onson/midi/presets/"$currentsong$currentpreset$currentbank"
  948.  
  949.  
  950.  
  951.  
  952.  
  953.   #SAVE VARIABLES TO CURRENT PRESET
  954.   echo 'echo "'$currentsong'" > /usr/local/bin/onson/satelites/currentsong' > /usr/local/bin/onson/presets/"$currentsong$currentpreset$currentbank"
  955.   echo 'echo "'$currentpreset'" > /usr/local/bin/onson/satelites/currentpreset' >> /usr/local/bin/onson/presets/"$currentsong$currentpreset$currentbank"
  956.   echo 'echo "'$currentbank'" > /usr/local/bin/onson/satelites/currentbank' >> /usr/local/bin/onson/presets/"$currentsong$currentpreset$currentbank"
  957.   echo 'echo "'$step1'" > /usr/local/bin/onson/satelites/step1' >> /usr/local/bin/onson/presets/"$currentsong$currentpreset$currentbank"
  958.   echo 'echo "'$step2'" > /usr/local/bin/onson/satelites/step2' >> /usr/local/bin/onson/presets/"$currentsong$currentpreset$currentbank"
  959.   echo 'echo "'$step3'" > /usr/local/bin/onson/satelites/step3' >> /usr/local/bin/onson/presets/"$currentsong$currentpreset$currentbank"
  960.   echo 'echo "'$step4'" > /usr/local/bin/onson/satelites/step4' >> /usr/local/bin/onson/presets/"$currentsong$currentpreset$currentbank"
  961.   echo 'echo "'$step5'" > /usr/local/bin/onson/satelites/step5' >> /usr/local/bin/onson/presets/"$currentsong$currentpreset$currentbank"
  962.   echo 'echo "'$step6'" > /usr/local/bin/onson/satelites/step6' >> /usr/local/bin/onson/presets/"$currentsong$currentpreset$currentbank"
  963.   echo 'echo "'$step7'" > /usr/local/bin/onson/satelites/step7' >> /usr/local/bin/onson/presets/"$currentsong$currentpreset$currentbank"
  964.   echo 'echo "'$step8'" > /usr/local/bin/onson/satelites/step8' >> /usr/local/bin/onson/presets/"$currentsong$currentpreset$currentbank"
  965.   echo 'echo "'$divide'" > /usr/local/bin/onson/satelites/divide' >> /usr/local/bin/onson/presets/"$currentsong$currentpreset$currentbank"
  966.   echo 'echo "'$direction'" > /usr/local/bin/onson/satelites/direction' >> /usr/local/bin/onson/presets/"$currentsong$currentpreset$currentbank"
  967.   echo 'echo "'$glide'" > /usr/local/bin/onson/satelites/glide' >> /usr/local/bin/onson/presets/"$currentsong$currentpreset$currentbank"
  968.   echo 'echo "'$length'" > /usr/local/bin/onson/satelites/length' >> /usr/local/bin/onson/presets/"$currentsong$currentpreset$currentbank"
  969.  
  970. nohup sudo chmod +x /usr/local/bin/onson/midi/presets/"$currentsong$currentpreset$currentbank"&> /dev/null &
  971. disown
  972. #nohup sudo sendmidi ch $currentbankmidi dev pisound MIDI PS-3NQ28DE cc 118 0 &>/dev/null & ## sets internal preset to bank 0 - which is all low D
  973. #disown
  974. nohup sudo sh /usr/local/bin/onson/midi/presets/"$currentsong$currentpreset$currentbank"&> /dev/null &
  975. disown
  976.  
  977.  
  978.  
  979.   }
  980. load_song () {
  981.  
  982.   mapfile -t currentsong <  /usr/local/bin/onson/satelites/currentsong
  983.   mapfile -t currentpreset <  /usr/local/bin/onson/satelites/currentpreset
  984.   mapfile -t currentbank <  /usr/local/bin/onson/satelites/currentbank
  985.   songfile="$currentsong$currentpreset$currentbank"
  986.   source /usr/local/bin/onson/presets/"$songfile"
  987.  
  988.  
  989. }
  990.  
  991. #PRINT OUTS
  992. print_bank () {
  993.   echo
  994.   COLUMNS=$(tput cols)
  995.   bankprompt="PICK A SEQUENCER."
  996.   printf "%*s\n" $(((${#bankprompt}+$COLUMNS)/2)) "$bankprompt"
  997.   echo
  998.   echo
  999.   echo
  1000.  
  1001.   paddedbanka=$(menu_pad 1. A)
  1002.   COLUMNS=$(tput cols)
  1003.   paddedaprompt="$paddedbanka"
  1004.   printf "%*s\n\n" $(((${#paddedaprompt}+$COLUMNS)/2)) "$paddedaprompt"
  1005.  
  1006.   paddedbankb=$(menu_pad 2. B)
  1007.   COLUMNS=$(tput cols)
  1008.   paddedbprompt="$paddedbankb"
  1009.   printf "%*s\n\n" $(((${#paddedbprompt}+$COLUMNS)/2)) "$paddedbprompt"
  1010.  
  1011.   paddedbankab=$(menu_pad 3. AB)
  1012.   COLUMNS=$(tput cols)
  1013.   paddedabprompt="$paddedbankab"
  1014.   printf "%*s\n\n" $(((${#paddedabprompt}+$COLUMNS)/2)) "$paddedabprompt"
  1015.  
  1016.  
  1017. }
  1018. print_song () {
  1019.   preset_header
  1020.   echo
  1021.  
  1022.  
  1023. }
  1024. print_main_menu () {
  1025.   mapfile -t step1 < /usr/local/bin/onson/satelites/step1
  1026.   mapfile -t step2 < /usr/local/bin/onson/satelites/step2
  1027.   mapfile -t step3 < /usr/local/bin/onson/satelites/step3
  1028.   mapfile -t step4 < /usr/local/bin/onson/satelites/step4
  1029.   mapfile -t step5 < /usr/local/bin/onson/satelites/step5
  1030.   mapfile -t step6 < /usr/local/bin/onson/satelites/step6
  1031.   mapfile -t step7 < /usr/local/bin/onson/satelites/step7
  1032.   mapfile -t step8 < /usr/local/bin/onson/satelites/step8
  1033.   mapfile -t divide < /usr/local/bin/onson/satelites/divide
  1034.   mapfile -t direction < /usr/local/bin/onson/satelites/direction
  1035.   mapfile -t glide < /usr/local/bin/onson/satelites/glide
  1036.   mapfile -t length < /usr/local/bin/onson/satelites/length
  1037.  
  1038.  
  1039.   allsteps="$step1 $step2 $step3 $step4 $step5 $step6 $step7 $step8"
  1040.   echo  $allsteps > /usr/local/bin/onson/satelites/allsteps
  1041.   echo
  1042.  
  1043.   paddedallsteps=$(menu_pad 1.STEPS "$allsteps")
  1044.   COLUMNS=$(tput cols)
  1045.   paddedallstepsprompt="$paddedallsteps"
  1046.   printf "%*s\n\n" $(((${#paddedallstepsprompt}+$COLUMNS)/2)) "$paddedallstepsprompt"
  1047.  
  1048.   #DIVIDE
  1049.           divname="TAP"
  1050.           paddeddivide=$(menu_pad 2.DIVIDE "$divname")
  1051.           COLUMNS=$(tput cols)
  1052.           paddeddivideprompt="$paddeddivide"
  1053.           printf "%*s\n\n" $(((${#paddeddivideprompt}+$COLUMNS)/2)) "$paddeddivideprompt"
  1054.  
  1055.   #DIRECTION
  1056.   currentdirnum="0 1 2 3 "
  1057.   currentdirname=(FORWARD REVERSE BOUNCE RANDOM)
  1058.   for i in $currentdirnum
  1059.     do
  1060.       if [ "$direction" = "$i" ]
  1061.         then
  1062.           ((arrayplace="$i"))
  1063.           dirname="${currentdirname[$arrayplace]}"
  1064.           paddeddirection=$(menu_pad 3.DIRECTION "$dirname")
  1065.           COLUMNS=$(tput cols)
  1066.           paddeddirectionprompt="$paddeddirection"
  1067.           printf "%*s\n\n" $(((${#paddeddirectionprompt}+$COLUMNS)/2)) "$paddeddirectionprompt"
  1068.       fi
  1069.       done
  1070.  
  1071.   paddedglide=$(menu_pad 4.GLIDE "$glide")
  1072.   COLUMNS=$(tput cols)
  1073.   paddedglideprompt="$paddedglide"
  1074.   printf "%*s\n\n" $(((${#paddedglideprompt}+$COLUMNS)/2)) "$paddedglideprompt"
  1075.  
  1076.   paddedlength=$(menu_pad 5.LENGTH $length)
  1077.   COLUMNS=$(tput cols)
  1078.   paddedlengthprompt="$paddedlength"
  1079.   printf "%*s\n\n" $(((${#paddedlengthprompt}+$COLUMNS)/2)) "$paddedlengthprompt"
  1080. }
  1081. print_steps () {
  1082.  
  1083.   paddedstep1=$(menu_pad 1. "$step1")
  1084.   COLUMNS=$(tput cols)
  1085.   paddedstep1prompt="$paddedstep1"
  1086.   printf "%*s\n\n" $(((${#paddedstep1prompt}+$COLUMNS)/2)) "$paddedstep1prompt"
  1087.  
  1088.   paddedstep2=$(menu_pad 2. "$step2")
  1089.   COLUMNS=$(tput cols)
  1090.   paddedstep2prompt="$paddedstep2"
  1091.   printf "%*s\n\n" $(((${#paddedstep2prompt}+$COLUMNS)/2)) "$paddedstep2prompt"
  1092.  
  1093.   paddedstep3=$(menu_pad 3. "$step3")
  1094.   COLUMNS=$(tput cols)
  1095.   paddedstep3prompt="$paddedstep3"
  1096.   printf "%*s\n\n" $(((${#paddedstep3prompt}+$COLUMNS)/2)) "$paddedstep3prompt"
  1097.  
  1098.   paddedstep4=$(menu_pad 4. "$step4")
  1099.   COLUMNS=$(tput cols)
  1100.   paddedstep4prompt="$paddedstep4"
  1101.   printf "%*s\n\n" $(((${#paddedstep4prompt}+$COLUMNS)/2)) "$paddedstep4prompt"
  1102.  
  1103.   paddedstep5=$(menu_pad 5. "$step5")
  1104.   COLUMNS=$(tput cols)
  1105.   paddedstep5prompt="$paddedstep5"
  1106.   printf "%*s\n\n" $(((${#paddedstep5prompt}+$COLUMNS)/2)) "$paddedstep5prompt"
  1107.  
  1108.   paddedstep6=$(menu_pad 6. "$step6")
  1109.   COLUMNS=$(tput cols)
  1110.   paddedstep6prompt="$paddedstep6"
  1111.   printf "%*s\n\n" $(((${#paddedstep6prompt}+$COLUMNS)/2)) "$paddedstep6prompt"
  1112.  
  1113.   paddedstep7=$(menu_pad 7. "$step7")
  1114.   COLUMNS=$(tput cols)
  1115.   paddedstep7prompt="$paddedstep7"
  1116.   printf "%*s\n\n" $(((${#paddedstep7prompt}+$COLUMNS)/2)) "$paddedstep7prompt"
  1117.  
  1118.   paddedstep8=$(menu_pad 8. "$step8")
  1119.   COLUMNS=$(tput cols)
  1120.   paddedstep8prompt="$paddedstep8"
  1121.   printf "%*s\n\n" $(((${#paddedstep8prompt}+$COLUMNS)/2)) "$paddedstep8prompt"
  1122.  
  1123.  
  1124.  
  1125. }
  1126. print_divide () {
  1127.       echo
  1128.  
  1129.       div0="OFF-1/4"
  1130.       div1="DOTTED-8TH"
  1131.       div2="1/4-TRIPLET"
  1132.       div3="8TH"
  1133.       div4="8TH-TRIPLET"
  1134.       div5="16TH"
  1135.       div6="32ND"
  1136.  
  1137.       paddeddiv0=$(menu_pad 1. "$div0")
  1138.       COLUMNS=$(tput cols)
  1139.       paddeddiv0prompt="$paddeddiv0"
  1140.       printf "%*s\n\n" $(((${#paddeddiv0}+$COLUMNS)/2)) "$paddeddiv0"
  1141.  
  1142.       paddeddiv1=$(menu_pad 2. "$div1")
  1143.       COLUMNS=$(tput cols)
  1144.       paddeddiv1prompt="$paddeddiv1"
  1145.       printf "%*s\n\n" $(((${#paddeddiv1}+$COLUMNS)/2)) "$paddeddiv1"
  1146.  
  1147.       paddeddiv2=$(menu_pad 3. "$div2")
  1148.       COLUMNS=$(tput cols)
  1149.       paddeddiv2prompt="$paddeddiv2"
  1150.       printf "%*s\n\n" $(((${#paddeddiv2}+$COLUMNS)/2)) "$paddeddiv2"
  1151.  
  1152.       paddeddiv3=$(menu_pad 4. "$div3")
  1153.       COLUMNS=$(tput cols)
  1154.       paddeddiv3prompt="$paddeddiv3"
  1155.       printf "%*s\n\n" $(((${#paddeddiv3}+$COLUMNS)/2)) "$paddeddiv3"
  1156.  
  1157.       paddeddiv4=$(menu_pad 5. "$div4")
  1158.       COLUMNS=$(tput cols)
  1159.       paddeddiv4prompt="$paddeddiv4"
  1160.       printf "%*s\n\n" $(((${#paddeddiv4}+$COLUMNS)/2)) "$paddeddiv4"
  1161.  
  1162.       paddeddiv5=$(menu_pad 6. "$div5")
  1163.       COLUMNS=$(tput cols)
  1164.       paddeddiv5prompt="$paddeddiv5"
  1165.       printf "%*s\n\n" $(((${#paddeddiv5}+$COLUMNS)/2)) "$paddeddiv5"
  1166.  
  1167.       paddeddiv6=$(menu_pad 7. "$div6")
  1168.       COLUMNS=$(tput cols)
  1169.       paddeddiv6prompt="$paddeddiv6"
  1170.       printf "%*s\n\n" $(((${#paddeddiv6}+$COLUMNS)/2)) "$paddeddiv6"
  1171.  
  1172.     }
  1173. print_direction () {
  1174.  
  1175.   dir0="FORWARD"
  1176.   dir1="REVERSE"
  1177.   dir2="BOUNCE"
  1178.   dir3="RANDOM"
  1179.  
  1180.   paddeddir0=$(menu_pad 1. "$dir0")
  1181.   COLUMNS=$(tput cols)
  1182.   paddeddir0prompt="$paddeddir0"
  1183.   printf "%*s\n\n" $(((${#paddeddir0}+$COLUMNS)/2)) "$paddeddir0"
  1184.  
  1185.   paddeddir1=$(menu_pad 2. "$dir1")
  1186.   COLUMNS=$(tput cols)
  1187.   paddeddir1prompt="$paddeddir1"
  1188.   printf "%*s\n\n" $(((${#paddeddir1}+$COLUMNS)/2)) "$paddeddir1"
  1189.  
  1190.   paddeddir2=$(menu_pad 3. "$dir2")
  1191.   COLUMNS=$(tput cols)
  1192.   paddeddir2prompt="$paddeddir2"
  1193.   printf "%*s\n\n" $(((${#paddeddir2}+$COLUMNS)/2)) "$paddeddir2"
  1194.  
  1195.   paddeddir3=$(menu_pad 4. "$dir3")
  1196.   COLUMNS=$(tput cols)
  1197.   paddeddir3prompt="$paddeddir3"
  1198.   printf "%*s\n\n" $(((${#paddeddir3}+$COLUMNS)/2)) "$paddeddir3"
  1199. }
  1200.  
  1201. #FOR A CARRIAGE RETURN
  1202. cr=`echo $'\n.'`
  1203. cr=${cr%.}
  1204.  
  1205. clear
  1206.  
  1207.   #IF MISSING CREATE SATALITE FILES BEFORE THE BIG LOOP
  1208.   mkdir -p /usr/local/bin/onson/presets
  1209.   mkdir -p /usr/local/bin/onson/satelites
  1210.   mkdir -p /usr/local/bin/onson/midi/satelites
  1211.   mkdir -p /usr/local/bin/onson/midi/presets
  1212.   touch  /usr/local/bin/onson/satelites/rootarrayplace
  1213.   touch  /usr/local/bin/onson/satelites/arrayplace
  1214.   touch  </usr/local/bin/onson/satelites/allsteps
  1215.   touch  /usr/local/bin/onson/satelites/step1
  1216.   touch  /usr/local/bin/onson/satelites/step2
  1217.   touch  /usr/local/bin/onson/satelites/step3
  1218.   touch  /usr/local/bin/onson/satelites/step4
  1219.   touch  /usr/local/bin/onson/satelites/step5
  1220.   touch  /usr/local/bin/onson/satelites/step6
  1221.   touch  /usr/local/bin/onson/satelites/step7
  1222.   touch  /usr/local/bin/onson/satelites/step8
  1223.   touch  /usr/local/bin/onson/satelites/divide
  1224.   touch  /usr/local/bin/onson/satelites/direction
  1225.   touch  /usr/local/bin/onson/satelites/glide
  1226.   touch  /usr/local/bin/onson/satelites/length
  1227.   touch  /usr/local/bin/onson/satelites/currentsong
  1228.   touch  /usr/local/bin/onson/satelites/currentpreset
  1229.   touch  /usr/local/bin/onson/satelites/currentbank
  1230.   touch  /usr/local/bin/onson/midi/satelites/midistep1
  1231.   touch  /usr/local/bin/onson/midi/satelites/midistep2
  1232.   touch  /usr/local/bin/onson/midi/satelites/midistep3
  1233.   touch  /usr/local/bin/onson/midi/satelites/midistep4
  1234.   touch  /usr/local/bin/onson/midi/satelites/midistep5
  1235.   touch  /usr/local/bin/onson/midi/satelites/midistep6
  1236.   touch  /usr/local/bin/onson/midi/satelites/midistep7
  1237.   touch  /usr/local/bin/onson/midi/satelites/midistep8
  1238.   touch  /usr/local/bin/onson/midi/satelites/mididivide
  1239.   touch  /usr/local/bin/onson/midi/satelites/mididirection
  1240.   touch  /usr/local/bin/onson/midi/satelites/midiglide
  1241.   touch  /usr/local/bin/onson/midi/satelites/midilength
  1242.   touch  /usr/local/bin/onson/midi/satelites/currentpreset
  1243.   touch  /usr/local/bin/onson/midi/satelites/currentbank
  1244.  
  1245.   mapfile -t currentsong < /usr/local/bin/onson/satelites/currentsong
  1246.   mapfile -t currentpreset < /usr/local/bin/onson/satelites/currentpreset
  1247.   mapfile -t currentbank < /usr/local/bin/onson/satelites/currentbank
  1248.  
  1249.  
  1250.  
  1251.   # THERE ARE LAYERS OF LOOPS HERE TO ROUTE BREAKS TO/FROM VARIOUIS
  1252.   # POINTS IN NAVIGATION
  1253.  
  1254.   # BIG LOOP 3
  1255.   while :
  1256.     do
  1257.  
  1258.       #BIG LOOP 2 -
  1259.       while :
  1260.         do
  1261.  
  1262.           #BIG LOOP 1 -
  1263.           while :
  1264.             do
  1265.               clear
  1266.               onson_header
  1267.               echo
  1268.               echo
  1269.               print_song
  1270.               song_footer
  1271.               center_read 4 songinput
  1272.  
  1273.               if [ "$songinput" -ge 0 ] && [ "$songinput" -eq "$songinput" ]
  1274.                 then
  1275.                   validsong="$songinput"
  1276.                   echo "$validsong" > /usr/local/bin/onson/satelites/currentsong
  1277.                   break
  1278.                 fi
  1279.               done
  1280.  
  1281.               #SMALL PRESET LOOP
  1282.               while :
  1283.                 do
  1284.  
  1285.                   clear
  1286.                   onson_header
  1287.                   echo
  1288.                   echo
  1289.                   print_song
  1290.                   preset_footer
  1291.                   center_read 2 presetinput
  1292.  
  1293.                   if [ "$presetinput" -ge 0 ] && [ "$presetinput" -eq "$presetinput" ]
  1294.                     then
  1295.                       validpreset="$presetinput"
  1296.                       echo "$validpreset" > /usr/local/bin/onson/satelites/currentpreset
  1297.                       break
  1298.                     fi
  1299.                   done
  1300.  
  1301.                     #BANK SELECTION
  1302.                         clear
  1303.                         onson_header
  1304.                         print_bank
  1305.                         menu_footer 3
  1306.                         center_read 1 bankinput
  1307.                         case $bankinput in
  1308.                           1)
  1309.                           bank="A"
  1310.                           echo "$bank" > /usr/local/bin/onson/satelites/currentbank
  1311.                           load_song
  1312.  
  1313.                           break # OUT OF SMALL PRESET LOOP
  1314.                           ;;
  1315.  
  1316.                           2)
  1317.                           bank="B"
  1318.                           echo "$bank" > /usr/local/bin/onson/satelites/currentbank
  1319.                           load_song
  1320.  
  1321.                           break # OUT OF SMALL PRESET LOOP
  1322.                           ;;
  1323.  
  1324.                           3)
  1325.                           bank="AB"
  1326.                           echo "$bank" > /usr/local/bin/onson/satelites/currentbank
  1327.                           load_song
  1328.                           break # OUT OF SMALL PRESET LOOP
  1329.                           ;;
  1330.  
  1331.                           *)
  1332.                           ;;
  1333.                         esac
  1334.  
  1335.               done #CLOSE SMALL PRESET LOOP
  1336.  
  1337.                       #SMALL MAIN MENU LOOP
  1338.                       while :
  1339.                         do
  1340.                               clear
  1341.                                bank_header
  1342.                                print_main_menu
  1343.                                menu_footer 5
  1344.                                center_read 1 menuselection
  1345.                            case $menuselection in
  1346.                               #STEPS
  1347.                               1)
  1348.  
  1349.                               clear
  1350.                                mapfile -t step1 </usr/local/bin/onson/satelites/step1
  1351.                                mapfile -t step2 </usr/local/bin/onson/satelites/step2
  1352.                                mapfile -t step3 </usr/local/bin/onson/satelites/step3
  1353.                                mapfile -t step4 </usr/local/bin/onson/satelites/step4
  1354.                                mapfile -t step5 </usr/local/bin/onson/satelites/step5
  1355.                                mapfile -t step6 </usr/local/bin/onson/satelites/step6
  1356.                                mapfile -t step7 </usr/local/bin/onson/satelites/step7
  1357.                                mapfile -t step8 </usr/local/bin/onson/satelites/step8
  1358.                                mapfile -t midistep1 < /usr/local/bin/onson/midi/satelites/midistep1
  1359.                                mapfile -t midistep2 < /usr/local/bin/onson/midi/satelites/midistep2
  1360.                                mapfile -t midistep3 < /usr/local/bin/onson/midi/satelites/midistep3
  1361.                                mapfile -t midistep4 < /usr/local/bin/onson/midi/satelites/midistep4
  1362.                                mapfile -t midistep5 < /usr/local/bin/onson/midi/satelites/midistep5
  1363.                                mapfile -t midistep6 < /usr/local/bin/onson/midi/satelites/midistep6
  1364.                                mapfile -t midistep7 < /usr/local/bin/onson/midi/satelites/midistep7
  1365.                                mapfile -t midistep8 < /usr/local/bin/onson/midi/satelites/midistep8
  1366.                               steps_body
  1367.  
  1368.  
  1369.                               ;;
  1370.  
  1371.                               #MENU ITEM # 2 - DIVISION
  1372.  
  1373.                               2)
  1374.                              mapfile -t currentbankmidi < /usr/local/bin/onson/midi/satelites/currentbankmidi
  1375.                             ((x++))
  1376.                             if [ "$x" -gt 6 ]
  1377.                             then
  1378.                             x=0
  1379.                             fi
  1380.                             divide="$x"
  1381.                             nohup sudo sendmidi ch "$currentbankmidi" dev pisound MIDI PS-3NQ28DE cc 29 "$divide"&>/dev/null &
  1382.                             disown
  1383.                             echo "$divide" > /usr/local/bin/onson/satelites/divide
  1384.  
  1385.  
  1386.                             ;;
  1387.  
  1388.                               3)
  1389.                               clear
  1390.                               mapfile -t direction </usr/local/bin/onson/satelites/direction
  1391.                               direction_body
  1392.  
  1393.  
  1394.                                # OUT OF BIG LOOP ONE
  1395.                               ;;
  1396.  
  1397.                               #MENU ITEM #4 - GLIDE
  1398.  
  1399.                               4)
  1400.                               clear
  1401.                               mapfile -t glide </usr/local/bin/onson/satelites/glide
  1402.                               glide_body
  1403.  
  1404.  
  1405.                                # OUT OF BIG LOOP ONE
  1406.                               ;;
  1407.  
  1408.                               #MENU ITEM #5 - LENGTH
  1409.  
  1410.                               5)
  1411.                               clear
  1412.                               mapfile -t length </usr/local/bin/onson/satelites/length
  1413.                               length_body
  1414.  
  1415.  
  1416.                                # OUT OF BIG LOOP ONE
  1417.                               ;;
  1418.  
  1419.                               *)
  1420.                               clear
  1421.                               break
  1422.                               ;;
  1423.                               #CLOSING MENU CASE
  1424.                             esac
  1425.  
  1426.                       done
  1427.                       #CLOSE SMALL MAIN MENU LOOP
  1428.             done
  1429.             #CLOSE BIG LOOP 1
  1430.  
  1431.           done
  1432.           #CLOSE BIG LOOP 2
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement