popforgeってご存知でしょうか?
この間買った本に紹介されていたライブラリです。
※脱線しますが、この本の後半のサンプルはすごかったです。
それで、このライブラリが何かというと、Flashで音楽をいじり倒せるものなんです。って、私はまだ何もできませんが。
→popforgeのサイト
ASdocがついてなかったんで、慣れないながらもつくってみました。そんでアップしました。
あとダウンロードもできるようにしました。
見本で、とりあえず「チューリップ」を作ってみました。
※参考です。ありがとうございます。
POPFORGEでドレミをならすテスト
平均律、自然倍音、ピタゴラス音階の比較
以下ソースコードです。(要popforge)
package { import de.popforge.audio.output.Audio; import de.popforge.audio.output.Sample; import de.popforge.audio.output.SoundFactory; import de.popforge.audio.processor.fl909.voices.Voice; import flash.display.Sprite; import flash.events.MouseEvent; import flash.events.TimerEvent; import flash.media.Sound; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.text.TextFormat; import flash.text.TextFormatAlign; import flash.utils.Timer; [SWF(width="200", height="50", frameRate="30", backgroundColor="#ffffff")] public class CreateASound extends Sprite { private var music:Array; private var tf:TextField; public function CreateASound() { setStartBtn(); } private function init(): void { music = new Array(); //set music setMusic("C", .5); setMusic("D", .5); setMusic("E", .5); setMusic("N", .5); setMusic("C", .5); setMusic("D", .5); setMusic("E", .5); setMusic("N", .5); setMusic("G", .5); setMusic("E", .5); setMusic("D", .5); setMusic("C", .5); setMusic("D", .5); setMusic("E", .5); setMusic("D", .5); setMusic("N", .5); setMusic("C", .5); setMusic("D", .5); setMusic("E", .5); setMusic("N", .5); setMusic("C", .5); setMusic("D", .5); setMusic("E", .5); setMusic("N", .5); setMusic("G", .5); setMusic("E", .5); setMusic("D", .5); setMusic("C", .5); setMusic("D", .5); setMusic("E", .5); setMusic("C", .5); setMusic("N", .5); setMusic("G", .5); setMusic("G", .5); setMusic("E", .5); setMusic("G", .5); setMusic("A", .49); setMusic("N", .01); setMusic("A", .5); setMusic("G", .5); setMusic("N", .5); setMusic("E", .5); setMusic("E", .5); setMusic("D", .5); setMusic("D", .5); setMusic("C", 1); SoundFactory.fromArray( music, Audio.STEREO, Audio.BIT16, Audio.RATE44100, onSoundGenerated ); } private function setStartBtn():void { var sp:Sprite = new Sprite(); sp.graphics.beginFill(0x00ff00, 1); sp.graphics.drawRect(0,0,200,50); sp.graphics.endFill(); var tff:TextFormat = new TextFormat(); tff.align = TextFormatAlign.CENTER; tff.size = 14; tf = new TextField(); tf.autoSize = TextFieldAutoSize.LEFT; tf.selectable = false; tf.text = "スタート"; tf.setTextFormat(tff); sp.addChild(tf); tf.x = 20; tf.y = 15; addChild(sp); sp.x = 0; sp.y = 0; sp.addEventListener(MouseEvent.MOUSE_DOWN, onDown); } private function onDown(e:MouseEvent):void { e.target.removeEventListener(e.type, arguments.callee); tf.text = "しばらくお待ちください"; var tm:Timer = new Timer(100, 1); tm.addEventListener(TimerEvent.TIMER_COMPLETE, function(e:TimerEvent):void{ e.target.removeEventListener(e.type, arguments.callee); init(); }); tm.start(); } private function setMusic(musicalScale:String, time:Number = 1):void { var i:int; var freq:Number; var phase: Number = 0; var amplitude: Number; var sample: Sample; var setTime:int = Math.floor(time * 44100); switch(musicalScale) { case "C": freq = 220; break; case "C#": freq = 233.082; break; case "D": freq = 246.942; break; case "D#": freq = 261.626; break; case "E": freq = 277.183; break; case "F": freq = 293.665; break; case "F#": freq = 311.127; break; case "G": freq = 329.628; break; case "G#": freq = 349.228; break; case "A": freq = 369.994; break; case "A#": freq = 391.995; break; case "B": freq = 415.305; break; case "C+": freq = 440.000; break; case "N": freq = 0; break; } for( i = 0 ; i < setTime ; i++ ) { //-- create an amplitude [-1,1] amplitude = Math.sin( phase * Math.PI * 2 ); //-- create a sample sample = new Sample( amplitude, amplitude ); //-- push in array music.push( sample ); //-- increase phase phase += freq / Audio.RATE44100; } } private function onSoundGenerated( sound: Sound ): void { //-- play the shit sound.play(); tf.text = "再生中"; } } }
■ 自作iPhoneアプリ 好評発売中!
・フォルメモ - シンプルなフォルダつきメモ帳
・ジッピー電卓 - 消費税や割引もサクサク計算!
■ LINEスタンプ作りました!
毎日使える。とぼけたウサギ