Page:  1   2  ALL
July 20, 2007

ActionScript3での音生成

Written by Satoshi HORII | Flash , Synthesis

AS3では、ByteArrayクラスの実装によって、swfで音生成が可能なのではと仮説が出てきました。
http://blog.davr.org/2006/04/21/dynamic-sound-in-85
ここでの手法は、サウンドがアッタチされたswfをメモリ上に生成して音を生成してます。

それを元に、
http://blog.andre-michelle.com/2006/as3-audiocyclebuffer/
が出来て、TR-909が出来た。
LIVE@POPFORGE

これを作った、Andre Michelleが、popforgeという音響合成のライブラリをリリースしました。
http://code.google.com/p/popforge/

今のところ、Flex環境のみです。

SVNレポジトリから展開すると、クラスファイルと、サンプルファイルなどがあります。
そのサンプルファイルの内の"CreateASound"では、1秒のサイン波の音を生成します。
ソースの中の以下の部分で、音の波形を1サンプルごとに書き込んでるようなイメージでしょうか。
cm_wav.gif



//-- CREATE ONE SECOND OF AUDIO (SINUS WAVE)
for( var i: int = 0 ; i < 44100 ; i++ )
{
//-- create an amplitude [-1,1]
amplitude = Math.sin( phase * Math.PI * 2 );
//-- create a sample
sample = new Sample( amplitude, amplitude );
//-- push in array
samples.push( sample );
//-- increase phase
phase += freq / Audio.RATE44100;
}


この場合、変数amplitudeの扱い様で、シンプルな合成ができたりしそうだったので、
Maxパッチで書くと、以下のようになるように、してみたのが、こちら(画面をクリックしてください)。(FlashPlayer9以上が必要です)
cm_max.gif
クリック位置に応じた周波数の異なる音を生成します。
マウスリスナーと、3行ほど追加しただけです。

他のサンプル、"PlayWavfile"では、サウンドファイル再生でピッチコントロールをデモしてます。
サウンドファイルを変えただけで、そのままビルドしたものは、こちら
Directorでは標準でピッチコントロールが出来てたので、いろいろ遊んでたのを思い出します。

続きがあります "ActionScript3での音生成"
February 14, 2007

何でもない音、万歳!

Written by yosuke hayashi | Synthesis

またもや久しぶりのエントリになってしまいましたが、こないだjavaでやってたようなことを今度はpythonでやってみました。OSXの人はterminalでpythonと打ち込んであげればさくっと起動するあれです。interactive modeでpysndobjを駆使すればchucksc3でお馴染みのon the fly programmingなんかもできますね。それはまた別の機会に譲るとして、とりあえず普通にpythonです。

ソースコードはこちら。
Download file
作ったのはテキストファイルをwavファイルに変換するもので、コードを実行するには、terminalでこのファイルと同じ階層に移動して、
python tex_ts.py
と打ち込むだけ。すると入力待ちになるので、読み込みたいファイルの名前を入れてreturn。
再び入力待ちになるので今度は書き出すサウンドファイルの名前を入れてください。

読み込むファイルの行数とサンプリングレートの関係でエラーが出るようですが解決法は調査中です。誰か知ってたら教えてください。あと結構環境によって動かないことがよくあるのでそういうのも報告していただければと思います。

とりあえず変換前の数値ファイル
Download file
サンプリングレート44100で変換したwavファイル
Download file

変換前の文字ファイル
Download file
サンプリングレート100で変換したwavファイル
Download file

てな感じです。第三項音楽とかもこういうことやってますね。もっと音いいし精度高いけど。
ソースコードのSAMPFREQという変数(pythonではデータ型の宣言が不要です)を変えてみたり、色んなファイルを読み込ませたりしてみて下さい。

pythonの開発環境としてはIDLEなどを使ってみるのもいいと思います。

ここからどうやって聴いた感じ単なるよくあるノイズじゃないものを作るか、というのは難しい問題ですが、是非とも取り組んでいきたいところであります。
次回はpysndobjを使ってリアルタイムにコーディングしながら音を出すことについてでも触れたいと思います。

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が目指すところも、そこだと思います!

January 31, 2006

キック!

Written by yosuke hayashi | Max/MSP+Jitter , Synthesis

mixiにコミュニティもできたところで、僕の第二回です。
第二回目、ということで何をしましょうか。
とりあえずキックでも作りますか。
DSPとなるとやっぱFFTとかグラニュラとか
難しいやつにいきがちなので、意外とこういうものを
作るテクニックが見つからなかったりします。
とりあえずSuperCollider3で作ります。

(
SynthDef("kick", {
var src, env;
src = SinOsc.ar(XLine.kr(200, 80, 0.1));
env = EnvGen.ar(Env.new([0,1,0],[0.005,0.1],'linear'),doneAction:2);
Out.ar(0,(Pan2.ar(src*env, 0)));
}).send(s);
)

a = Synth("kick")

僕の場合、基本的には
音源波形を作り出すオシレータ
振幅を制御するエンヴェロープ
必要ならフィルタ
という三つの要素で考えています。

このソースで何をしているかというと、
サイン波の周波数を200Hzから80Hzに100ミリ秒で変化させ、
振幅を0から1まで5ミリ秒、1から0まで100ミリ秒で変化させています。

Max/MSPだとこうなります。tecm.jpg

で、ここからが本題と言うか何と言うか、このパッチのままでも、周波数の値を変えるとか、振幅の時間変化の割合を変えるとか、色々できることがあります。
他にもSinOsc.arをSaw.ar(ノコギリ波)に変えてみる(全然キックじゃなくなりますが)とか、フィルタをかけてみるとか、どんどん拡張していってもいいでしょう。
要はオシレータ、エンヴェロープ、フィルタという構造をおさえることで、それさえできればSuperColliderやMax/MSPに限らずシンセシス全般に幅広く適用できるので、
ますます世界が広がりますね!

December 15, 2005

音響合成について

Written by yosuke hayashi | Synthesis

初めまして。林洋介と申します。
意外とここから僕のサイトにアクセスしてこられる方が多いので
何もしない訳にはいきません。

今回、音響合成について普段考えていることを書こうと思います。
とは言っても物理モデル合成の方法などを技術的に解説する、とかではなくて
(そもそも僕にそのような知識はありません)、単に自分の好きな音を作って
それで作曲したい場合にどういう技術や思想が絡んでくるのか、というようなことです。

僕は普段、max/MSPやSuperCollider3といったソフトで音楽を作っています。
これらは特にリアルタイムのパフォーマンスに向いた音響合成言語ということで、
その筋ではとてもメジャーなソフトです。

音響合成。読んで字の如く音の響きを合成する訳ですが、
本当に様々なテクニックがあり、全く勉強が追いつきません。
また、かっこいい音、いい音というのは個人差があるので、
必ずしも理論通りにやればうまくいくというものでもありません。
色を混ぜて色を作るにはルールがありますが、失敗から思わぬ
結果を得たり、独自の配合ルールを作ったりできるのと同じです。
音色(おんしょく)という言葉もあるくらいなので大体想像はつくと
思います。

パラメータを変えれば部分的な変更も可能ですし、骨組みを使い回して
まったく別の印象をもった音を作ることもできます。コンピュータを
利用することでたくさんのパターンを試すことができるのは本当に便利ですね。

音楽というのも考えてみれば複雑な仕組みのもので、例えば机をポンと
一回鳴らしただけでは「音」として認識されるのですが、連続して叩き
続けたり、あるいはその音を録音して5分くらいの長さに引き延ばしたり
すれば「曲」のように思ってしまったりするでしょう。
この辺りの分類はmicrosoundという本に書かれていたりして興味深い
ところです。

max/MSPやSuperCollider3では、どんな音を鳴らすかという定義と、
それをどう時間軸上に並べるかという定義で、作曲を行います。
あるいは時間的な変化でなくキーボードやマウスの入力やセンサーなどを
用いたインタラクティブな要素を取り入れることも多いでしょう。

CDなどのメディアに音声データとして記録されたものを「解凍」するの
ではなく、毎回プログラムの定義に従って音が出る、というこの形式こそが
本当の意味での「再生」だと思いませんか?

次回は実例を用いて説明できればと思います。
よろしくお願い致します。

Page:  1   2  ALL