私の .fla ファイルには、命令ファイルに示されているように、外部アクションスクリプトファイルが含まれています
import xxx.xxx.xxx.sound.MP3Player;
var mp3Player:MP3Player = new MP3Player();
addChild(mp3Player);
今度は彼の loadMp3 関数を使用したいと思います
/**
* Start loading the mp3 file.
*/
private function loadMP3():void {
mp3.load(new URLRequest(MP3_URL));
mp3.addEventListener(IOErrorEvent.IO_ERROR, onIOError, false, 0, true);
channel = mp3.play();
channel.addEventListener(Event.SOUND_COMPLETE, onSoundComplete, false, 0, true);
_isPlaying = true;
}
mp3 が完全にロードされ、ExternalInterface 関数を介してサウンドを再生する準備ができたことを検出します。
どうすればいいですか?ありがとう
フルクラス
package xxx.xxx.xxx.sound {
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.events.MouseEvent;
import flash.geom.ColorTransform;
import flash.media.Sound;
import flash.media.SoundChannel;
import flash.media.SoundMixer;
import flash.net.URLRequest;
import flash.utils.ByteArray;
import flash.text.TextField;
public class MP3Player extends MovieClip {
// Location of the config xml file
public static const CONFIG_XML_URL:String = "xml/config.xml";
// URL of the mp3 file
public static var MP3_URL:String = "mp3/track.mp3";
// Main color for the mp3 player
public static var MAIN_COLOR:uint = 0xFF0000;
// An XMLLoader to load the configuration file
private var xmlLoader:XMLLoader;
// Sound object to be played
private var mp3:Sound = new Sound();
// A sound channel to play the sound object
private var channel:SoundChannel;
// Holds the pause position
private var pausePos:Number;
// A byte array to read spectrum
private var bytes:ByteArray = new ByteArray();
// Indicates whether the mp3 player is playing or not.
private var _isPlaying:Boolean = false;
// Holds the previous label color
private var _prevColor:uint;
public function MP3Player() {
// Initialize the player
init();
}
/**
* Initializes the player.
*/
private function init():void {
// Use as a button
useHandCursor = true;
buttonMode = true;
mouseChildren = false;
equalizer.alpha = 0;
// Add necessary event listeners
addEventListener(Event.ENTER_FRAME, onEnterFrame, false, 0, true);
addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown, false, 0, true);
addEventListener(MouseEvent.MOUSE_OVER, onMouseOver, false, 0, true);
addEventListener(MouseEvent.MOUSE_OUT, onMouseOut, false, 0, true);
loadConfig();
}
/**
* Sets the color of the player to the given parameter.
*/
public function setColor(color:uint):void {
MAIN_COLOR = color;
// Change the color of the equalizer
var colorTransform:ColorTransform = equalizer.transform.colorTransform;
colorTransform.color = MAIN_COLOR;
equalizer.transform.colorTransform = colorTransform;
}
/**
* Loads the configuration file to the memory.
*/
private function loadConfig() {
// Start loading the config.xml file
xmlLoader = new XMLLoader(CONFIG_XML_URL);
xmlLoader.addEventListener(XMLLoader.XML_LOADED, onXMLLoaded);
xmlLoader.load();
}
/**
* This method is called when the xml file is loaded to the memory.
*/
private function onXMLLoaded(evt:Event):void {
// Get configuration parameters
var xml:XML = xmlLoader.getXML();
MP3_URL = xml.@mp3URL;
MAIN_COLOR = xml.@color;
// Change the color of the equalizer
equalizer.alpha = 1;
setColor(MAIN_COLOR);
// Start loading the mp3
loadMP3();
}
/**
* Start loading the mp3 file.
*/
private function loadMP3():void {
mp3.load(new URLRequest(MP3_URL));
mp3.addEventListener(IOErrorEvent.IO_ERROR, onIOError, false, 0, true);
channel = mp3.play();
channel.addEventListener(Event.SOUND_COMPLETE, onSoundComplete, false, 0, true);
_isPlaying = true;
}
/**
* This method is called whenever a new enter frame event occurs.
*/
private function onEnterFrame(evt:Event):void {
try {
SoundMixer.computeSpectrum(bytes, true, 0);
} catch (e:Error) {
}
equalizer.update(bytes);
}
/**
* This method is called when playing the sound is finished.
*/
private function onSoundComplete(evt:Event):void {
// Loop
channel = mp3.play();
channel.addEventListener(Event.SOUND_COMPLETE, onSoundComplete, false, 0, true);
_isPlaying = true;
}
/**
* This method is called when the mouse is over the mp3 player.
*/
private function onMouseOver(evt:MouseEvent):void {
// Change the color of the equalizer
_prevColor = label.textColor;
label.textColor = MAIN_COLOR;
}
/**
* This method is called when the mouse leaves the mp3 player.
*/
private function onMouseOut(evt:MouseEvent):void {
label.textColor = _prevColor;
}
/**
* This method is called when the mouse is clicked on the mp3 player.
*/
private function onMouseDown(evt:MouseEvent):void {
if (_isPlaying) {
pausePos = channel.position;
channel.stop();
_isPlaying = false;
label.text = "MUSIC OFF";
} else {
channel = mp3.play(pausePos);
channel.addEventListener(Event.SOUND_COMPLETE, onSoundComplete, false, 0, true);
_isPlaying = true;
label.text = "MUSIC ON";
}
}
/**
* This method is called if an IO error occurs.
*/
private function onIOError(evt:IOErrorEvent):void {
}
}
}