Tweensy - sound

TweensyでSoundTransformのプロパティをアニメーションしてみる。SoundTransformオブジェクトを作ってそのSoundTransformオブジェクトのプロパティをTweensyでTweenするイメージ。で、updateパラメータにそのSoundTransformを適用するSoundChannelインスタンスを指定する。

mp3ファイルはFLASH KITからFreewareを選んで拝借。

TestTweensy_9.swf(音が出ます。)

  • ActionScript
  • TestTweensy_9.as
  • Source
package  {
	import com.flashdynamix.motion.Tweensy;
	import com.flashdynamix.motion.TweensyTimeline;
	import fl.motion.easing.Linear;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.media.Sound;
	import flash.media.SoundChannel;
	import flash.media.SoundTransform;
	import flash.net.URLRequest;
	import flash.text.TextField;
	import flash.text.TextFieldAutoSize;
	import flash.text.TextFormat;

	[SWF(backgroundColor = 0x000000, width = 600, height = 100, frameRate = 30)]
	public class TestTweensy_9 extends Sprite {

		private var _sound:Sound;
		private var _soundChannel:SoundChannel;
		private var _textField:TextField;

		public function TestTweensy_9() {
			initSound();
			initTextField();
			initButtons();
		}

		private function initSound():void{
			var urlRequest:URLRequest = new URLRequest('*.mp3');    // パスは省略

			_sound = new Sound();
			_sound.load(urlRequest);

			_soundChannel = _sound.play();
			_soundChannel.addEventListener(Event.SOUND_COMPLETE, onSoundComplete);
		}

		private function onSoundComplete(e:Event):void {
			_soundChannel.removeEventListener(Event.SOUND_COMPLETE, onSoundComplete);
			_soundChannel = null;

			_soundChannel = _sound.play();
			_soundChannel.addEventListener(Event.SOUND_COMPLETE, onSoundComplete);
		}

		private function initTextField():void {
			var textFormat:TextFormat = new TextFormat('_等幅', 10, 0xffffff);

			_textField = new TextField();
			_textField.defaultTextFormat = textFormat;
			_textField.autoSize = TextFieldAutoSize.LEFT;
			_textField.y = 50;

			addChild(_textField);
		}

		private function initButtons():void {
			var labels:Array = ['VolumeOn', 'VolumeOff', 'PanLeft', 'PanRight'];
			var clickHandlers:Array = [onVolumeOnClick, onVolumeOffClick, onPanLeftClick, onPanRightClick];

			var i:int, button:Button, x:Number;
			for (i = 0; i < 4; i ++) {
				x = (button == null)? 0: button.x + button.width;
				button = new Button();
				button.label = labels[i];
				button.x = x;
				button.addEventListener(MouseEvent.CLICK, clickHandlers[i]);
				addChild(button);
			}
		}

		private function onVolumeOnClick(e:MouseEvent):void {
			var timeline:TweensyTimeline = Tweensy.to(_soundChannel.soundTransform, { volume: 1 }, 3, Linear.easeNone, 0, _soundChannel);
			timeline.onUpdate = onSoundTransformUpdate;
		}

		private function onVolumeOffClick(e:MouseEvent):void {
			var timeline:TweensyTimeline = Tweensy.to(_soundChannel.soundTransform, { volume: 0 }, 3, Linear.easeNone, 0, _soundChannel);
			timeline.onUpdate = onSoundTransformUpdate;
		}

		private function onPanLeftClick(e:MouseEvent):void {
			var timeline:TweensyTimeline = Tweensy.to(_soundChannel.soundTransform, { pan: -1 }, 3, Linear.easeNone, 0, _soundChannel);
			timeline.onUpdate = onSoundTransformUpdate;
		}

		private function onPanRightClick(e:MouseEvent):void {
			var timeline:TweensyTimeline = Tweensy.to(_soundChannel.soundTransform, { pan: 1 }, 3, Linear.easeNone, 0, _soundChannel);
			timeline.onUpdate = onSoundTransformUpdate;
		}

		private function onSoundTransformUpdate():void{
			var soundTransform:SoundTransform = _soundChannel.soundTransform;
			var text:String = '';

			text += '_soundChannel.soundTransform.volume = ' + _soundChannel.soundTransform.volume.toString() + '\n';
			text += '_soundChannel.soundTransform.pan = ' + _soundChannel.soundTransform.pan.toString();

			_textField.text = text;
		}


	}

}


import flash.display.Graphics;
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.filters.BevelFilter;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.text.TextFormat;

internal class Button extends Sprite {

	private var _textField:TextField;

	public function get label():String { return _textField.text; }
	public function set label(value:String):void {
		_textField.text = value;
		updateFill();
	}

	public function Button() {
		_textField = new TextField();
		_textField.defaultTextFormat = new TextFormat('_等幅', 10, 0x333333, true);
		_textField.autoSize = TextFieldAutoSize.LEFT;
		_textField.x = 8;
		_textField.y = 4;
		addChild(_textField);

		filters = [new BevelFilter(1, 45, 0xdddddd, 0xbbbbbb)];
		buttonMode = true;
		mouseChildren = false;
		addEventListener(MouseEvent.MOUSE_UP, onButtonMouseUp);
		addEventListener(MouseEvent.MOUSE_DOWN, onButtonMouseDown);
	}

	private function onButtonMouseUp(e:MouseEvent):void {
		var button:Sprite = e.currentTarget as Sprite;

		button.filters = null;
		button.filters = [new BevelFilter(1, 45, 0xdddddd, 0xbbbbbb)];
	}

	private function onButtonMouseDown(e:MouseEvent):void {
		var button:Sprite = e.currentTarget as Sprite;

		button.filters = null;
		button.filters = [new BevelFilter(1, 225, 0xdddddd, 0xbbbbbb)];
	}

	private function updateFill():void {
		graphics.clear();
		graphics.beginFill(0xCCCCCC);
		graphics.drawRect(0, 0, _textField.textWidth + 20, _textField.textHeight + 14);
		graphics.endFill();
	}

}
  1. package  {
  2.     import com.flashdynamix.motion.Tweensy;
  3.     import com.flashdynamix.motion.TweensyTimeline;
  4.     import fl.motion.easing.Linear;
  5.     import flash.display.Sprite;
  6.     import flash.events.Event;
  7.     import flash.events.MouseEvent;
  8.     import flash.media.Sound;
  9.     import flash.media.SoundChannel;
  10.     import flash.media.SoundTransform;
  11.     import flash.net.URLRequest;
  12.     import flash.text.TextField;
  13.     import flash.text.TextFieldAutoSize;
  14.     import flash.text.TextFormat;
  15.  
  16.     [SWF(backgroundColor = 0x000000, width = 600, height = 100, frameRate = 30)]
  17.     public class TestTweensy_9 extends Sprite {
  18.  
  19.         private var _sound:Sound;
  20.         private var _soundChannel:SoundChannel;
  21.         private var _textField:TextField;
  22.  
  23.         public function TestTweensy_9() {
  24.             initSound();
  25.             initTextField();
  26.             initButtons();
  27.         }
  28.  
  29.         private function initSound():void{
  30.             var urlRequest:URLRequest = new URLRequest('*.mp3');    // パスは省略
  31.  
  32.             _sound = new Sound();
  33.             _sound.load(urlRequest);
  34.  
  35.             _soundChannel = _sound.play();
  36.             _soundChannel.addEventListener(Event.SOUND_COMPLETE, onSoundComplete);
  37.         }
  38.  
  39.         private function onSoundComplete(e:Event):void {
  40.             _soundChannel.removeEventListener(Event.SOUND_COMPLETE, onSoundComplete);
  41.             _soundChannel = null;
  42.  
  43.             _soundChannel = _sound.play();
  44.             _soundChannel.addEventListener(Event.SOUND_COMPLETE, onSoundComplete);
  45.         }
  46.  
  47.         private function initTextField():void {
  48.             var textFormat:TextFormat = new TextFormat('_等幅', 10, 0xffffff);
  49.  
  50.             _textField = new TextField();
  51.             _textField.defaultTextFormat = textFormat;
  52.             _textField.autoSize = TextFieldAutoSize.LEFT;
  53.             _textField.y = 50;
  54.  
  55.             addChild(_textField);
  56.         }
  57.  
  58.         private function initButtons():void {
  59.             var labels:Array = ['VolumeOn', 'VolumeOff', 'PanLeft', 'PanRight'];
  60.             var clickHandlers:Array = [onVolumeOnClick, onVolumeOffClick, onPanLeftClick, onPanRightClick];
  61.  
  62.             var i:int, button:Button, x:Number;
  63.             for (i = 0; i < 4; i ++) {
  64.                 x = (button == null)? 0: button.x + button.width;
  65.                 button = new Button();
  66.                 button.label = labels[i];
  67.                 button.x = x;
  68.                 button.addEventListener(MouseEvent.CLICK, clickHandlers[i]);
  69.                 addChild(button);
  70.             }
  71.         }
  72.  
  73.         private function onVolumeOnClick(e:MouseEvent):void {
  74.             var timeline:TweensyTimeline = Tweensy.to(_soundChannel.soundTransform, { volume: 1 }, 3, Linear.easeNone, 0, _soundChannel);
  75.             timeline.onUpdate = onSoundTransformUpdate;
  76.         }
  77.  
  78.         private function onVolumeOffClick(e:MouseEvent):void {
  79.             var timeline:TweensyTimeline = Tweensy.to(_soundChannel.soundTransform, { volume: 0 }, 3, Linear.easeNone, 0, _soundChannel);
  80.             timeline.onUpdate = onSoundTransformUpdate;
  81.         }
  82.  
  83.         private function onPanLeftClick(e:MouseEvent):void {
  84.             var timeline:TweensyTimeline = Tweensy.to(_soundChannel.soundTransform, { pan: -1 }, 3, Linear.easeNone, 0, _soundChannel);
  85.             timeline.onUpdate = onSoundTransformUpdate;
  86.         }
  87.  
  88.         private function onPanRightClick(e:MouseEvent):void {
  89.             var timeline:TweensyTimeline = Tweensy.to(_soundChannel.soundTransform, { pan: 1 }, 3, Linear.easeNone, 0, _soundChannel);
  90.             timeline.onUpdate = onSoundTransformUpdate;
  91.         }
  92.  
  93.         private function onSoundTransformUpdate():void{
  94.             var soundTransform:SoundTransform = _soundChannel.soundTransform;
  95.             var text:String = '';
  96.  
  97.             text += '_soundChannel.soundTransform.volume = ' + _soundChannel.soundTransform.volume.toString() + '\n';
  98.             text += '_soundChannel.soundTransform.pan = ' + _soundChannel.soundTransform.pan.toString();
  99.  
  100.             _textField.text = text;
  101.         }
  102.  
  103.  
  104.     }
  105.  
  106. }
  107.  
  108.  
  109. import flash.display.Graphics;
  110. import flash.display.Sprite;
  111. import flash.events.MouseEvent;
  112. import flash.filters.BevelFilter;
  113. import flash.text.TextField;
  114. import flash.text.TextFieldAutoSize;
  115. import flash.text.TextFormat;
  116.  
  117. internal class Button extends Sprite {
  118.  
  119.     private var _textField:TextField;
  120.  
  121.     public function get label():String { return _textField.text; }
  122.     public function set label(value:String):void {
  123.         _textField.text = value;
  124.         updateFill();
  125.     }
  126.  
  127.     public function Button() {
  128.         _textField = new TextField();
  129.         _textField.defaultTextFormat = new TextFormat('_等幅', 10, 0x333333, true);
  130.         _textField.autoSize = TextFieldAutoSize.LEFT;
  131.         _textField.x = 8;
  132.         _textField.y = 4;
  133.         addChild(_textField);
  134.  
  135.         filters = [new BevelFilter(1, 45, 0xdddddd, 0xbbbbbb)];
  136.         buttonMode = true;
  137.         mouseChildren = false;
  138.         addEventListener(MouseEvent.MOUSE_UP, onButtonMouseUp);
  139.         addEventListener(MouseEvent.MOUSE_DOWN, onButtonMouseDown);
  140.     }
  141.  
  142.     private function onButtonMouseUp(e:MouseEvent):void {
  143.         var button:Sprite = e.currentTarget as Sprite;
  144.  
  145.         button.filters = null;
  146.         button.filters = [new BevelFilter(1, 45, 0xdddddd, 0xbbbbbb)];
  147.     }
  148.  
  149.     private function onButtonMouseDown(e:MouseEvent):void {
  150.         var button:Sprite = e.currentTarget as Sprite;
  151.  
  152.         button.filters = null;
  153.         button.filters = [new BevelFilter(1, 225, 0xdddddd, 0xbbbbbb)];
  154.     }
  155.  
  156.     private function updateFill():void {
  157.         graphics.clear();
  158.         graphics.beginFill(0xCCCCCC);
  159.         graphics.drawRect(0, 0, _textField.textWidth + 20, _textField.textHeight + 14);
  160.         graphics.endFill();
  161.     }
  162.  
  163. }


About this entry