AS3 sound類的一些技巧

2021-09-08 15:32:56 字數 3925 閱讀 9264

解決第乙個問題:

如何把聲音檔案作為乙個變數載入到swf檔案中。

建立乙個sound物件,然後載入具體的聲音檔案到裡面

建立乙個sound物件和建立其他物件一樣簡單,首先我們必須保證相關的類已經被匯入。

import flash.media.sound;

然後,直接建立聲音物件的乙個例項就可以了:

_sound = new sound();

當然,現在你還需要為聲音物件乙個具體的聲音,比如一首歌,結下來,我們在例子中提到的所有**都用song.***來代替,把它儲存在.swf檔案同一 個目錄下。

要想載入聲音檔案到剛剛建立的sound物件中,還要先建立乙個urlrequest物件(在此我們還必須匯入相關的類import flash.net.urlrequest,通過字串表示***檔案的路徑:

soundfile = new urlrequest("song.***");

接下來,我們就可以用下面這個語句來實現載入聲音檔案了:

_sound.load(soundfile);

當然我們還可以把上面的步驟用下面的方法來實現:

package

}  

}下面說一種更快捷的解決上面問題的方法:

public function loadsoundexample(  )

當你用這種方法建立_sound檔案的時候,實際上sound是呼叫其內部函式load()並開始載入資料了,如果你只想用你的sound物件載入乙個聲 音檔案的時候,這時一種非常簡便的方法。

解決方法

具體討論

_sound = new sound(new urlrequest("song.***")); _sound.play(  );

上面的是最簡單的情況,play()方法還有其他的一些附加功能,我們以後討論。

請看後續翻譯

問題三解決方案

buffer = new soundloadercontext(5000);

應用這個緩衝有兩種方法:

1.  在建立sound物件的時作為引數使用;

2.  在使用sound物件的load()方法時作為引數使用。

具體**如下:

//在建立sound物件的時作為引數使用;

var request:urlrequest = new urlrequest("song.***");

var buffer:soundloadercontext = new soundloadercontext(5000);

_sound = new sound(request, buffer);

_sound.play(  );

//在使用sound物件的load()方法時作為引數使用。

var request:urlrequest = new urlrequest("song.***");     

var buffer:soundloadercontext = new soundloadercontext(5000);    

_sound = new sound(  );   

_sound.load(request, buffer);    

_sound.play(  );

問題四解決方法:

_sound.play(5500);

另外乙個例子是:我們手頭有某人的講話錄音,他在開始的時候說了各部分的要點。現在,允許使用者自由選擇他們感興趣的部分。這時,我們就可以把各部分開始的 時間存放在乙個陣列裡,然後通過選擇的部分可以從數理找到對應的開始時間(開始位置),再把這個時間傳給play()方法。下面是例程:

問題五解決方案

_sound.play(0, 3);

問題六package

public function onenterframe(event:event):void     

}  } 

}如果我們把聲音檔案放在本地機器上進行測試,可能會看不到灰色進度條慢慢增長的效果,它會一下子變成100%,如果可能,把檔案放在網路上進行測試,這樣 你就能看到效果了。注意:當你第二次或後面測試的時候,請清空瀏覽器的快取,否則,會和在本地機器上測試的效果一樣。

問題七解決方案

讀取sound物件的id3屬性

***檔案中可以包含很多關於聲音檔案的一些資料,這些資料通常包含藝術家、**集、發行時間、作曲家、等。包含資訊的多少取決於製作或為這個** 新增標籤的人。在絕大多數情況下,我們至少可以從中獲取歌曲名和藝術家的標籤。

這些資料是我們用actionscript通過訪問sound物件的id3屬性來得到的。

這些屬性是flash.media.id3info 類的例項,它包含下面的一些具體屬性:

album

artist

comment

genre

songname

track

year

所以要想知道**的名字,你可以這樣做:

_sound.id3.songname

我們如何知道知道聲音檔案的id3相關資料已經到達swf檔案中了呢?幸運的是,sound物件有個id3事件可供我們偵聽,這個事件發生了,就表明可以 安全地讀取id3資料了。sound物件繼承了eventdispatcher類,因此我們可以用事件偵聽函式來偵聽這個事件(這個事件被定義為 flash.events.event.id3),然後新增乙個事件處理函式,來讀取id3的資訊。

下面的例子建立了乙個文字框,並在其中列出了id3的所有資訊

package

public function onid3(event:event):void }}

譯者注:上面的這個例子的使用方法:

1,  新建立乙個fla檔案,命名,儲存;

2,  找一首歌曲(***格式)複製到fla的那個目錄裡面,命名為song.***(***是字尾名);

3,  新建乙個.as檔案,把上述**複製到其中,儲存為id3reader.as儲存在fla同乙個目錄;

4,  把fla檔案的document屬性(選中舞台,開啟屬性面板就能看到)設定為id3reader;

5,  按ctrl+enter測試。

問題八解決方法

偵聽soundcomplete事件

譯者注:上面的這個例子的使用方法:

1,新建立乙個fla檔案,命名,儲存;

2,找三首歌曲(***格式)複製到fla的那個目錄裡面,命名為song1.***,song2.***,song3.***(***是字尾 名);

3,新建乙個.as檔案,把上述**複製到其中,儲存在fla同乙個目錄,命名為playlist.as;

4,把fla檔案的document class屬性(選中舞台,開啟屬性面板就能看到)設定為playlist;

5,按ctrl+enter測試。我們將依次聽到上面的三首歌

問題九解決方法

length /= percentbuffered;

說明:問題六[原創]actionscript3 使用sound類——獲取檔案大小中,我們提到了要想正確顯示進度條要清空快取的問題,在此不再重複。下面的**展示了如何把兩個進度條放在一起:

package        

public function onenterframe(event:event):void

}}   

}譯者注:上面的這個例子的使用方法:

1,新建立乙個fla檔案,命名,儲存;

2,找首歌曲(***格式)複製到fla的那個目錄裡面,命名為song.***(***是字尾名);

3,新建乙個.as檔案,把上述**複製到其中,儲存在fla同乙個目錄,命名為progressbar2.as;

4,把fla檔案的document class屬性(選中舞台,開啟屬性面板就能看到)設定為progressbar2,設定背景顏色為蘭色(只要不是白色黑色灰色就行);

5,按ctrl+enter測試。我們看到效果。

如果看不到載入進度,請換個網路上的歌曲試試看。

問題十解決方法

具體討論

android UI 的一些技巧

一 去掉edittext的背景顏色 android background null 二 listview 修改某行的值,因為一些功能邏輯,需要修改listview某行的值,那麼就可通過下面的方法,獲取到對應的listview的某行,然後修改。private void updateview int i...

MySQL的一些技巧

使用rand 獲取隨機結果 在order by語句中可按照如下的隨機順序檢索資料行 mysql select from tbl name order by rand order by rand 同 limit 的結合從一組列中選擇隨機樣本很有用 mysql select from table1,ta...

VIM 的一些技巧

vim配置檔案 vimrc 如果沒有自己建立乙個即可 filetype plugin indent on 開啟外掛程式 set number 顯示行號 syntax on 語法高亮 set cindent set transparency 15 透明度 set guioptions aace 去掉 ...