2008.06.24
category
comments

Tweenerで音量をトゥイーンさせる

自分用のメモ。サウンドの音量をトゥイーンさせるには、SoundShortcutsクラスをインポートしてinit()で初期化してから使う。Tweenerの対象オブジェクトはSoundChannel型の変数にする。音量を変化させたいときは_sound_volumeプロパティ、音量をパンさせたい時は_sound_panプロパティをそれぞれ弄くる。

import caurina.transitions.Tweener;
import caurina.transitions.properties.SoundShortcuts;

SoundShortcuts.init();

var bgm:Sound = new soundBgm();
var channel:SoundChannel = bgm.play(0);

Tweener.addTween(channel, {_sound_volume:0, time:1, transition:"linear"});
2008.04.28
category
tag
comments

音波形に対応したサウンドボタン

※soundボタンをクリックすると音が鳴るので注意。
サウンドスペクトラムを使って、音にシンクロしたサウンドボタン用のクラスを作ってみた。最初にsetPixel()でピクセルを描画しておいて、スペクトラム波形に合わせてscaleYを変化させてます。下記がそのクラスファイル。

SoundSpectrum.as

package info.five.ui
{
	import flash.display.Sprite;
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.events.Event;
	import flash.media.SoundMixer;
	import flash.utils.ByteArray;

	public class SoundSpectrum extends Sprite
	{
		private var lineNum:uint;
		private var lineHeight:uint;
		private var lineInterval:uint;
		private var bmAry:Array = [];

		//------------------------------
		//   コンストラクタ
		//------------------------------
		public function SoundSpectrum(targetNum:uint = 5, targetHeight:uint = 20, targetInterval:uint = 1, targetColor:uint = 0x000000)
		{
			lineNum = targetNum;
			lineHeight = targetHeight;
			lineInterval = targetInterval;

			this.addEventListener(Event.ENTER_FRAME, onRender);

			//-----[ピクセルの描画]
			var bmd:BitmapData;
			var bm:Bitmap;

			for (var i = 0; i < lineNum; i++)
			{
				bmd = new BitmapData(1, 100);
				bm = new Bitmap(bmd);
				this.addChild(bm);
				bm.x = i * (lineInterval + 1);

				bmd.setPixel(0, 0, targetColor);
				bmAry.push(bm);
			}
			bmd.dispose();
		}

		//------------------------------
		//   レンダー
		//------------------------------
		private function onRender(e:Event):void
		{
			var count:uint = 256 / lineNum;
			var value:Number;
			var ba:ByteArray = new ByteArray();

			SoundMixer.computeSpectrum(ba, false, 0);

			for (var i:uint = 0; i < 256; i++)
			{
				value = -ba.readFloat() * lineHeight - 1;

				for (var j:uint = 0; j < lineNum; j++)
				{
					if (i == Math.floor(count * j)) bmAry[j].scaleY = value;
				}
			}
		}
	}
}

続いてドキュメントクラスには以下のように記述します。引数はSoundSpectrum(ラインを何本にするか, ラインの最大高さ, ラインの間隔, ラインの色)となります。インスタンス化した後にx,yプロパティを与えてaddChild()でステージに配置。デフォルトで数値を持たしているので、カスタマイズしたくない場合は引数なしでも大丈夫です。

Main.as

var sp:SoundSpectrum = new SoundSpectrum(8, 30, 1, 0x000000);
soundBtn.addChild(sp);
sp.x = 32;
sp.y = 10;
page 1 / 11