套件 | flash.events |
類別 | public class SampleDataEvent |
繼承 | SampleDataEvent Event Object |
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 10, AIR 1.5 |
這個事件有兩個用途:
- 為 Sound 物件提供動態產生的音效資料
- 為 Microphone 物件取得音效資料
使用 Sound 物件動態產生音效 使用 sampleData
事件以動態播放產生的音效。在這個環境中,Sound 物件實際上未包含聲音資料,而是做為串流給它之聲音資料 (透過您指定作為 sampleData
事件之處理常式的函數) 的通訊端。
在您的函數中,您可以使用 ByteArray.writeFloat()
方法寫入至事件的 data
) 屬性,其中包含您想要播放的取樣資料。
如果 Sound 物件尚未載入 MP3 檔案,當您呼叫它的 play()
方法時,物件會開始傳送 sampleData
事件,要求聲音樣本。當聲音播放時,Sound 物件會持續傳送事件,直到您停止提供資料或是呼叫 SoundChannel 物件的 stop()
方法。
事件的延遲因平台而異,而且在未來發行的 Flash Player 或 AIR 中可能會變更。不要依靠特定的延遲。而是使用 ((SampleDataEvent.position/44.1) - SoundChannelObject.position)
進行計算。
提供 2048 到 8192 個樣本至 SampleDataEvent 物件的 data
屬性。為了達到最佳效能,請盡可能提供多個樣本。您提供越少的樣本,播放時越可能發生喀嚓聲和爆音。這個行為可能因平台而異,而且發生於各種情況,例如調整瀏覽器大小時。您撰寫的程式碼在只提供 2048 個樣本時可能適用於某個平台,但該程式碼在不同平台上執行時可能不盡理想。如果您需要最低的延遲,請考慮讓使用者可選取資料量。
如果您提供少於 2048 個樣本,Sound 物件會播放其餘樣本,接著就像到達聲音檔結尾一樣地停止聲音,並產生 complete
事件。
您可以使用 Sound 物件的 extract()
方法擷取它的聲音資料,然後您可以將這聲音資料寫入到動態串流以進行播放。
當您搭配 Sound 物件使用 sampleData
事件時,所啟用的 Sound 方法只有 extract()
和 play()
。呼叫任何其他方法或屬性會產生「無效呼叫」例外。SoundChannel 物件的所有方法和屬性仍然會啟用。
擷取麥克風音效 使用 sampleData
事件擷取來自麥克風的音效資料。當您新增 sampleData
事件的事件偵聽程式,當可以使用音效樣本時 Microphone 會傳送事件。
在事件處理常式函數中,請使用 ByteArray.readFloat()
方法讀取事件的 data
) 屬性,其中包含取樣資料。事件將會包含多重樣本,所以您應該使用 while
迴圈讀取可用的資料:
var soundBytes:ByteArray = new ByteArray(); while(event.data.bytesAvailable) { var sample:Number = event.data.readFloat(); soundBytes.writeFloat(sample); }
相關 API 元素
屬性 | 定義自 | ||
---|---|---|---|
bubbles : Boolean [唯讀]
指出事件是否為反昇事件。 | Event | ||
cancelable : Boolean [唯讀]
指出是否可避免與事件相關聯的行為指令。 | Event | ||
constructor : Object
類別物件的參照或是特定物件實體的建構函數。 | Object | ||
currentTarget : Object [唯讀]
正主動使用事件偵聽程式處理 Event 物件的物件。 | Event | ||
data : ByteArray
音效串流中的資料。 | SampleDataEvent | ||
eventPhase : uint [唯讀]
事件流程中的目前階段。 | Event | ||
position : Number
資料在音效串流中的位置。 | SampleDataEvent | ||
target : Object [唯讀]
事件目標。 | Event | ||
type : String [唯讀]
事件類型。 | Event |
方法 | 定義自 | ||
---|---|---|---|
SampleDataEvent(type:String, bubbles:Boolean = false, cancelable:Boolean = false, theposition:Number = 0, thedata:ByteArray = null)
建立包含音效資料事件相關資訊的事件物件。 | SampleDataEvent | ||
[覆寫]
建立 SampleDataEvent 物件的副本,然後設定每個屬性值以符合原始物件的屬性值。 | SampleDataEvent | ||
公用程式函數,可用來實作自訂 ActionScript 3.0 Event 類別中的 toString() 方法。 | Event | ||
指出物件是否有已定義的指定屬性。 | Object | ||
檢查是否已經對事件呼叫 preventDefault() 方法。 | Event | ||
指出 Object 類別的實體是否位於指定為參數的物件原型鏈中。 | Object | ||
如果可以取消事件的預設行為指令,則取消該行為指令。 | Event | ||
指出指定的屬性是否存在,以及是否可列舉。 | Object | ||
為迴圈作業設定動態屬性的可用性。 | Object | ||
避免處理事件流程中,目前節點以及任何後續節點中的任何事件偵聽程式。 | Event | ||
避免處理接續在事件流程中的目前節點之後,後續節點中的任何事件偵聽程式。 | Event | ||
傳回代表此物件的字串,根據地區特定慣例進行格式化。 | Object | ||
[覆寫]
傳回包含 SampleDataEvent 物件所有屬性的字串。 | SampleDataEvent | ||
會傳回指定之物件的基本值。 | Object |
常數 | 定義自 | ||
---|---|---|---|
SAMPLE_DATA : String = "sampleData" [靜態]
定義 SampleDataEvent 事件物件的 type 屬性值。 | SampleDataEvent |
data | 屬性 |
position | 屬性 |
SampleDataEvent | () | 建構函式 |
public function SampleDataEvent(type:String, bubbles:Boolean = false, cancelable:Boolean = false, theposition:Number = 0, thedata:ByteArray = null)
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 10, AIR 1.5 |
建立包含音效資料事件相關資訊的事件物件。Event 物件會當做參數傳遞至事件偵聽程式。
參數type:String — 事件類型。此值為 Event.SAMPLE_DATA 。
| |
bubbles:Boolean (default = false ) — 判斷 Event 物件是否參與事件流程的反昇階段。
| |
cancelable:Boolean (default = false ) — 判斷是否可以取消 Event 物件。
| |
theposition:Number (default = 0 ) — 資料在音效串流中的位置。
| |
thedata:ByteArray (default = null ) — 資料的位元組陣列。
|
clone | () | 方法 |
toString | () | 方法 |
SAMPLE_DATA | 常數 |
public static const SAMPLE_DATA:String = "sampleData"
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 10, AIR 1.5 |
定義 SampleDataEvent
事件物件的 type
屬性值。
這個事件具有下列屬性:
屬性 | 值 |
---|---|
bubbles | false |
cancelable | false ;沒有要取消的預設行為指令。 |
position | 提供音效資料的來源點。 |
相關 API 元素
var mySound:Sound = new Sound(); function sineWaveGenerator(event:SampleDataEvent):void { for ( var c:int=0; c<8192; c++ ) { event.data.writeFloat(Math.sin((Number(c+event.position)/Math.PI/2))*0.25); event.data.writeFloat(Math.sin((Number(c+event.position)/Math.PI/2))*0.25); } } mySound.addEventListener(SampleDataEvent.SAMPLE_DATA,sineWaveGenerator); mySound.play();
Tue Jun 12 2018, 03:47 PM Z