アカウント名:
パスワード:
手元に実行環境ないんで分かんないんだけど何がすごいの???
適当なコマンドの組み合わせで偶然音が奏でたの??それとも単に”bach.sed”に仕込んである音楽データを再生しているだけ???前者ならすごい話ですが!
何が話題に上がるのか意味わかりません!
いったいどうやってバイナリデータを出力してるんだろうとソースを見ましたが、' '(スペース、32)と、'~'(チルダ、127)の繰り返しの矩形波を生成してました。確かにこれなら、テキスト処理で生成可能ですね。これだと思いっきりオフセットが出まくりですが、まあ、普通のオーディオ出力ならDC除去用のコンデンサは入ってるだろうしまあ問題ないかな?
で、私の手元には音が聞けるLinux環境がないので、
$ echo | ./bach.sed | ffmpeg -f u8 -ar 44.1k -ac 1 -i - bach.mp3
でmp3に変換したところ、問題なく聞けました。プアなVM環境で実行したせいもありますが、生成にかかった時間は23分… こんなのオンザフライで再生したくないです…
野暮なツッコミですがチルダは126。
はい、書き込みボタン押した直後に「違う、127はDELだー」って気づきました。黙ってればバレないかと思ったんですが無理でしたか…って、それだけじゃアレなので、コード解説
譜面は「psvyBpqwACoqvAC…」という音階に対応するアルファベット列の形で、初期値として持たせています。音長データなし。そこから、
・音階文字ごとの /~ の連続回数(=周波数の逆数)のテーブルをもとに、音階データを回数データに置換(たとえば「p」は「207」に。これは9進数表記なので10進数で169。44100/169=261Hz)これにより、「psvy…」が「Z207Z 58Z 35Z 03Z…」になる。(Zは区切り文字。9進
単音のBEEP音源で思い出したのが、NECのPC-8801mkIIのデモプログラム.単音で無理やり和音ぽい音を出している.それは、2音の繰り返しなので、sedで展開するにはもってこい.ということで作ってみました.
なお、オリジナルの展開部分に少し変更(改良のつもり)を加えています.音長処理の代わりに同じ音を連続して指定すると'プッ'のノイズが入るため、オリジナルで言う11025文字で切る所を位相が繋がるように切るように変更、また極端に高い音を指定したとき不具合があった(11025文字まで増えるのが遅いため先にセパレータ'Z'を取り除かれた音が一緒に消去される)ので
#!/bin/sed -Efs/.*/GGFFhhcfddcfddhhccGGFFggffNNPVSSPVSSNNPPggffFFGGDDFGCCGaFFVVSSPNffFFGGDDFGJJhcLLYYVVTQllLLhhLLhcjhLLijflkfjkfijjLLhhLLhcjhccddccdfgdccfgMPNMgNMfggMeffMMddaaDDFCDDFFDDfcddccaahhPPMMNSPPMMPPVVTSPNPPSSVVXnVVXXVVTSPNPPSSVVXnVVXXVVGGFFXnVVXXVV/s/(.)/\1\1/gs/$/gjgjfcfcNdNdPfVfShShPaVaSGSGNGNGPePegUgUfVfVXhXhVaVanGnGpFuFrhrhnGnGZ1sCsCZ5Z3pFpFpFZ2nhnhnhnhnhnhnhZ5/s/(..)/\1\1\1\1/gs/(..)(Z1)+/\1/s/(Z2)+/RR/s/Z3/RR/gs/(..)(Z5)+/\1\1/gs/$/;A485H460B436C4#4I383D363J344E327F3##K284G270L255a242h230b2#8c207i#86d#76j#67e#58f#50k#42g#35l#27M#2#N##5O#08P#03Q088S083T078U074V070W066X062Y058m055n052o050p046q044r042s038t036u035v033w03#x030y027z026R00384473463352342232#2##/:as/([a-zA-Y])(.*\1(...))/Z\3\2/tas/(Z.)(.)(.)/\1!!!!\2!!\3Z/g:bs/([2-8])(.*\1(..))/\3\2/tb:cs/(#+)!/\1\1\1/gtcs/[^#Z]//gs/(#*)#(#?\1)/\1~\2/g:ds/~#/~~/gtd:es/Z([#~]{1438}~*)\W*Z/\1Y/gs/Z(\W+)Z/Z\1\1\1\1Z/gtes/#*Y//g:fs/#~~#/####/gtf
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
コンピュータは旧約聖書の神に似ている、規則は多く、慈悲は無い -- Joseph Campbell
どういうこと? (スコア:0)
手元に実行環境ないんで分かんないんだけど
何がすごいの???
適当なコマンドの組み合わせで偶然音が奏でたの??
それとも単に”bach.sed”に仕込んである音楽データを再生しているだけ???
前者ならすごい話ですが!
何が話題に上がるのか意味わかりません!
Re: (スコア:1)
// しばらく眺めて理解できたが、やっぱりアレゲとしかいいようがない
Re: (スコア:2)
いったいどうやってバイナリデータを出力してるんだろうとソースを見ましたが、
' '(スペース、32)と、'~'(チルダ、127)の繰り返しの矩形波を生成してました。
確かにこれなら、テキスト処理で生成可能ですね。
これだと思いっきりオフセットが出まくりですが、まあ、普通のオーディオ出力ならDC除去用のコンデンサは入ってるだろうしまあ問題ないかな?
で、私の手元には音が聞けるLinux環境がないので、
でmp3に変換したところ、問題なく聞けました。プアなVM環境で実行したせいもありますが、生成にかかった時間は23分… こんなのオンザフライで再生したくないです…
Re: (スコア:0)
野暮なツッコミですがチルダは126。
Re: (スコア:4, 参考になる)
はい、書き込みボタン押した直後に「違う、127はDELだー」って気づきました。
黙ってればバレないかと思ったんですが無理でしたか…
って、それだけじゃアレなので、コード解説
譜面は「psvyBpqwACoqvAC…」という音階に対応するアルファベット列の形で、初期値として持たせています。音長データなし。
そこから、
・音階文字ごとの /~ の連続回数(=周波数の逆数)のテーブルをもとに、音階データを回数データに置換(たとえば「p」は「207」に。これは9進数表記なので10進数で169。44100/169=261Hz)
これにより、「psvy…」が「Z207Z 58Z 35Z 03Z…」になる。(Zは区切り文字。9進
Re:どういうこと?…遊んでみました. (スコア:0)
単音のBEEP音源で思い出したのが、NECのPC-8801mkIIのデモプログラム.単音で無理やり和音ぽい音を出している.それは、2音の繰り返しなので、sedで展開するにはもってこい.ということで作ってみました.
なお、オリジナルの展開部分に少し変更(改良のつもり)を加えています.音長処理の代わりに同じ音を連続して指定すると'プッ'のノイズが入るため、オリジナルで言う11025文字で切る所を位相が繋がるように切るように変更、また極端に高い音を指定したとき不具合があった(11025文字まで増えるのが遅いため先にセパレータ'Z'を取り除かれた音が一緒に消去される)ので
Re:どういうこと?…遊んでみました.スペースが化けるため'#'に変えて貼り付けなおしです. (スコア:0)
#!/bin/sed -Ef
s/.*/GGFFhhcfddcfddhhccGGFFggffNNPVSSPVSSNNPPggffFFGGDDFGCCGaFFVVSSPNffFFGGDDFGJJhcLLYYVVTQllLLhhLLhcjhLLijflkfjkfijjLLhhLLhcjhccddccdfgdccfgMPNMgNMfggMeffMMddaaDDFCDDFFDDfcddccaahhPPMMNSPPMMPPVVTSPNPPSSVVXnVVXXVVTSPNPPSSVVXnVVXXVVGGFFXnVVXXVV/
s/(.)/\1\1/g
s/$/gjgjfcfcNdNdPfVfShShPaVaSGSGNGNGPePegUgUfVfVXhXhVaVanGnGpFuFrhrhnGnGZ1sCsCZ5Z3pFpFpFZ2nhnhnhnhnhnhnhZ5/
s/(..)/\1\1\1\1/g
s/(..)(Z1)+/\1/
s/(Z2)+/RR/
s/Z3/RR/g
s/(..)(Z5)+/\1\1/g
s/$/;A485H460B436C4#4I383D363J344E327F3##K284G270L255a242h230b2#8c207i#86d#76j#67e#58f#50k#42g#35l#27M#2#N##5O#08P#03Q088S083T078U074V070W066X062Y058m055n052o050p046q044r042s038t036u035v033w03#x030y027z026R00384473463352342232#2##/
:a
s/([a-zA-Y])(.*\1(...))/Z\3\2/
ta
s/(Z.)(.)(.)/\1!!!!\2!!\3Z/g
:b
s/([2-8])(.*\1(..))/\3\2/
tb
:c
s/(#+)!/\1\1\1/g
tc
s/[^#Z]//g
s/(#*)#(#?\1)/\1~\2/g
:d
s/~#/~~/g
td
:e
s/Z([#~]{1438}~*)\W*Z/\1Y/g
s/Z(\W+)Z/Z\1\1\1\1Z/g
te
s/#*Y//g
:f
s/#~~#/####/g
tf