| 套件 | 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
隱藏繼承公用屬性
顯示繼承公用屬性