SWFSound (Draft)

| | Save This Page to del.icio.us このエントリーを含むはてなブックマーク

Adobe MAX Japan 2009 への参加を通じて、
たくさんの発見とインスピレーションを得ることが出来たので、
もう少しコミュニティに貢献していきたいなと思いまして、
新しくサウンド系のライブラリを作ろうと思います。

Spark project の音系ライブラリと言えば sazameki がありますが、
充実した機能を持っている反面、音を鳴らすまでに必要な手続きが少し長いので、
プログラムに不慣れな人にとっては少し敷居が高いように思えました。

そこで、もっと手軽に音を鳴らすことが出来るライブラリを作ろうと思いました。

手軽に使えるという部分を意識するようになったのは、
Spark project の TeraFire から大きなインスピレーションを得たからです。

TeraFire は、new して addChild することで炎を作ることが出来ますが、
SWFSound は、new して play するだけで音が鳴らすことが出来ます。

var instrument:Instrument = new Instrument();
instrument.play();

音程や音量や音の長さも気軽に変えることが出来ます。

// 音程を変える
instrument.noteNumber = 60; // 0 〜 127 の MIDI ナンバーでで音程を決める
instrument.frequency = 440; // 周波数で音程を決める

// 音量を変える
instrument.volume = 0.8; // 0  〜 1.0 の範囲の値

// 音の長さを変える
instrument.lentgth = 3.0; // 単位は秒

音色は IPreset を実装したクラスのインスタンスを与えることで変えられます。
豊富なプリセットを用意する予定です。

// ピコピコな音にします
var preset:IPreset = new PicoPico();
instrument.preset = preset;

プリセットを微調整することも出来ますし、全く新しく作ることも出来ます。

// オシレータをサイン波にする
preset.oscillator1 = new Sinewave();

// ADSR エンベロープを調整する (0 〜 1.0 の範囲の値)
preset.attack = 0.8;
preset.decay = 1.0;
preset.sustain = 0.4;
preset.release = 0.6;

// 新しくプリセットを作る
var customPreset:IPreset = new Preset();
customPreset. oscillator1 = new SquareWave();
customPreset. oscillator2 = new Noise();
customPreset.attack = 0;
customPreset.decay = 1.0;
customPreset.sustain = 0;
customPreset.release = 0;

また、楽器をいくつか組み合わせたキットを作ることも出来ます。
デフォルトでも、DrumKit や WebSiteKit などを搭載する予定です。

// ドラムキット
var drums:IKit = new DrumKit();
drums.play(0); // キック
drums.play(1); // スネア
drums.cymbal.play(); // シンバル
drums.closeHighHat.play(); // クローズハイハット

// ウェブサイト用の音を集めたキット
var website:IKit = new WebSiteKit();
website.click.play(); // クリック
website.rollover.play(); // ロールオーバー
website.rollout.play(); // ロールアウト

もちろん、新しくキットを作ることも出来ます。

// 汎用的なキット
var kit:IKit = new Kit();
kit.addInstrument(instrument1);
kit.addInstrument(instrument2);
kit.play(0);

エフェクトも使えます。

// エフェクトを作る
var effect:IEffect = new Delay();

// 楽器に適用
instrument.addEffect(effect);

// プリセットに適用
preset.addEffect(effect);

// キットに適用
kit.addEffect(effect);

楽器、プリセット、キットという単位で好きなようにカスタマイズ出来るので、
ユーザーにたくさんの音色を作ってもらって、どんどん公開してもらうのが狙いです。

さらにおまけとして、Ambient Music Generator の開発を通じて得たノウハウを元に、
スケールを定義するクラスを同梱しようと思います。

// スケールを作る
var scale:IScale = new MajorScale();
scale.rootkey = 5; キーを E に変更

// 音程の範囲を制限する
scale.min = 40; // 最小値
scale.max = 80; // 最大値

// 作ったスケールを使ってランダムに鳴らす
var noteNumber:int = scale.notes[Math.random() * scale.numNotes];
instrument.noteNumber = noteNumber;
instrument.play();

これらを Timer とかで適当に回したりすると、自動作曲っぽいことが出来ます。

というようなライブラリを絶賛開発中です。
公開予定は今春として濁しておきたいと思います...。

要望などございましたらどしどしお寄せ下さい!

yoshizu [ at ] s2factory.co.jp
twitter.com/seagirl

TRACKBACK

このブログ記事を参照しているブログ一覧: SWFSound (Draft)

このブログ記事に対するトラックバックURL: http://blog.s2factory.co.jp/MT/mt-tb.cgi/78