Skip to content

Instantly share code, notes, and snippets.

@YuukiToriyama
Last active April 24, 2024 11:16
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save YuukiToriyama/edecddd2c9df588ab6de7d2d24eac68d to your computer and use it in GitHub Desktop.
Save YuukiToriyama/edecddd2c9df588ab6de7d2d24eac68d to your computer and use it in GitHub Desktop.
bashでオルゴール【Sox】
# National Anthem of USSR
# Execute this ShellScript, Soviet Anthem Plays You.
# Before execute this, you have to install Sox(Sound eXchange) by apt-get / brew.
mkdir notes
cat << EOS | grep -v "-" | awk '{if ($1=="z") {print "sox -n -c 2 notes/"NR".wav trim 0.0", $2/4} else {{print "sox -n -c 2 notes/" NR ".wav synth", $2/4, "pluck", $1, "\\"} if ($3!="") {print "pluck", $3, "\\"} if ($5!="") {print "pluck", $5, "\\"} print ";"}}END{print "sox notes/{1.."NR-1"}.wav song_new.wav"}' | bash
E4 4 G4 4 C5 4
-
D4 1 G4 1 D5 1
C4 1 G4 1 C5 1
B3 1 G4 1 B4 1
C4 1 G4 1 C5 1
-
D4 3 G4 3 B4 3
G3 1 D4 1 G4 1
-
G3 4 D4 1 G4 1
-
C4 4 E4 1 A4 1
-
B3 1 E4 1 B4 1
A3 1 E4 1 A4 1
G3 1 E4 1 G4 1
A3 1 E4 1 A4 1
-
B3 1 E4 1 G4 1
B3 1 E4 1 B5 1
B3 1 E4 1 B5 1
E3 1 B3 1 E4 1
-
E3 1 B3 1 E4 1
E3 1 E4 1 G4 1
A3 1 E4 1 C5 1
B3 1 E4 1 D5 1
-
C4 2 A4 1 C5 1
C4 1.5 F 1.5 A 1.5
B3 0.5
-
C4 2 A4 2 C5 2
A3 1.5 F 1.5 A 1.5
B3 0.5
-
C4 2 A4 2 C5 2
A3 1 F4 1 A4 1
C4 1 A4 1 C5 1
-
A4 4 C5 4 F5 4
-
F4 2 A4 2 F5 2
F4 2 A4 2 C5 2
-
G4 1 B4 1 E5 1
G4 1 B4 1 D5 1
F4 1 A4 1 C5 1
G4 1 B4 1 D5 1
-
E4 3 G4 3 C5 3
C4 1 E4 1 G4 1
-
E4 2 G4 2 C5 2
E4 2 G4 2 C5 2
-
D4 2 F4 2 D5 2
D4 2 F4 2 A4 2
-
D4 1 F4 1 C5 1
B4 1
D4 1 F4 1 A4 1
B4 1
-
C4 2 A4 2 C5 2
C4 1 E4 1
A3 1
-
C4 2 E4 2 A4 2
C4 2 E4 2
-
C4 2 F4 2 A4 2
G4 1.5 B4 1.5
A3 0.5
-
G3 2 G4 2
G3 1.5 C4 1.5
C4 0.5
-
C4 2 F4 2 C5 2
C4 1.5 F4 1.5 B4 1.5
A4 0.5
-
B3 2 G4 2
z 2
-
z 4
EOS

Soxで音階を奏でよう

ImageMagickを使うとコマンド入力だけでいろいろ面白い絵が描けたように、soxという音声を取り扱うためのソフトをインストールするとシェルをいじるだけでいろんな音楽表現を試すことができます。

playコマンド

soxをインストールすると使えるようになるplayコマンドはその名の通り音声ファイルをコマンドラインで再生することのできるコマンドなのですが、引数をいろいろに設定してやるとこのコマンドを簡単なシンセサイザの代わりに使うことができます。

例えば

たとえば、

play -n synth 1 pluck C4

と実行すると、ドの音階が一秒間ギターの音で再生されます。synthの後の数字は音の長さを表しています。 ドレミファソラシはCDEFGABに対応していて、基準のドをC4とすると一つ高いドはC5、一つ低いドはC3と表されるので、たとえば、

play -n synth 1 pluck G3
play -n synth 1 pluck B3
play -n synth 1 pluck D4
play -n synth 1 pluck F4
play -n synth 1 pluck G4
play -n synth 1 pluck B4
play -n synth 1 pluck D5
play -n synth 1 pluck F5
play -n synth 1 pluck G5
play -n synth 1 pluck B5

などとやるとG7のアルペジオを聴くことができます。 ただ、これを何回も書くのは面倒なので、音の長さと音階を別に書いておいて、それをシェルスクリプトでplayコマンドに当てはめること考えます。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment