Пишу понемноу на 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