July 02, 2006

ピュアな音を求めて

Written by yosuke hayashi | Synthesis

どうも。第三回、間があいているうちに自分の興味だったり方向性
ってのが恐ろしく変わってきております。基本的なライン、というか
ピュアなもの、従来とはちょっと違った音楽の作り方、というのは
変わらないにしても、使う技術がどんどんコアな方向に行ってます。
まぁ、そういう興味に従って色々情報集めたり技術を身につけていく
ところを見せる、というのもそれはそれでいいのかな、と思います。

で、今取り組んでるのがアプリケーションの制作で、Java周辺の技術を
調べているのですが、僕はプログラミングが苦手なので、超苦労してます。
でも一歩ずつやっていこうと思います。

最初の一歩、サイン波を鳴らす!
全く方法が思いつかないのでGoogle先生に聞きます。
「Java サイン波」とかで。とりあえずwav形式とかに書き出せるように
っていうので「Java サイン波 wav」とか。
すると、出ました!茨城大学!湊淳先生によるプログラミングのページ。
(AVRのページも興味深いですね...。)
(例題)ドの音のWAVEファイルを作る
著作権放棄ってので利用が自由ってのも素晴らしいですね。いずれいい
作品を作ってお礼がしたいです。

で、中身を見るとどうやらサイン波を作ってるのはここだってのは分かる
と思います。何か多分サンプリングレートとかバッファサイズとかその辺の
こともあるんだと思いますが、とりあえずあの523.25てのが鳴らしたい周波数
で、そこいじれば色々できそうだ、というのは予想がつきます。
for(int i=0;i < ndat; i++) {
ff.write(b-(b/256)*256);
double x=1.+0.9*Math.sin(2.0*3.1415926*i/(16000./523.25));
b=(short)(x*128.);
ff.write((short)b);
}

んで、とりあえずFM合成とかやってみようと思って作ったのが
これです。
for(int i=0;i < ndat; i++) {
ff.write(b - (b / 256) * 256);
double mod = 1. + 0.1 * Math.sin(2.0 * 3.1415926 * i / (16000. / 4));
double car=1. + 0.9 * Math.sin(2.0 * 3.1415926 * i / (16000. / 440 * mod));
b=(short)(car * 128.);
ff.write((short)b);
}

出来上がったwavファイルを聴くと...なかなかワイルドな音がします。
色々試した結果、頭に1.がないとノイズになってしまいます。これは
多分Sinがとる値の範囲が-1から1であるので、負の時にノイズが発生している
のだと思いますが...間違ってたら教えて下さい。

ここで注目したいのが、単なる数値の変化が音になってるってとこで、
じゃあ、シンプルにこうしてみたらどうでしょう?
for(int i=0;i < ndat; i++) {
ff.write(b - (b / 256) * 256);
double x= i;
b=(short)(x * 128.);
ff.write((short)b);
}

趣き深い音が...。これって一体何なのでしょう?何の音?
いずれにせよここに適当な数値を突っ込めば作曲ができるわけですよ。
ndatがおそらく音声ファイルの長さな訳で...。
かなりプリミティブなところまでやってきました。

サイン波を最小単位とした音楽は結局、西洋音楽の音階をもっと細かく
実現しただけ、という風になってしまいますが(それはそれで奥深いし、
素晴らしいものです)、何かもうちょっと違うアプローチはないものかなぁ
というのが、最近の興味でもあります。
勿論出音としてはこのままだと面白くないし、別にJavaでやんなくても...
という感じですが、コンピュータ内部のデータだったり、ネットワークと連携
させたり、とか数値を音と直結させることができるので、アイディア次第で
色々できる手がかりにはなるんじゃないかと思います。

とりあえず、2年くらいかけてじっくりやってこうと思うので、生温かく
見守っていて下さい!では。

今回使用したソースコードはこちら。

他に参考になりそうなサイト。東京工芸大メディアアート学科永江先生
による「新流儀ゲームプログラミング」内の
Javaで連続音を鳴らす

素晴らしいです。僕の最終目的もゲーム的な方向なので、まさにこれです。
やはりメディアアート的アプローチだとなかなかやりたいことを実現する
ための情報が見つからないので、こういうところがあるととても助かります。
勿論techNoteが目指すところも、そこだと思います!

関連記事






次の記事

Jul 03, 06
Written by Katsuhiko Harada | Device , Max+Others , processing
はじめまして。原田克彦と申します。 以前のエントリにもあがっていましたが、I/Oモジュール"GAINER"についてです。...

前の記事

May 09, 06
Written by noriko matsumoto | Device
ワイヤレスのI/O Boardについてです。...