Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Technopop shell-gei(テクノポップシェル芸)

amanoese
August 17, 2020

Technopop shell-gei(テクノポップシェル芸)

第48回 シェル芸LT (Technopop shell-gei)
2020/08/17に発表してたのですが公開忘れてました…

LT動画はこちらhttps://youtu.be/M9kJj1yXRaw

amanoese

August 17, 2020
Tweet

More Decks by amanoese

Other Decks in Technology

Transcript

  1. Technopop shell-gei

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  11. 楽器を作る

    View full-size slide

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

    View full-size slide

  13. 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 -

    View full-size slide

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

    View full-size slide

  15. つまりコレで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 -

    View full-size slide

  16. 楽器にするためにパイプでつなげる
    入力をうまい具合にキャッチして処理する
    $ (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

    View full-size slide

  17. 楽器にするためにパイプでつなげる
    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#

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  23. 参考文献とか
    「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/

    View full-size slide

  24. 余談: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
    詳しくは下記リンクを参照してください

    View full-size slide

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

    View full-size slide