進階 這些結果是令人信服的,假如我們製作一個“無聲”版本(所有的動畫保持原狀,只刪除了所有的聲音)那麼輸出檔案大小為655kb 。如果我們比較一下兩個檔案的大小差異的話,結果說明採用str00方式的整個音效檔只佔用59kb!!!而採用傳統方式的話,音樂檔案將佔用595kb.
進一步說明:如果有5到6個2,3秒的音效檔,構成1,2,3分鐘甚至更多時間,音樂檔案佔用的體積將低於70~80k.相對的,如果採用傳統方法處理的話,佔用檔案大小將是1MB甚至更多。
下面介紹一下工作原理:
str0技術:
首先,讓我們選擇一個盡量小的音效檔"NULLSOUND"。這個小的wav檔案裡面除了靜音啥也沒有,大概0.1秒長。我們可以用任何聲音編輯軟體來產生它。 然後我們把這個檔案放到timeline裡面,然後設定為stream方式,並設定迴圈次數以便聲音一直延長到Flash的結尾。我們只設定這個NULLSOUND檔案為stream方式的,其他聲音用層來組織,都設定成event方式。這樣,我們就可以把stream聲音的輸出品質設定成足夠低(ADPCM 5 kHz 2 bit)同時卻不影響整個音樂的音質,因為event方式的聲音可以設定高一些比如ADPCM 11 kHz 4 bit. 。
請看下面的圖例:
圖1. str0技術裡面的主時間軸
圖2. 時間軸裡NULLSOUND聲音的設定
圖3. 匯出情況下的stream和event聲音音質設定
我們可以微調一下上面的技術,從而使檔案體積更小,就是我們稱為str00技術:
str00技術:
我們把前面技術中,NULLSOUND的迴圈次數設定成1次,其他的保持不變。 這項技術是建立在flash的一個有趣的特性基礎上的: 如果時間上有個音效檔設定成stream方式,那麼flash在播放完這個音效檔後會繼續以stream模式播放聲音。也就是說,我們可以用這樣一個小的NULLSOUND音效檔作為一個開關,使整個播放器用stream模式播放聲音。這種stream播放模式可以使用"Stop All Sound"動作來關閉。使用這種方法,我們也可以在影片中靈活的切換stream模式或者是event模式,也就是可以在恒定幀率以及幀率可變模式中切換。
下面的圖例表述了這種str00技術
圖4. 主時間軸上的NULLSOUND只迴圈一次
圖5. NULLSOUND聲音的設定
str00技術的附帶說明:
str00技術的唯一缺陷在於:假設使用者使用獨立播放器來播放flash,那麼如果使用者在播放時候敲斷行符號鍵,那麼flash將停止所有的聲音的播放,即使再按斷行符號繼續播放,其他聲音都能正常播放,而stream的聲音將不能播放,因為stream聲音的主要畫面格是在最前面,這樣的後果就是播放的stream模式被關閉了,也就是恒定幀率模式被關閉了。要避免這種錯誤,解決的方法就是安置一個隱形的按鈕來捕抓按鍵動作:
On ( Key: )
Play
End On
圖6. 隱形按鈕上的action設定
【譯者注】: 該文法為flash4文法,換成flash5以後版本文法如下:
on (keyPress "") {
play();
}
同樣道理,獨立播放器裡的快顯功能表也應該在開始被禁用:
FS Command ("showmenu", "false")
圖7. 禁用快顯功能表的action設定
【譯者注】: 該文法為flash4文法,換成flash5以後版本文法如下:
fscommand ("showmenu", "false");
用了以上的設定以後,理論上flash將不會異常停止了。
【譯者總結】:
該項技術應用背景: 背景音效需要多次迴圈,動畫和聲音需要保持同步,音質要求高,檔案體積要求盡量小的情況下。
技巧:
製作動畫過程中,可以把所有的聲音設定成stream模式,以便調整動畫和聲音完全符合。當確聲音動畫全部匹配以後,再把所有聲音設定成event,然後設定nullsound為stream以縮小檔案體積。
有條件的情況下,盡量分割各項音樂元素,提取合并可以迴圈利用部分,然後利用Flash作為混音器來使用,這樣將有效減少輸出檔案的大小。