DynamicSoundをTweenerで変化
今度はAstroにチャルメラを謳わせてみた。
(要Flash10beta)
作曲方法はTweenerで音階を変化させていくちょっとヘンテコな手法です。
こんな感じ↓↓↓
実際にシーケンスを組んだり楽曲を組んだりするのはMIDI言語とかを使うのが一番イイと思う。 FlMMLの人とかが作ってくれるんじゃ無いかと激しく期待しています。
Tweenerを使ったやり方は、とりあえずパラメーターを直接いじくって音が変化するのを楽しむことが出来るので、自分のようなサウンドプログラミングとか信号処理をしたことがない人間にとってはやりやすいです。
音の実態をわしづかみにするような、プリミティブな体験と言えばいいすぎだろうか。
ともかくそんなわけで、サンプル周波数をプロパティとして保持するSoundクラスの拡張を作りました。その名も「OTO(音)クラス」
ゆくゆくはOTOライブラリとしてPopforgeに並ぶサウンドライブラリとして確固たる地位を築き、FLARION(cf:tenorion)を開発する所存です。
まあワタシの生産性だと一生、いや二生かけても無理かもしれないけど。
ソースはこちら
OTO.as

(要Flash10beta)
作曲方法はTweenerで音階を変化させていくちょっとヘンテコな手法です。
こんな感じ↓↓↓
Tweener.addTween(oto,
{frequency:OTO.RE, time:0, delay:.5,transition:"linear"});
Tweener.addTween(oto,
{frequency:OTO.MI, time:0, delay:1,transition:"linear"});
Tweener.addTween(oto,
{frequency:OTO.RE, time:0, delay:2,transition:"linear"});
Tweener.addTween(oto,
{frequency:OTO.DO, time:0, delay:2.5, transition:"linear"});
Tweener.addTween(oto,
{frequency:OTO.MUTE, time:0, delay:3,transition:"linear"});
Tweener.addTween(oto,
{frequency:OTO.DO, time:0, delay:3.5, transition:"linear"});
Tweener.addTween(oto,
{frequency:OTO.RE, time:0, delay:4,transition:"linear"});
Tweener.addTween(oto,
{frequency:OTO.MI, time:0, delay:4.5,transition:"linear"});
Tweener.addTween(oto,
{frequency:OTO.RE, time:0, delay:5,transition:"linear"});
Tweener.addTween(oto,
{frequency:OTO.DO, time:0, delay:5.5, transition:"linear"});
Tweener.addTween(oto,
{frequency:OTO.RE, time:0, delay:6,transition:"linear"});
Tweener.addTween(oto,
{frequency:OTO.MI, time:0, delay:7.5,transition:"linear"});
Tweener.addTween(oto,
{frequency:OTO.RE, time:0, delay:7.7,transition:"linear"});
Tweener.addTween(oto,
{frequency:OTO.DO, time:0, delay:7.9, transition:"linear"});
Tweener.addTween(oto,
{frequency:OTO.MUTE, time:0, delay:8.3, transition:"linear"});
実際にシーケンスを組んだり楽曲を組んだりするのはMIDI言語とかを使うのが一番イイと思う。 FlMMLの人とかが作ってくれるんじゃ無いかと激しく期待しています。
Tweenerを使ったやり方は、とりあえずパラメーターを直接いじくって音が変化するのを楽しむことが出来るので、自分のようなサウンドプログラミングとか信号処理をしたことがない人間にとってはやりやすいです。
音の実態をわしづかみにするような、プリミティブな体験と言えばいいすぎだろうか。
ともかくそんなわけで、サンプル周波数をプロパティとして保持するSoundクラスの拡張を作りました。その名も「OTO(音)クラス」
ゆくゆくはOTOライブラリとしてPopforgeに並ぶサウンドライブラリとして確固たる地位を築き、FLARION(cf:tenorion)を開発する所存です。
まあワタシの生産性だと一生、いや二生かけても無理かもしれないけど。
ソースはこちら
OTO.as
package {
import flash.media.Sound;
import flash.events.SamplesCallbackEvent;
import flash.media.SoundChannel;
import flash.media.SoundTransform;
public class OTO extends Sound{
static public const TWELEVE_TONE_SCALE:Array =[220,
233.08,
246.94,
261.63,
277.18,
293.67,
311.13,
329.63,
349.23,
369.99,
392,
415.31,
]
static public const MUTE:Number = 0;
static public const DO:Number = TWELEVE_TONE_SCALE[0];
static public const DOs:Number = TWELEVE_TONE_SCALE[1];
static public const RE:Number = TWELEVE_TONE_SCALE[2];
static public const REs:Number = TWELEVE_TONE_SCALE[3];
static public const MI:Number = TWELEVE_TONE_SCALE[4];
static public const FA:Number = TWELEVE_TONE_SCALE[5];
static public const FAs:Number = TWELEVE_TONE_SCALE[6];
static public const SO:Number = TWELEVE_TONE_SCALE[7];
static public const SOs:Number = TWELEVE_TONE_SCALE[8];
static public const RA:Number = TWELEVE_TONE_SCALE[9];
static public const RAs:Number = TWELEVE_TONE_SCALE[10];
static public const SI:Number = TWELEVE_TONE_SCALE[11];
static public const A:Number = TWELEVE_TONE_SCALE[0];
static public const B:Number = TWELEVE_TONE_SCALE[1];
static public const H:Number = TWELEVE_TONE_SCALE[2];
static public const C:Number = TWELEVE_TONE_SCALE[3];
static public const Cs:Number = TWELEVE_TONE_SCALE[4];
static public const D:Number = TWELEVE_TONE_SCALE[5];
static public const Ds:Number = TWELEVE_TONE_SCALE[6];
static public const E:Number = TWELEVE_TONE_SCALE[7];
static public const F:Number = TWELEVE_TONE_SCALE[8];
static public const Fs:Number = TWELEVE_TONE_SCALE[9];
static public const G:Number = TWELEVE_TONE_SCALE[10];
static public const Gs:Number = TWELEVE_TONE_SCALE[11];
private const SAMPLEING_RATE:Number = 44100
private var refreshRate:uint = 4410
private var herts:Number = 220
private var _frequency:Number = 220
private var _volume:Number = .5
private var ampEnd:Number =0
public function OTO() {
init()
}
private function init():void{
this.addEventListener("samplesCallback",sineWavGenerator);
}
public function start(toneScale:Number = 220):SoundChannel{
this.frequency = toneScale
return this.play()
}
private function sineWavGenerator(event:SamplesCallbackEvent):void {
var rate:Number = SAMPLEING_RATE
var refreshRate:Number = this.refreshRate
var amp:Number
var freq:Number = (Math.PI * 2) * frequency / 44100;
var volume:Number = this.volume
for ( var c:int=1; c <= refreshRate; c++ ) {
amp = (c * freq) + ampEnd
var sample:Number = Math.sin(amp) * volume
this.samplesCallbackData.writeFloat(sample);
this.samplesCallbackData.writeFloat(sample);
}
ampEnd = amp
}
public function get frequency():Number { return _frequency; }
public function set frequency(value:Number):void {
_frequency = value;
}
public function get volume():Number { return _volume; }
public function set volume(value:Number):void {
_volume = value;
}
}
}
Comment (4)
feb19 : 2008 .06 .13
はじめまして。いつも拝見しております。
完成したら面白そうですね。応援しています。
一点、周波数が440Hzは一般的にドではなく、「ラ」=Aの音として使われています。(最近のオーケストラなどでは442Hzが一般的ですが)
こちらのサイトが参考になります。
http://flawtips.ami.amigasa.jp/blog/060315.html
kl : 2008 .06 .13
>feb19 さん
コメントありがとうございます!
>一点、周波数が440Hzは一般的にドではなく、「ラ」=Aの
>音として使われています。(最近のオーケストラなどでは
>442Hzが一般的ですが)
なるほど~勉強になります。
というかひょっとしてバッドティプスを書いちゃったかな?
ここらへんもう少しアカデミックに調べないとヤバいっすね
反省
おー : 2008 .06 .15
はじめまして。FlMMLのひとです。
tweenerでサウンドを制御っていう発想が面白いですね。
これ、いまはtime0のlinearを使ってますが、timeを増やしてeaseoutbounceとかを使えば、妙な感じのポルタメントになったりするんでしょうか?
音色変化に使ってみたりしても面白そうですね。
期待してます!
#自分でtweenerを使ったことがないので、勘違いだったらごめんなさい。
kl
: 2008 .06 .17
FIMMLさん
コメントあざっす!
easingを色々変えてみたところ、結構フツーでした。
スラーとかタイみたいな感じでビブラートに及ばない、ってとこでした。