パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

sedが奏でるプレリュード」記事へのコメント

  • by Anonymous Coward

    手元に実行環境ないんで分かんないんだけど
    何がすごいの???

    適当なコマンドの組み合わせで偶然音が奏でたの??
    それとも単に”bach.sed”に仕込んである音楽データを再生しているだけ???
    前者ならすごい話ですが!

    何が話題に上がるのか意味わかりません!

    • メロディラインについてはbach.sedの頭のほうにテキストで書いてあるのだが、これをsed一本でwave formに展開しちゃってるのがアレゲ。
      // しばらく眺めて理解できたが、やっぱりアレゲとしかいいようがない
      • いったいどうやってバイナリデータを出力してるんだろうとソースを見ましたが、
        ' '(スペース、32)と、'~'(チルダ、127)の繰り返しの矩形波を生成してました。
        確かにこれなら、テキスト処理で生成可能ですね。
        これだと思いっきりオフセットが出まくりですが、まあ、普通のオーディオ出力ならDC除去用のコンデンサは入ってるだろうしまあ問題ないかな?

        で、私の手元には音が聞けるLinux環境がないので、

        $ echo | ./bach.sed | ffmpeg -f u8 -ar 44.1k -ac 1 -i - bach.mp3

        でmp3に変換したところ、問題なく聞けました。プアなVM環境で実行したせいもありますが、生成にかかった時間は23分… こんなのオンザフライで再生したくないです…

        • by Anonymous Coward

          野暮なツッコミですがチルダは126。

          • Re: (スコア:4, 参考になる)

            はい、書き込みボタン押した直後に「違う、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 -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

                親コメント

※ただしPHPを除く -- あるAdmin

処理中...