可以用演算法來機器模擬雨聲嗎?

像RainyMood這個網頁和軟體裡面的雨聲,好像不是真實的錄音,因為沒那麼長……
如果是真實的錄音,那麼能否用程序來模擬雨聲嗎?如何做呢?


看了一下目前的回答有很多錯誤和模糊不清的地方所以有必要答一下。我沒有專門研究過雨聲的插件,僅根據基本概念做一些推斷。

看一下wiki上的基本介紹Granular synthesis ,粒子合成簡單來說就是將一個採樣分成長度極小大約為1-50ms的片段,一個片段就是一個粒子。然後從中選擇一部分構成loop,然後通過控制例如粒子長短,播放速度等參數來實現不同的音效。一段雨聲採樣當然也可以這樣處理,但是效果怎麼樣得看實際情況。

至於Rainymood,看了一下它的介紹,因為要3.8歐有點貴就沒買,用過的人可以詳細說一下。我看到只有兩個參數可調,雨聲和雷聲的密度。懷疑它的原理與物理建模和粒子合成並沒有什麼關係,應該是背後有很多雷聲和雨聲的採樣,然後根據密度決定播放這些採樣的數量和出現的頻繁程度,對採樣本身並沒有任何處理, 可能有一些簡單的淡入和淡出。

回到問題本身,如果不基於任何採樣物理建模是目前唯一的實現方式,@赫蘿介紹的基本原理和@李博揚提到的論文是關於這方面的,不再贅述。


音色有兩種:

  • 採樣音色是以現實中採集的真實音色為基礎,再加上對音調、時值、音色不同部分的分離等等的人工干涉來製作的。採樣不意味著不可以對音色進行控制。當然,採集的維度越多,人工干涉的部分越少,音色的還原越真實。大部分電鋼的鋼琴音色都是採樣音色。弦樂的變化多,所以採樣的難度大,小提琴的音色採樣至今效果不好。
  • 建模音色是通過物理模型完全模擬聲音。在很長一段時間裡,建模音色效果都不理想,因為影響音色的要素太多。不過,現在對於研究最多的鋼琴音色,V-Piano 等建模音色,效果已經足以亂真。

大部分還原真實樂器效果較好的音色,都是基於採樣製作的。

因此對於雨聲音色:

  • 用採樣製作雨聲音色,就是採集真實的雨聲,通過剪裁、隨機分布,達到任意控制長度,甚至控制雨點密度的效果。RainyMood 的長度很長、可以控制大小並不是其「不是採樣音色」的理由。鑒於其真實效果和成本比較,我覺得這個雨聲是採樣而來的可能要大得多得多。
  • 用建模製作雨聲音色,在難度上肯定比還原鋼琴音色要低,但是建模的難度依然很大,我覺得不會有人和公司會投入和建模鋼琴音色的精力和財力去干這件事。但是,也的確有建模雨聲音色。

這個叫做「Malstr?m Graintable Synthesizer」的 Reason 合成器插件可以模擬雨聲還有雷聲的效果。介紹:Propellerhead

(Reason 是一個音樂合成、製作軟體,維基百科:Reason (software))

這個視頻(http://www.youtube.com/watch?v=PDtQZfPnbkc)展示了如何用這個合成器製作出雨聲和雷聲,應該選擇什麼參數等等

這個視頻(http://www.youtube.com/watch?v=pYmU-AAxd3c)是另一段使用 Reason 模擬的雨聲和雷聲。

總的來說,從這兩段的效果來看,用計算機模擬雨聲,效果不錯,但是還沒有達到亂真的地步。作為不用心聽的背景效果音還可以,如果單單只聽雨聲用來放鬆心情的場合,可能還是需要採樣雨聲了。

-

另外,這個專利(http://www.google.com/patents/US5237903)是用一個類似轉輪的物理裝置來模擬雨聲,挺有意思的。


搜了一下還真有:
http://dafx04.na.infn.it/WebProc/Proc/P_169.pdf?
http://www.diva-portal.org/smash/get/diva2:19156/FULLTEXT01.pdf

第二個鏈接里提供了一些關鍵部分的代碼。

但是,總是有個但是。

一般生活中很少能夠單純聽到雨聲。一般都混合有其他聲音,比如風聲,樹葉聲,水流聲,等等。僅僅合成雨聲是不能給人真實感的。


問題:可以用演算法來機器模擬雨聲嗎?
回答:是一個比登天還要難得問題。比模擬湍流要難多少倍!
注意,我們說的是計算機模擬,不是計算機動畫。你可以很快做一個賽車的遊戲,但是要模擬一輛賽車和另一輛賽車的碰撞,是一個世界上還不可能做到的工程難題。注意,這裡有兩個人體。(我有十幾年的LS-DYNA經驗,不要告訴我怎麼建模,現在辦不到)。
那麼,模擬雨聲我們要做什麼呢?
(1)一個水滴落下時在空中的形狀。(EASY, OK。GO ON!)
(2)地面上有一層水的模型。(NO PROBLEM!)
(3)水滴入水面並且碰到地面的濺落運動。
(4)由於水滴濺落運動而激發的聲音。
(5)聲音在空間的傳播。
(6)這個傳播空間是受到無數運動的水滴的干擾。
(6)在傳播的聲場中,無數的水滴的聲音互相干擾,疊加。
(7)水面上無數的水波干涉,折射。
(8)肯定我丟了很多,,,請補充吧!


我最近在入門MIDI製作,大致知道一些電子聲音合成的方法,底下列出,技術先進程度大致從低到高:

FM調頻合成:最原始的一種方法,直接用函數對波進行調製從而發聲,此乃數十年前的技術,是後面技術的基礎。缺點很明顯,幾乎無法模擬出真實聲音。(硬體設備方法)

波表合成:MIDI類音樂合成的思想,就是把那些預先調製好的聲音存儲起來,通過信號來提取聲音,這樣把調製的過程預先封裝了。(軟、硬設備方法)

軟音源合成:軟音源合成的音源可以是波表(人工調製音色),也可以是真實樂器錄好的(注意,一般會錄很多遍,減少重複感,那一段雨聲假如採樣得足夠多,就足以通過rain軟音源編製出幾乎真實的下雨效果) (軟體方法)

物理模型合成:這個是人工音源運用了FM調頻的思想,把一段音質拆分成好多參數(玩過vocaloid的人知道每個音節都有十幾個發音參數),通過調控參數來達到模擬的效果。(這裡的參數也可以封裝成軟音源的控制器參數。) (軟體方法)

粒子合成:這個多用於傳統樂器的模擬,方法是:建模出樂器的樣子,然後用空氣動力學和粒子模擬等方法,完全模擬出現實中演奏樂器時空氣流的運動和樂器體的振動,這樣達到的模擬度非常高。我想,雨聲應該不會比器樂難模擬。此技術處於學術階段,還沒用到普通軟體里。

這裡面每一種合成方式都有運用到數學或物理演算法(除了對實際雨聲採樣的步驟)


從頻譜分析的角度理解,下雨是多種頻率的雨滴落地(or撞擊物體)的聲音的總和。可以近似考慮成白雜訊譜,對下雨聲音的模仿,關鍵在於通過軟體模擬出下雨的聲譜,之後生成音頻就好了。


try this: http://mynoise.net/noiseMachines.php


這幾年siggraph上有很多根據模擬結果來生成聲音的研究...
有興趣可以搜索Physics-Based Sound Rendering for Computer Animation


用簡單的神經網路模擬,三層的就可以


rainymood裡面的雨聲不長,它只是一段聲音循環的,所以可以是錄得真實雨聲


推薦閱讀:

關於pokemon go遊戲有沒有可能對國家帶來危險?
NASA 有幾次任務失敗是因為程序里的 bug?
小白用戶如何保證自己電腦不受木馬,病毒攻擊,如何清理自己的電腦?
有哪些好用免費的多人協同辦公軟體可推薦?
怎樣用好電腦?

TAG:軟體 | 演算法 | 計算機科學 | Z-Blog | 音樂技術 |