Пишу понемноу на bash. Многе узнал в процессе, разные возможности сравнения и подобное. Однажды участвовал в обсуждении книги в читательском клубе и о музыке заговорили, о переводе цифр в музыку. Я подумал-подумал, и решил посмотреть как можно в bash’e музыку сгенерировать (через бипер).
Нечто подобное я уже делал в Delphi 7, но там графический интерфейс был. В этот раз решил что-нибудь простое сделать, например, чтобы мой скрипт запускал какой-нибудь музыкальный фрагмент, мною реализованный.
В итоге, скрипт принимает два параметра: 1 — это первый музыкальный фрагмент, 2 — второй.
Чтобы сделать скрипт исполняемым, сохраните текст скрипта в файл и выполните в директории с файлом:
chmod +x music
А затем — запускайте скрипт, например так:
./music 1
А вот и текст скрипта:
#!/bin/bash doo() { ( \speaker-test --frequency 262 --test sine > /dev/null )& pid=$! \sleep 0.${1}s \kill -9 $pid } re() { ( \speaker-test --frequency 293 --test sine > /dev/null )& pid=$! \sleep 0.${1}s \kill -9 $pid } mi() { ( \speaker-test --frequency 330 --test sine > /dev/null )& pid=$! \sleep 0.${1}s \kill -9 $pid } fa() { ( \speaker-test --frequency 349 --test sine > /dev/null )& pid=$! \sleep 0.${1}s \kill -9 $pid } sol() { ( \speaker-test --frequency 392 --test sine > /dev/null )& pid=$! \sleep 0.${1}s \kill -9 $pid } sol_sharp() { ( \speaker-test --frequency 416 --test sine > /dev/null )& pid=$! \sleep 0.${1}s \kill -9 $pid } la() { ( \speaker-test --frequency 440 --test sine > /dev/null )& pid=$! \sleep 0.${1}s \kill -9 $pid } si() { ( \speaker-test --frequency 494 --test sine > /dev/null )& pid=$! \sleep 0.${1}s \kill -9 $pid } doo1() { ( \speaker-test --frequency 538 --test sine > /dev/null )& pid=$! \sleep 0.${1}s \kill -9 $pid } elochka() { doo 2 la 2 la 2 sol 2 la 2 fa 2 doo 2 doo 2 doo 2 la 2 la 2 si 2 sol 2 doo1 6 doo1 2 re 2 re 2 si 2 si 2 la 2 sol 2 fa 2 doo 2 la 2 la 2 sol 2 la 2 fa 4 } kuznechik() { la 2 mi 2 la 2 mi 2 la 2 sol_sharp 2 sol_sharp 4 sol_sharp 2 mi 2 sol_sharp 2 mi 2 sol_sharp 2 la 2 la 4 la 2 mi 2 la 2 mi 2 sol_sharp 2 sol_sharp 4 sol_sharp 2 mi 2 sol_sharp 2 mi 2 sol_sharp 2 la 6 la 2 si 2 si 1 si 1 si 2 si 2 doo1 2 doo1 1 doo1 1 doo1 2 doo1 2 doo1 2 si 2 la 2 sol_sharp 2 la 2 la 4 la 2 si 2 si 1 si 1 si 2 si 2 doo1 2 doo1 1 doo1 1 doo1 2 doo1 2 doo1 2 si 2 la 2 sol_sharp 2 la 6 } echo "Начинаем!" #иногда без такой задержки первая нота проглатывается doo 1 sleep 2s if [[ $1 = 1 ]]; then elochka elif [[ $1 = 2 ]]; then kuznechik else echo "Непонятно..." fi
Только не получилось полностью убрать вывод speaker-test. Просто прикольно, никаких бест-практис 🙂
Leave a Reply