Slide 1

Slide 1 text

Technopop shell-gei

Slide 2

Slide 2 text

自己紹介 JavaScriptとシェル芸が好き RustとElmに憧れてる taka@SIではたらくフレンズ @amanoese

Slide 3

Slide 3 text

最近のシェル芸は芸術作品が多い?

Slide 4

Slide 4 text

シェル芸術? 特に調べて無いけど昔から近年の流れについての私見 ・アスキーアート ・画像を複数枚合わせた動画 ・バイナリデータであるはずの画像を扱うシェル芸が日常化    (さらにはデータ埋め込みも) ・gnuplotを利用した3Dモデリング ・X11を利用したGUIツールの操作動画など ……著しい進化…ターミナルなインターフェイスにとらわれない作品の数々

Slide 5

Slide 5 text

音楽との組み合わせはまだ無い?

Slide 6

Slide 6 text

シェル芸 x 音楽 この分野はまだ開拓されて無さそう シェル芸でPCを楽器にしてみたい Alexa関連の勉強会で、面白いコマンドを紹介されたので使いたい

Slide 7

Slide 7 text

シェル芸 x 音楽 (新規性について) サーベイ ※google検索

Slide 8

Slide 8 text

シェル芸 x 音楽 (新規性について) bashのブレース展開でシンプルな楽譜を作ってる人はいるぽい https://twitter.com/a_yamazawa/status/566462096779399169?s=20

Slide 9

Slide 9 text

シェル芸 x 音楽 (新規性について) https://muuseo.com/mugen/diaries/7

Slide 10

Slide 10 text

シェル芸 x 音楽 まだシェル芸で演奏した人はいないぽいので大丈夫そう

Slide 11

Slide 11 text

楽器を作る

Slide 12

Slide 12 text

SoXコマンドの紹介 http://sox.sourceforge.net/ オーディオファイルを変換したりするコマンド 本来の使い方は、オーディオファイルの加工や編集がメインだと思う…

Slide 13

Slide 13 text

SoXコマンドの使い方 440Hz(ラの音/A4)を1秒間鳴らす。wavを利用。 $ sox -n -t wav 440Hz.wav synth 1 sine 440 $ play 440Hz.wav 標準出力できる $ sox -n -t wav - synth 1 sine 440 | play - 「ドイツ民謡:Froschgesang(フロシュ・ゲサング)」の冒頭 $ echo {261,293,329,349}|xargs -n1|pee cat 'tac|sed 1d'|xargs -L1 sox -n -t wav - synth 0.3 sine |play -

Slide 14

Slide 14 text

音階と周波数について https://www.aihara.co.jp/~taiji/browser-security/js/equal_temperament.html

Slide 15

Slide 15 text

つまりコレでOKぽい? AからG#までの音 $ echo '440*e(l(2)*('{0..11}'/12))'|xargs -n1|bc -l 一覧で表示 $ diff -y <(echo {A,B,C,D,E,F,G}{,#}|xargs -n1|sed -r '/(E#|B#)/d') <(echo '440*e(l(2)*('{0..11}'/12))'|xargs -n1|bc -l) ドレミファソラシド ♪(pee cat tac) $ diff -y <(echo {C,D,E,F,G,A,B,C}{,#}|xargs -n1|sed -r '/(E#|B#)/d') <(echo '523.251*e(l(2)*('{0..12}'/12))'|xargs -n1|bc -l)|grep -v \#|awk '$0=$NF'|pee cat tac|xargs -L1 sox -n -t wav - synth 0.3 sine |play -

Slide 16

Slide 16 text

楽器にするためにパイプでつなげる 入力をうまい具合にキャッチして処理する $ (f(){ read -s -n1 -t0.1 a;xxd -ps -l1 <<<"$a";f; };f)|sed -u '/0a/d'|A=$(diff -y <(echo {q,w,e,r,t,y,u,i,o,p,@,[,a,s,d,f,g,h,j,k,l,\;,:,\]}|xargs -n1|xargs -I@ bash -c 'xxd -ps -l1 <<<"@"') <(echo '220*e(l(2)*('{0..23}'/12))'|xargs -n1|bc -l)) xargs -L1 -I@ bash -c 'sed -n '/^@/p' <(echo "$A")'|gawk '$0=$NF{print;fflush()}'|xargs -L1 -i sox -n -t wav - synth 0.20 sine {} fade t 0 0.2 0.1|play - 入力処理の参考: 闇シェル芸「さあ、闇のゲーム(シェルゲイム)の始まりだぜ!」 https://qiita.com/amanoese/items/d9bd19879acbbd8ebf85

Slide 17

Slide 17 text

楽器にするためにパイプでつなげる http://heart.winofsql.jp/article/206923140.html A B C C# A# D E F# G G# F D# A B C C# A# D E F# G G# F D#

Slide 18

Slide 18 text

楽器にするためにパイプでつなげる デモ演奏

Slide 19

Slide 19 text

荒削りだけどできてるぽい

Slide 20

Slide 20 text

GUIで演奏しようよ… ・qsynth ・jack-keyboard 他にも色々…わざわざシェル芸でやるメリットをまだ見いだせていない

Slide 21

Slide 21 text

ドメイン知識の乏しさ jack-keyboardのキー配列はピアノぽくて演奏しやすそう http://jack-keyboard.sourceforge.net/

Slide 22

Slide 22 text

まとめとか ・演奏やオーディオファイルの簡単な扱いはできるようになった ・音楽などは得意でないため他のシェル芸人による発展を待つ? ・音楽の世界はMIDI標準規格?そこを意識して組み合わせると面白いかも

Slide 23

Slide 23 text

参考文献とか 「grep, awk, sed でバッファしない方法」 https://www.techscore.com/blog/2012/12/06/grep-awk-sed-%E3%81%A7% E3%83%90%E3%83%83%E3%83%95%E3%82%A1%E3%81%97%E3%81%A A%E3%81%84%E6%96%B9%E6%B3%95/ 「シェルスクリプトで変数に改行コードを含める方法」 https://orebibou.com/ja/home/201411/20141114_001/

Slide 24

Slide 24 text

余談:bcコマンド https://sites.google.com/site/afcinbash/home/tips/bc aのn乗根を計算したい場合は、下記でできるらしい a^(1/n) => e( l (a) * (1/n)) また e や l などの関数を使うには -l オプションが必要 2の立法根を求める場合は下記になる $ echo ‘e(l(2) * (1/3))’ | bc -l 詳しくは下記リンクを参照してください

Slide 25

Slide 25 text

おわり 感想とかあったらどうぞ