W.Deeの2006年6月の日記

kikyou.info»日記
最新月 : 2008年10月
2003年 [             3    4    5    6    7    8    9   10   11   12  ] 月
2004年 [   1    2    3    4    5    6    7    8    9   10   11   12  ] 月
2005年 [   1    2    3    4    5    6    7    8    9   10   11   12  ] 月
2006年 [   1    2    3    4    5    6    7    8    9   10   11   12  ] 月
2007年 [   1    2    3    4    5    6    7    8    9   10   11   12  ] 月
2008年 [   1    2    3    4    5    6    7    8    9   10   11   12  ] 月
2009年 [   1    2    3    4    5    6    7    8    9   10   11       ] 月
前月の日記  次月の日記

2006年6月7日

スペクトログラム

The Aphex Face を見ていてカッコエエと思ったので、このようにスペクトログラム (とかソノグラム、ソノグラフなどと呼ばれている物) に画像を埋め込むソフトを作りました。

sonographer-20060607.zip (Win32バイナリ、C++Builder用ソース付き)

楽曲に隠されたメッセージを埋め込む用途が主だと思うのですが、うまく使えば効果音をまるで絵を描くようにして制作するソフトウェアに発展できるかもしれません。

たとえば写真を埋め込むとか

なんだっけこの動物

呪術的メッセージを埋め込むとか

代表的な呪術的メッセージ

このソフトは BMP 画像の横軸を時間軸として、縦軸を周波数軸、輝度を信号強度とした音声 (wavファイル)を出力するだけのコマンドラインツールです。上記のスクリーンショットは、それを他の楽曲にミックスした後のスペクトログラムであって、このソフトにこのような表示機能があるわけではありません

2006年6月4日

Risse 進捗(3)

6月か ... まずいな、時間が過ぎるのが速すぎる。

RisseはASTからSSA形式への変換をチマチマと実装中。

Risseはgotoをサポートするつもりでいます。

スクリプト言語である "Risse" が goto をサポートすべきかというと、TJS2でgotoが無くてこまったことはないのでたぶん必要ないんじゃないかと思いますが、いまのところRisseは字句解析~文法解釈(とりあえず「フロントエンド」と呼ぶ)が差し替えられるように(要するに他の文法のスクリプト言語を必要に応じて実装できるように)なっているため、場合によってはKAGのようにgotoまみれの言語をサポートする可能性があるのかなーと考えているからです。また、 goto に似た処理機構はどっちみち switch で実装せざるを得ないので、 goto を実装するのはそう手間ではありません。

ちなみにgotoがプログラミングをスパゲッティにしやすいからどうだとかの議論には、僕はあまり興味が無いです。gotoがあると時々スッキリかけることがあるよね、程度。

gotoでありがちな「変数の宣言をすっとばす」問題には、今のところRisseの場合はエラーにしようかと思います。

たとえば、

 goto hoge;
  :
 (略)
  :
 var a;
hoge:
 b = a; // ここでエラー

は、b = a で a が参照された時点で、 goto hoge から飛んできた場合に変数 a が存在しないのでエラーになります。一つでも参照できない変数があるとアウトになります。このルールを犯さない限り、浅いスコープから深いスコープに飛んだり、兄弟関係にあるスコープに飛んだりしてもOKです (ただ、tryブロック外からtryブロック内に飛ぶ、のような実装が困難なジャンプは実装するか未定)。

ちなみにTJS2だとこういう使い方をすると、変数が存在しないフローから来た場合は変数の内容は不定になります (TJS2ではgotoはありませんがswitchブロック中でcaseが変数宣言よりも後にあるとそうなる可能性があります)。