聲音 Sound

透過 Sound 物件實體,載入外部 mp3 格式檔並播放,或關閉聲音串流及存取聲音相關資訊,但一個 Sound 物件無法重複載入多個聲音。更複雜的聲音控制,則透過 SoundChannel 物件、 Microphone 物件及處理聲音輸出的 SoundTransform 物件。

Sound 及 SoundChannel 類別與物件 - flash.media 套件

建立 Sound 物件如有傳遞參數 stream (聲音檔位址) ,則會直接載入聲音;如果沒有指定參數,則可透過 load() 方法載入。 SoundChannel 物件可用來控制聲音更多的屬性,但實體不會由 new 指令直接建立,而是透過 Sound 物件呼叫 play() 方法就會建立 SoundChannel 實體,這是簡單的道理, SoundChannel 物件不可能在 Sound 物件沒有載入聲音前建立。

建構 Sound 物件

建立 Sound 物件實體時就載入聲音
  1. var uriAt:URLRequest=new URLRequest(mp3檔位址的字串);
  2. var soundA:Sound=new Sound(uriAt);
  3. soundA.play();
使用 Sound 類別的 load() 方法載入聲音
  1. var uriAt:URLRequest=new URLRequest(mp3檔位址的字串);
  2. var soundB:Sound=new Sound();
  3. soundB.load(uriAt);
  4. soundB.play(3000,1); //從 3000 ms 位置開始播放一次
由 Sound 類別的 play() 方法建立 SoundChannel 物件實體
  1. var soundC:Sound=new Sound(new URLRequest(mp3檔位址的字串));
  2. var chA:SoundChannel=soundC.play(); //播放聲音並建立 SoundChannel 物件。
建構函式 Sound()

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 物件

  1. var sdProp:SoundTransform=new SoundTransform(0.9,-0.2);
建構函式 SoundTransform()

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 物件

  1. 匯入聲音至元件庫。
  2. 在元件庫更改聲音資源屬性: [連結] 區,勾選 [匯出給 ActionScript 使用],預設同時會勾選 [匯出在第一個影格] 。
  3. [基底類別] 輸入項會自動出現預設的 flash.media.Sound , [類別] 輸入項自行定義類別名稱 (假設是 SampleSound) 。如果不需要擴充類別,按確定就行了;會出現警告「類別路徑中找不到這個類別的定義,將在匯出時自動產生至 SWF 檔」,忽略就可以了,接著 flash 會自動產生 [基底類別] 的擴充空類別。
在第一個影格加入 ActionScript
  1. var sd:SampleSound=new SampleSound(); //產生 SampleSound的 instance
  2. sd.play();