語言:TypeScripthtml
工具:Visual Studio Codegit
演示:Audio Visualiazergithub
小明告訴我,他但願打開一個網頁,當即聽到他喜歡的音樂,若是有視覺特效就更棒了。typescript
「但是個人電腦裏沒有 MP3 文件!」跨域
「爲何須要打開一個本地文件?」小明問。
瀏覽器
「我不知道你喜歡聽什麼。」服務器
「...既沒有音頻資源的版權。」工具
「...也沒有足夠的服務器帶寬。」網站
「...更沒法向你解釋什麼是跨域訪問限制。」設計
...
「總之,你只能先去其餘網站下載一個 MP3 文件,而後拖進來。」我說。
「那我爲何不直接在其餘網站聽???」他困惑道。
「聽起來不錯。」
圖1-1 啓動視圖
經過傅里葉變換將時域數據變換到頻域。
「無所謂了,我最但願的是有炫酷的視效。」小明說。
「什麼是炫酷?」
「聽聽你的想法。」小明回答。
「下一代,將來,史無前例的。」
「感受還行,你會怎麼呈現視覺效果呢?」小明接着問。
「自由地繪製。」
「什麼意思?」
「通俗點講,想怎麼畫就怎麼畫。」
「......」
圖2-1 時域數據
圖2-2 頻域數據
像素保留歷史,並向四周彌散。
「這就是你說的下一代?」小明有些失望。
「不是。下一代老是創建在已有的設計上,而後當心翼翼地加入一些變化。」
「哦,那會有什麼變化呢?」
「我已經掌握了一種成熟的變化技巧。」
「總體效果像是石頭拋入平靜的水面,水波逐漸蔓延開來。」
「有沒有合適的名字,我可不喜歡《下一代頻譜》。」
「固然,‘下一代’只是咱們的內部代號,它叫《水波粼粼》。」
圖3-1 擴散示例一
圖3-2 擴散示例二
圖3-3 擴散示例三
將旋轉矩陣做用於整個畫面。
「你剛纔提到當心翼翼,有沒有大膽的設計呢?」
「有的,我管它們叫‘實驗性質的特性’。」
「首先是旋轉,讓整個畫面旋轉起來。」
「有的人不喜歡旋轉,那會讓他感到眩暈。」小明質疑道。
「是的,對用戶來講,這就像 EDM 和輕音樂的區別。」
「還有嗎?」
「把任意兩個場景混在一塊兒。我有個飛鳥場景,鳥兒隨音樂起舞,是否是很棒?」
「我不看好它,這有些難以理解。」
「若是用戶不喜歡,你會移掉它們的對嗎?」小明接着問。
「很敏銳,實驗性質的特性只會有兩個結果。」
「...即在將來的版本中獲得增強,或者完全移除。」
圖4-1 旋轉
圖4-2 場景混疊
限於移動端的硬件水準,對此不要抱有太多幻想。
「移動端是潮流,還有其餘特性嗎?」
「本地化支持。界面上的文字和使用習慣根據瀏覽器語言調整。」
「我有個想法,這個網站能夠支持聽力障礙的人羣。」小明靈機一動。
「你是指聽音樂的網站,對聽覺障礙者作可訪問性支持?」我懷疑本身聽錯了。
「是音畫網站!用戶能夠觀看畫面。」
「......」
「特性不是越多越好,如今讓咱們回到起點。」
「你但願打開一個網頁,自動播放喜歡的音樂?」我提問。
「彷佛只能手動播放。」看起來小明並不介意這一點。
「炫酷的視覺效果?」
「基本滿意。」
「那麼,還有其餘問題嗎?」
...
「個人手機裏也沒有 MP3 文件!」
在線演示:Audio Visualizer
Github 開源:general-engine