Flash聲音進階篇:NullSound技術-1

來源:互聯網
上載者:User
進階   原文出處:http://www.bluegelmedia.com
  原作者:Brett E. Yokom / killersound, Inc
  翻譯:Jimbob

概要

  本書介紹“NULLSOUND”stream技術的詳細說明。該技術可以比傳統的聲音stream技術節約90%的檔案體積大小,並保持聲音和動畫完全同步。

序言

  我們先從Macromdeia Flash原有的技術的總覽開始講,後面再來描述具體實現的方法。

  現在的互連網中,動畫網站正在迅速的增長。人們已經不再滿足於使用奇特的向量造型,漂亮的顏色和動畫,你還必須創造很酷的音樂和音效來吸引訪問者的注意。以前的Flash設計師(1998/1999)只是利用簡單的迴圈音效來打破沉默的web世界,接著,這些迴圈音效變得越來越複雜,結果造成了檔案體積增大,增加了下載的時間。同時,市場上也產生了這樣的需求:一些優秀的動畫(例如在電視上播放的廣告),要求映像必須和音樂以及音效完全同步。但是Flash裡面的聲音,能同時滿足這些要求麼:既要小檔案體積,又要和映像同步?Macromedia 提供的解決方案就是把聲音設定成Stream方式。

  這種方式是很有用的,基於以下兩個方面原因:

  1.Flash 播放器不需要一直等到所有的聲音全部下載完成才繼續播放,只要下載一部分預先緩衝的聲音,就可以馬上開始播放了。這有點類似於Real以及Microsoft media player用的流媒體技術。這項技術在寬頻接入的互連網使用者上表現很好,但是對56k以及以下撥號使用者,則會出現問題: 這些使用者可以在flash沒有完全下載時開始觀看,但是隨時都可能因為頻寬不夠而造成動畫的停止,最好是等所有的都全部下載完以後,再開始播放它。

  2.使用stream方式可以保持絕對的播放幀率。 如果你不使用stream方式,設定flash 的fps幀率設定為25,那麼這並不意味著Flash將一直以25幀/秒的速度播放,實際的幀率將取決於你的CPU,CPU越強,則實際播放幀率越接近於預設的值。舉個例子說就是你在奔騰166機器上播放的幀率為8~9,而用奔III-500播放的幀率則達到22。理論上講,如果你設定幀率為25,那麼CPU只有1/25秒的時間來計算播放一幀所需要的所有元素。如果CPU的速度達不到這個要求,比如它可能花上1/5秒的時間來計算,那麼實際的fps就會降低為 5 fps,如果你的Flash包含100幀,那麼理論上播放完只要4秒,而實際上播放需要20秒,flash播放變慢了。

  解決方案就是使用stream方式的聲音!在主時間軸上使用stream方式的聲音,將告訴flash播放器:“你必須保持聲音的播放速度,播放變慢是不允許的!” 結果,不但聲音,圖形的播放速度也一樣保持了同步。那麼一個速度低的CPU能用25的幀率處理完所有的資料嗎?答案是: 不可能。 速度的保持是虛擬,CPU採用忽略未處理的幀來保持幀率的穩定,例如上面提到的例子,用這種方式處理的話,Flash中只有1/5的幀能被顯示,其他都被忽略了(這樣在某些情況下,可能造成明顯的跳幀現象)。

  在本書裡,我們並不想專門來討論如何使用聲音的event方式或者stream方式,介紹這類的文章可以在 www.macromedia.com或者 www.flashmagazine.com 等地方找到。我們所感興趣的是:如何更深入的應用這些知識。

方法說明:

  採用聲音的stream方式,有個主要的缺點:它非常的增加檔案體積大小。 這個是由於stream技術本身造成的。如果你使用一個2秒的聲音,迴圈100次,那麼聲音的總長度為200秒,我們用stream方式匯入這200秒的聲音。如果聲音的原始大小為10k,那麼輸出的swf檔案將包括大約1M的聲音,這是估計值,考慮到聲音的品質以及一些其他的因素,它的實際大小應該是800~900k。如果用56k撥接的平均下載速度4.5k來考慮,使用者需要大概200秒(超過3分鐘)的時間來下載。如果考慮更低的上網速度比如2.5k,那麼需要大概5~6分鐘才能下載完.

  於是得出結論:檔案大小是個大問題.

  一個有趣的現象就是,如果我們使用比較小的聲音來使用stream方式,那麼最後輸出的swf檔案大小將會小很多。如果整個音樂是採用killersound教程裡使用的技術(www.killersound.com),那麼採用一個音效檔(比如最小的那個)作為stream方式而其他音效檔使用event方式就已經足夠了。經過多次測試,我們得到以下的結論:利用layer將其中一個音效檔設定成stream,其他音效檔則不設定為sream方式,效果是完美的。這也意味著Flash可以作為一個混音器來使用。

  那麼我們怎樣才能更深層次的減少檔案體積呢?如果我們選擇壓縮聲音品質(比如: ADPCM, 5 kHz, 4 bit)結果將不會讓我們滿意。檔案體積是小很多了,但是聲音效果太差了! 解決方案就是下面的 str0 以及 str00 技術,這就是我們所謂的 "NULLSOUND STREAMING" 技術。

  在開始講述這項技術之前,讓我們來看一看比較結果:

  應用這項技術最明顯的例子就是 killersound 為虛擬現實開發的標題上。 這個標題包含了1分鐘的複雜音樂和音效。使用了5個音效檔,每個檔案都有不同的壓縮位元從而達到整體的音質要求。在這個例子裡,背景音樂只需要8kbit/s的mp3檔案(因為裡麵包含了主要的低頻部分),高頻的鼓聲等部分則需要32kbit/s的mp3檔案。根據我們後面要介紹的技術,我們還需要使用一個0.1秒長的"NULLSOUND"檔案。因為我們需要保持動畫和聲音的同步,標題的幀率必須恒定,這就意味著我們必須採用stream方式。

  在傳統的方式中,只有一個或者所有的聲音全部都被設定成stream方式,這樣的話,stream聲音本身的位元速率必須設定的很高以滿足某些音質的需求,這也意味著我們浪費了不少的空間。採用新的NULLSOUND stream技術的話,我們可以為每個音效檔設定不同的位元速率,從而保證檔案變小。

  下面的表格中顯示了標題在不同技術下面的輸出檔案大小。 str1和str5採用了傳統的方式,str0和str00則採用了新技術。需要提到的是,檔案不但包含了音樂,也包含了動畫,所以檔案體積比較大。

str1 : 1個迴圈音效設定成 STREAM音質為MP3, 48 kbit/s, MONO,其他音效設定成EVENT音質為根據不同音效分別設定不同的最佳化值
結果:音樂大小 595 KB (檔案大小 1.25 MB )

str5 : 5個音效全部設定成 STREAM音質為MP3, 48 kbit/s, MONO
結果音樂大小 594 KB (檔案大小 1.24 MB )

str0 : "NULLSOUND"音效設定為streamed 音質為 MP3, 8 kbit/s, MONO, 其他音效設定為EVENT音質為根據不同音效分別設定不同的最佳化值
結果:音樂大小 192 KB ! (檔案大小 847 KB )

str00: "NULLSOUND"音效設定為streamed 音質為 MP3, 8 kbit/s, MONO, 其他音效設定為EVENT音質為根據不同音效分別設定不同的最佳化值
結果:音樂大小 59 KB !!! (檔案大小 714 KB )

相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。