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. 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 -
  2. つまりコレで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 -
  3. 楽器にするためにパイプでつなげる 入力をうまい具合にキャッチして処理する $ (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
  4. 余談: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 詳しくは下記リンクを参照してください