史萊姆論壇

返回   史萊姆論壇 > 教學文件資料庫 > 應用軟體使用技術文件
忘記密碼?
論壇說明

歡迎您來到『史萊姆論壇』 ^___^

您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的!

請點擊這裡:『註冊成為我們的一份子!』

Google 提供的廣告


 
 
主題工具 顯示模式
舊 2004-09-25, 02:45 AM   #1
psac
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設 Flash 聲音、音樂的進階處理

flash軟體對聲音的靈活控制,通常分成兩種形式,一種是通過從綁定一個聲音,然後利用Flash5中提供的有關聲音的函數來控制; 另一種,是通過將聲音設定成Stream方式,然後結合聲音函數以及關於MC的特性進行控制。

  對第一種方式,我們可以通過控制 yourSoundObject.setVolume( volume )來設定聲音對象的音量,yourSoundObject.setPan( pan )來設定左右的均衡, yourSoundObject.start( secondsOffset, loops ) 的方式控制聲音對像從某一偏移量進行播放。


當然,還可以使用yourSoundObject.setTransFORM(yoursoundTransFORMObject); 來對聲音對像進行簡單的效果處理。


很不幸的是,在使用Flash5提供的聲音函數中,對聲音的控制並不完美,有兩個我們很需要的功能並沒有被加入到Flash5聲音函數庫裡面: 一個是判斷聲音對象的長度, 另一個是判斷聲音是否處於播放狀態(就像director裡面的isBusy()函數實現的功能)。國外有朋友針對這個狀況提供一些變通的思法:

1、ralf siegel 提供了一段 getSoundTimer的AS( action script)來檢測聲音對象的長度,具體網上的位址是:

  http://flashex.audiofarm.de/getSoundTime.html

  他的思法其實並不複雜,可以說使用了取巧的方法。


工作原理是,利用soundObject.start(secondsOffset);這個語句,如果secondsOffset在聲音對像長度範圍之外,電腦因為無法播放聲音而很快返回,如果sec ondsOffset在聲音對像長度範圍之內,顯然電腦為了播放這段聲音需要一段處理時間比如安排記憶體等等。


這樣的話,只需要對電腦處理這個語句的時間進行檢測,就可以知道secondsOffset是否超出聲音對像長度,然後安排一個seconds Offset從小到大的循環,就可以判斷出聲音對象的長度了。 對於這樣一個做法,我認為可以拓寬一下我們的思法,但不推薦採用這個做法,因為每個用戶的電腦處理速度並不一致,顯然處理soundObject.start(secondsOffset);語句的時間也不一樣,關於這個時間來判斷,並不可靠。

2、Dave Yang 專門針對這個情況構造了一個qwiSoundObject對象,大家可以到這裡觀察和下載他的研究成果:

  http://www.quantumwave.com/html/beta/qwiSoundObject.html

  Dave 提供了一個smart clip,這個叫qwiSndObj的smart clip提供了5個參數,sndID: 聲音文件的linage ID, sec: 聲音對象的長度(秒為服務機構,可以從庫中的聲音內容看到), secOffset:播放聲音的偏移位置, nLoop:聲音播放循環次數, autoStart 聲音是否自動播放。 這樣,根據用戶啟始化這個smart clip提供的參數里面的聲音對象的長度,Dave 編製了通用的聲音控制函數 isBusy(), getSndEndTime(). 這個smart clip確實工作的很好,大家可以下載下來測試一下。



對於這個方法,需要指出的是有一種情況是不適合的,那就是對於匯入一個大的聲音文件,如果你在Flash庫中對這個聲音進行壓縮,那麼通過secOffset進行聲音偏移操作將得到錯誤的答案。



這並不是Dave的錯, 事實上是Flash5軟體對聲音處理有bug, 不知道為什麼,對於在Flash庫中壓縮過的聲音對象,使用soundObject.start(secondsOffset)定位都有問題

  對於第二種方式,是我最推薦的方法,因為他綜合了Flash程序控制已經MC的特性,很容易做出更深入的套用,比如mp3播放器。下面我就結合mp3播放器來講解一下製作思法:

  提到這個控制方式,不得不提到聲音對象的 stream內容,聲音的stream內容,使聲音以流的方式進行工作,也就是說聲音可以和MC的畫格進行無縫結合,大家可以理解成聲音對像被綁定入MC中的每一畫格。這樣的話,控制聲音就變得非常簡單,比如聲音的暫停和播放,就只要控制聲音文件所在MC的暫 停和播放就可以實現。


對聲音的偏移,只要控制MC從偏移量所在的畫格數播放就可以了。對於stream方式的聲音,yourSoundObject.setVolume( volume )和yourSoundObject.setPan( pan )等聲音處理函數依然適用。

  正因為stream方式的聲音具備有MC的某些特性,才使得顯示聲音波形表或者用聲音控制口形成為可能。具體的原理,就是採用第三方的軟體來採樣,得出每一個畫格裡面聲音的EQ值,然後根據MC播放的畫格位置控制當前聲音的波形表或者口形。

  我最先瞭解到這個想法的是 flashkit,flashkit曾經用C語言編寫了一個專門提取聲音EQ值的程序,可惜他們並沒有公開這個程序,而是在他們網站上建立了一個聲音共享庫,用戶可以提交自己的聲音,然後由他們轉換好放在他們的網站上供大家使用。大家可以訪問以下結果:

  http://www.flashkit.com/soundfx/index.shtml

  顯然,對於我們要做一個mp3播放器來說,提交音樂文件的方法是行不通的。

  俄羅斯的 den 做了一個很棒的mp3播放器,
  位址是:http://flash.onego.ru/flash5/cleoplayer2/cleoplayer2.html
  源程序下載位址: http://flash.onego.ru/flash5/cleopla...leoplayer2.zip

  他利用了一個第三方的軟體,名字叫SWIFTMP3 ,這個軟體的作用就將mp3文件轉換成swf文件,並獲取每一畫格聲音的不同音瀕EQ值。Swiftmp3是一個免費軟體,它可以採用exe或者是cgi兩種執行方式,大家可以到這裡下載這個軟體:

  http://www.swift-tools.com/swift-mp3.html

  有關swiftmp3怎麼套用,然後整合到flash中我就不做進一步介紹了,大家可以看看swiftmp3的說明,或者對照 Den Ivanov的源程序來獲取說明 。 swiftmp3是個很好的工具,國外已經有很多mp3播放器就是採用swiftmp3獲取聲音EQ值的,比如典型的例子:

  http://www.flash-france.com/soundfx.php


  Swiftmp3獲取了每一個畫格裡面聲音的不同音瀕EQ值,對於一首歌曲的mp3文件來說,這個EQ值顯得非常大,不可避免的造成了最終的文件就很大。


如果用戶只是希望按照聲音大小控制人物的口形的話,顯然取出不同音瀕EQ值就有點多餘了。



這裡我們可以套用另外一個工具 flashamp,它和swiftmp3最大的不同,就在於它對每一個畫格的聲音,只取出一個EQ值,這樣,資料檔案得到了很大的壓縮, 我做過的mp3播放器,採用的軟體就是flashamp,因為flashamp只能取一個EQ值,所以我的波形表事實上顯示的是一個線形列表,第一格對應於當前這一個畫格的EQ值,第二格對應的是前一個畫格的EQ值,第三格對應的是再前一畫格的EQ值..... .這樣的話,播放起來還是能顯示出很好的動態效果的。


至於Flashamp如何轉換成swf文件,浪子曾經出過一個教學了,我這裡也就不重複了。大家可以先看看這個教學:

  http://www.flashempire.com/efe_tutor/tutorview.php?id=55

  我再重複一次我做mp3播放器的思法吧,有興趣的朋友可以自己也做一個:
1、使用flashamp軟體提取相要的mp3文件中的eq值,產生一個歌曲文件,裡面包含有mp3音樂(stream方式)以及將剛才產生的eq值存入flash的一個陣列中,定義幾個變數包含歌曲的名字以及歌曲的播放總長度;

2、定義一個文本文件,記 錄歌曲文件的列表,檔案名和相關資訊(用來做動態載入使用);


3、設定一個主控文件,根據文本文件裡面的歌曲列表動態載入第一步產生的swf文件,然後根據這個swf裡面的陣列訊息(聲音EQ值)控制波形表的顯示方式。
有了這個思法,製作起來應該不算難了.

  根據上面的介紹,我使用了Flashamp的第三方軟體製作了mp3播放器的例子,大家可以到這裡下載:

  http://www.flashempire.com/efe_flas/flasdown.php?id=108&name=flashmp3

  浪子也使用了 swiftmp3軟體做了一款更cool的mp3播放器的例子,大家可以到這裡下載源程序分析:

  http://www.flashempire.com/efe_gallery/works/mp3.php
psac 目前離線  
送花文章: 3, 收花文章: 1631 篇, 收花: 3205 次
 



發表規則
不可以發文
不可以回覆主題
不可以上傳附加檔案
不可以編輯您的文章

論壇啟用 BB 語法
論壇啟用 表情符號
論壇啟用 [IMG] 語法
論壇禁用 HTML 語法
Trackbacks are 禁用
Pingbacks are 禁用
Refbacks are 禁用

相似的主題
主題 主題作者 討論區 回覆 最後發表
教學 - FLASH攪拌器 psac 繪圖軟體應用技術文件 1 2006-07-21 05:38 PM


所有時間均為台北時間。現在的時間是 11:29 AM


Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2024, Jelsoft Enterprises Ltd.


SEO by vBSEO 3.6.1