我使用以下示例播放MP3文件(我不需要/想要“打开”对话框):
<?xml version="1.0" encoding="utf-8"?>
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark" title="HomeView">
<fx:Script>
<![CDATA[
import flash.media.*;
[Embed(source="assets/marseljeza.mp3")]
[Bindable]
public var sndCls:Class;
public var snd:Sound = new sndCls() as Sound;
public var sndChannel:SoundChannel;
public function playSound():void {
sndChannel=snd.play();
}
public function stopSound():void {
sndChannel.stop();
}
]]>
</fx:Script>
<s:HGroup>
<s:Button label="play" click="playSound();"/>
<s:Button label="stop" click="stopSound();"/>
</s:HGroup>
</s:View>`
点击播放按钮后,MP3文件播放得很好,但是如果我再次点击播放按钮,歌曲会从头开始同时开始,如果我点击按钮三,四,五次或更多次。所以我最终同时拥有同一首歌的“会话”。我希望在第一次单击后禁用PLAY按钮,并在单击STOP后再次启用相同的按钮。我怎么能这样做?
答案 0 :(得分:0)
要回答您的具体问题,您可以使用按钮上的enabled属性。在你的playSound()方法中,执行以下操作::
public function playSound():void {
sndChannel=snd.play();
playButton.enabled = false;
}
请务必在playButton中添加ID:
<s:Button id="playButton" label="play" click="playSound();"/>
您可能需要考虑在playSound()方法中添加一个检查,以便在播放时不播放声音。为此,首先创建一个变量:
protected var isPlaying : Boolean = false;
然后像这样调整playButton()方法:
public function playSound():void {
if(!isPlaying){
sndChannel=snd.play();
isPlaying = true;
}
}
在上述任何一种情况下,您可能希望向complete事件添加事件侦听器,以便重新启用按钮或更改isPlaying标志。方法是这样的:
public function playSound():void {
if(!isPlaying){
snd.addEventListener(Event.COMPLETE,onSoundComplete);
sndChannel=snd.play();
isPlaying = true;
}
}
public function onSoundComplete(event:Event):void{
isPlaying = false;
playButton.enabled = true;
snd.removeEventListener(Event.COMPLETE,onSoundComplete);
}
您也可以使用停止声音方法调用onSoundComplete方法:
public function stopSound():void {
sndChannel.stop();
onSoundComplete(new Event());
}