banovski

Vocal practice

Nov 4th, 2021 (edited)
1,430
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 2.19 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. # Скрипт для генерации треков для разучивания вокальных фраз. Исходный трек
  4. # каждой фразы копируется в 4 файла, в каждом из которых -- 16 двойных
  5. # повторов. Темп каждого следующего повтора выше, чем темп предыдущего;
  6. # диапазон изменения темпа -- от 50% до 100%. Для работы должны быть
  7. # установлены: espeak, zenity, sox.
  8.  
  9. function quitting()
  10. {
  11.     espeak -v english "$1"
  12.     exit "$2"
  13. }
  14.  
  15. temporary_directory=$(mktemp -d)
  16. cd "$temporary_directory"
  17.  
  18. target_directory=~/Test
  19. mkdir $target_directory/vcl_prctc_{1..4}
  20.  
  21. tempos=(0.5 0.50796875 0.5159375 0.52390625 0.531875 0.53984375 0.5478125 0.55578125 0.56375 0.57171875 0.5796875 0.58765625 0.595625 0.60359375 0.6115625 0.61953125 0.6275 0.63546875 0.6434375 0.65140625 0.659375 0.66734375 0.6753125 0.68328125 0.69125 0.69921875 0.7071875 0.71515625 0.723125 0.73109375 0.7390625 0.74703125 0.755 0.76296875 0.7709375 0.77890625 0.786875 0.79484375 0.8028125 0.81078125 0.81875 0.82671875 0.8346875 0.84265625 0.850625 0.85859375 0.8665625 0.87453125 0.8825 0.89046875 0.8984375 0.90640625 0.914375 0.92234375 0.9303125 0.93828125 0.94625 0.95421875 0.9621875 0.97015625 0.978125 0.98609375 0.9940625 1.00203125)
  22.  
  23. files=($(zenity --file-selection --title="Vocal practice" --text="Select the file" --filename="~/Data/kombinirovannyye/pesni/tekushchiye/" --multiple --file-filter=" | *mp3 *wav" --separator=" "))
  24. if test "$?" -eq 1; then
  25.     quitting "Aborted" 1
  26. fi
  27.  
  28. for file in "${files[@]}"; do
  29.     target_filename=$(basename "${file%%.wav}").mp3
  30.     for tempo in "${tempos[@]}"; do
  31.         sox "$file" ./base.wav tempo "$tempo"
  32.         sox ./base.wav ./quiet.wav vol -6dB
  33.         sox ./quiet.wav ./base.wav "$(date +%s%N).wav"
  34.     done
  35.     rm -f ./{base,quiet}.wav
  36.     for directory in $target_directory/vcl_prctc_*; do
  37.         fileset=($(ls -1 ./*.wav | head -16))
  38.         sox "${fileset[@]}" "$directory/$target_filename"
  39.         rm -f "${fileset[@]}"
  40.     done
  41. done
  42.  
  43. quitting "Task accomplished!" 0
  44.  
Add Comment
Please, Sign In to add comment