聲音 Sound
透過 Sound 物件實體,載入外部 mp3 格式檔並播放,或關閉聲音串流及存取聲音相關資訊,但一個 Sound 物件無法重複載入多個聲音。更複雜的聲音控制,則透過 SoundChannel 物件、 Microphone 物件及處理聲音輸出的 SoundTransform 物件。
Sound 及 SoundChannel 類別與物件 - flash.media 套件
建立 Sound 物件如有傳遞參數 stream (聲音檔位址) ,則會直接載入聲音;如果沒有指定參數,則可透過 load() 方法載入。 SoundChannel 物件可用來控制聲音更多的屬性,但實體不會由 new 指令直接建立,而是透過 Sound 物件呼叫 play() 方法就會建立 SoundChannel 實體,這是簡單的道理, SoundChannel 物件不可能在 Sound 物件沒有載入聲音前建立。
建構 Sound 物件
- 建立 Sound 物件實體時就載入聲音
-
var uriAt:URLRequest=new URLRequest(mp3檔位址的字串);
var soundA:Sound=new Sound(uriAt);
soundA.play();
- 使用 Sound 類別的 load() 方法載入聲音
-
var uriAt:URLRequest=new URLRequest(mp3檔位址的字串);
var soundB:Sound=new Sound();
soundB.load(uriAt);
soundB.play(3000,1);
//從 3000 ms 位置開始播放一次
- 由 Sound 類別的 play() 方法建立 SoundChannel 物件實體
-
var soundC:Sound=new Sound(new URLRequest(mp3檔位址的字串));
var chA:SoundChannel=soundC.play();
//播放聲音並建立 SoundChannel
物件。
- 建構函式 Sound()
-
- 建立 Sound 物件實體,指定有效的聲音檔位址 (參數 stream) ,即會載入聲音。
- Sound(stream:URLRequest=null, context:SoundLoaderContext=null)
- stream : mp3 聲音檔的 uri 位址。
- context : 預先載入 mp3 資料至緩衝區的毫秒數,預設值為 1000 。
Sound 的屬性與方法
- Sound 繼承 EventDispatcher
- [屬性]
-
- length
-
- 取得聲音物件的總長度。
- length:Number [唯讀],單位為 ms 。
var ln:Number=sd.length
//將 sd 聲音物件的總長度指定給 ln 物件。
- [方法]
-
- play()
-
- 播放聲音,並會產生 SoundChannel 物件實體。
- public function play(startTime:Number = 0, loops:int = 0, sndTransform:SoundTransform = null):SoundChannel
- startTime : 播放起始時間點,單位為 ms 。
- loops : 重複播放的次數。
- sndTransform : 控制音量或左右聲道平衡的 SoundTransform 物件。
sd.play(5000,1)
// sd 物件從 5 秒的位置開始播放一次。
- load()
-
- 載入參數 stream 取得位址的外部聲音檔。
- public function load(stream:URLRequest, context:SoundLoaderContext = null):void
- stream : 由 URLRequest 物件取得的外部聲音檔位址。
- context : 可定義緩衝時間,或預先檢查跨網域原則檔案的 SoundLoaderContext 物件。
sd.load(uriAt)
// sd 物件載入 uriAt 物件取得的聲音檔。
- [事件]
-
- complete
-
- 代表在聲音檔載入完成時的事件。
- 建議使用 Event.COMPLETE 靜態常數代表。
- progress
-
- 代表聲音檔正在進行載入時的事件。
- 建議使用 ProgressEvent.PROGRESS 靜態常數代表。
SoundChannel 的屬性與方法
- SoundChannel 繼承 EventDispatcher
- [屬性]
-
- position
-
- 指出聲音目前播放的時間點。可運用
Event.ENTER_FRAME
事件持續取得。 - position:Number [唯讀],單位為 ms 。
var p:Number=ch.position
//將 ch 物件的目前播放位置指定給 p 物件。
- soundTransform
-
- 由 SoundTransform 物件指出音量控制、左右聲道平衡等屬性。
- soundTransform:SoundTransform [讀寫]
ch.soundTransform=tr
//將包含聲音屬性的 tr 物件指定給 ch 物件。
- [方法]
-
- stop()
-
- 停止播放聲音。
- public function stop():void
ch.stop()
//停止 ch 物件播放聲音。
- [事件]
-
- soundComplete
-
- 代表聲音播放完畢時的事件。
- 建議使用 Event.SOUND_COMPLETE 靜態常數代表。
SoundTransform 類別與物件 - flash.media 套件
SoundTransform 物件含有音量及左右聲道平衡的屬性。
建構 SoundTransform 物件
-
var sdProp:SoundTransform=new SoundTransform(0.9,-0.2);
- 建構函式 SoundTransform()
- public function SoundTransform(vol:Number = 1, panning:Number = 0)
- vol : 音量大小,介於 0 (靜音) 到 1 (最大音量) 間的數值。
- panning : 左右聲道平衡,介於 -1 (左極強) 到 1 (右極強) 間的數值,預設值 0 表示左右強度均等。
SoundTransform 的屬性與方法
- SoundTransform 繼承 Object
- [屬性]
-
- volume
-
- 指出音量大小。
- volume:Number [讀寫],介於 0 (靜音) 到 1 (最大音量) 間的數值。
tr.volume=0.6
// tr 物件的音量為 0.6
- pan
-
- 指出左右聲道平衡。
- pan:Number [讀寫],介於 -1 (左極強) 到 1 (右極強) 間的數值, 0 表示左右強度均等。
tr.pan=0.8
// tr 物件的右聲道較強為 0.8
SoundMixer 類別與物件 - flash.media 套件
SoundMixer 物件會控制全域 (所有) 內嵌及串流聲音,包含聲音控制的靜態屬性和方法。
SoundMixer 的屬性與方法
- SoundMixer 繼承 Object
- [屬性]
-
- soundTransform
-
- 由 SoundTransform 物件指出音量控制、左右聲道平衡等屬性。
- soundTransform:SoundTransform [讀寫]
SoundMixer.soundTransform=tr
//將包含聲音屬性的 tr 物件指定給所有聲音物件。
- [方法]
-
- stopAll()
-
- 停止目前正在播放的所有聲音。
- public static function stopAll():void
SoundMixer.stopAll()
//停止所有聲音
由元件庫內嵌聲音資源建構 Sound 物件
- 匯入聲音至元件庫。
- 在元件庫更改聲音資源屬性: [連結] 區,勾選 [匯出給 ActionScript 使用],預設同時會勾選 [匯出在第一個影格] 。
- [基底類別] 輸入項會自動出現預設的 flash.media.Sound , [類別] 輸入項自行定義類別名稱 (假設是 SampleSound) 。如果不需要擴充類別,按確定就行了;會出現警告「類別路徑中找不到這個類別的定義,將在匯出時自動產生至 SWF 檔」,忽略就可以了,接著 flash 會自動產生 [基底類別] 的擴充空類別。
- 在第一個影格加入 ActionScript
var sd:SampleSound=new SampleSound();
//產生 SampleSound的 instancesd.play();