使用內嵌聲音

Flash Player 9 以及更新的版本,Adobe AIR 1.0 以及更新的版本

對於應用程式的使用者介面中,做為指示器的小型聲音 (例如,按一下按鈕時播放的聲音) 而言,使用內嵌聲音 (而不是從外部檔案載入聲音) 是最有用的。

當您在應用程式中嵌入聲音檔案時,所產生的 SWF 檔大小會隨著聲音檔案的大小而增加。換句話說,在應用程式中嵌入大型聲音檔案可能會使 SWF 檔的大小增加到無法預期的大小。

將聲音檔案嵌入應用程式 SWF 檔的正確方法會隨著開發環境而異。

在 Flash 中使用內嵌聲音檔案

Flash 編寫工具可讓您以多種聲音格式匯入聲音,並將它們儲存為「元件庫」中的元件。您接著便可以將它們指定給時間軸中的影格或某個按鈕狀態的影格,也可以將它們搭配「行為」使用,或直接在 ActionScript 程式碼中使用。本節會說明如何透過 Flash 編寫工具,在 ActionScript 程式碼中使用內嵌聲音。如需有關在 Flash 中使用內嵌聲音之其它方式的詳細資訊,請參閱「使用 Flash」中的「匯入聲音」。

使用 Flash 編寫工具嵌入聲音檔案:

  1. 選取「檔案 > 匯入 > 匯入至元件庫」,然後選取一個聲音檔案,將它匯入。

  2. 在「元件庫」面板中的匯入檔案名稱上按一下右鍵,再選取「屬性」。按一下「匯出給 ActionScript 使用」核取方塊。

  3. 在「類別」欄位中,輸入要在 ActionScript 中參考此內嵌聲音時使用的名稱。根據預設,此欄位中會使用聲音檔案的名稱。如果檔案名稱包含句點,例如「DrumSound.mp3」這個名稱中的句點,您必須將它變更成像「DrumSound」這樣,因為 ActionScript 不允許類別名稱中含有句點字元。「基底類別」欄位應該仍然會顯示 flash.media.Sound。

  4. 按一下「確定」。您可能會看到一個對話方塊,表示在類別路徑中找不到這個類別的定義。按一下「確定」並繼續。如果您輸入的類別名稱與應用程式類別路徑中任何類別名稱都不相符,就會自動產生繼承自 flash.media.Sound 類別的新類別。

  5. 若要使用內嵌聲音,必須在 ActionScript 中參考該聲音的類別名稱。例如,下列程式碼一開始會建立自動產生之 DrumSound 類別的新實體:

    var drum:DrumSound = new DrumSound(); 
    var channel:SoundChannel = drum.play();

    DrumSound 是 flash.media.Sound 類別的子類別,因此會繼承 Sound 類別的方法和屬性,包括如上所示的 play() 方法。

在 Flex 中使用內嵌聲音檔案

有許多方式可以將字體嵌入 Flex 應用程式中,包括:

  • 在指令碼中使用 [Embed] 中繼資料標籤

  • 在 MXML 中使用 @Embed 指令,以指定內嵌資源做為組件 (如 Button 或 a SoundEffect) 的屬性。

  • 在 CSS 檔案中使用 @Embed 指令

本節內容說明第一種做法:如何使用 [Embed] 中繼資料標籤,將聲音嵌入 Flex 應用程內的 ActionScript 程式碼中。

若要將資源嵌入 ActionScript 程式碼中,請使用 [Embed] 中繼資料標籤。

將聲音檔案放在主來源資料夾或專案組建路徑中的其他資料夾。當 編譯器遇到 Embed 中繼資料標籤時,就會為您增加內嵌資源類別。您可以透過資料類型的變數存取類別,變數必須在 [Embed] 中繼資料標籤之後立即宣告。

下列程式碼嵌入稱為 smallSound.mp3 的聲音,並使用 soundClass 變數,將參考儲存至與該聲音相關聯的內嵌資源類別。然後,程式碼再建立內嵌資源類別的實體,並在該實體上呼叫 play() 方法:

package 
{ 
    import flash.display.Sprite; 
    import flash.media.Sound; 
    import flash.media.SoundChannel; 
 
    public class EmbeddedSoundExample extends Sprite 
    { 
        [Embed(source="smallSound.mp3")] 
        public var soundClass:Class; 
         
        public function EmbeddedSoundExample() 
        { 
            var smallSound:Sound = new soundClass() as Sound; 
            smallSound.play(); 
        } 
    } 
}

若要使用內嵌聲音來設定 Flex 組件的屬性,則應該轉換為 mx.core.SoundAsset 類別的實體,而不是 Sound 類別的實體。如需使用 SoundAsset 類別的類似範例,請參閱「學習 ActionScript 3.0」中的「內嵌資源類別」。