例項分享:深度學習與音樂製作的碰撞能產生怎樣的火花?

人工智慧頻道發表於2018-11-06

很長一段時間以來,我一直希望將我對音樂的熱情與我在人工智慧方面的工作結合起來。但我一直再拖延。我覺得我需要先提高我的音樂製作技巧,然後再嘗試深度學習這個過程。

例項分享:深度學習與音樂製作的碰撞能產生怎樣的火花?


由Nuevo.Studio設計的NeuralFunk的封面(http://nuevo.studio)

但是在9月中旬,我看到在今年的神經資訊處理系統(NIPS)會議上(http://nips4creativity.com),將召開另一個關於創造和設計機器學習的研討會,這可能是AI社群每年最大的活動。藝術品和音樂的提交截止日期是10月底。

這一切激勵使我終於擺脫困境,停止找藉口,開始做點什麼。

NeuralFunk,一個完全基於樣本追蹤,其中所有樣本都是由深度神經網路生成的。(https://soundcloud.com/taktilednb/neuralfunk?utm_source=soundcloud&utm_campaign=wtshare&utm_medium=Twitter&utm_content=https%3A//soundcloud.com/taktilednb/neuralfunk)

它並沒有像我原先想要的那樣完全變成典型的Neurofunk音軌,而是發展成為非常獨特的音樂。它是由黑暗,混亂和疲憊組成的,幾乎讓聽眾窒息,沒有時間休息和呼吸。NeuralFunk與其生成方式一樣具有實驗性。

下面我想告訴你這個專案是如何產生的,從深度學習和音樂製作的角度。

如果你只對其中一個方面感興趣,請隨意跳過其他部分。我還將分享一些程式碼和生成的示例的連結。

NeuralFunk的起源

我最初進入電子音樂製作是通過手指擊鼓(https://www.instagram.com/p/BnvYsyjBat-/?taken-by=mffrenzel)進行的,這仍然是我作為一個製作人的主要定義。所以我結合深度學習和音樂的第一個想法實際上是完全不同的。

我不打算製作完整的曲目,甚至不會產生任何音訊。相反,我在想現場表演的有趣想法。具體來說,我正在考慮一個可以確定音訊樣本之間相似性的系統,這樣我就可以自動交換其他類似聲音。

舉個簡單的例子:我可能會有一種特殊的小鼓聲,但是我想用類似但稍微不同的聲音取而代之。

在更實驗性的環境中,我可能想要在場地上錄製我的觀眾或隨機聲音場景,然後自動從中提取聲音以替換我正在使用的實際樣本。通過這種方式,我可以逐漸從完全基於精心製作和手動挑選的樣本的音軌轉變為更有機和隨機的東西,甚至可能有觀眾的互動,仍然可以保持其原始的音質。

除了是一個很酷的效能工具外,找到類似樣本的好方法也可以在生產過程中提供很多幫助。幾乎每個製作人都知道在不斷增長的庫中找到正確的樣本是多麼痛苦和耗時的過程,這些過程通常分佈在許多隨機目錄和巢狀子目錄中。

一年多以前,當我向Makoto談到這個想法時,他非常友好地給了我一個大量的樣本庫。稍微擺弄了一下之後,我又回到了我最初專注於音樂製作的本身。

但現在我有充分的理由最終快速完成任務:NIPS研討會截止日期。

但是,我得出的結論是,鑑於我這個專案只有一個月的時間,我原來的想法是不可實現的。深度學習部分不會成為問題,但為現場表演制定後端並制定有趣的列行程式會花費更多時間,特別是因為我在Max for Live(https://www.ableton.com/en/live/max-for-live/)(或任何其他開發環境中沒有太多經驗這可能適用於此)。

相反,我決定製作一首曲目。

我的主要風格是Drum&Bass。而Neurofunk的子流派,因其名稱也是歌曲標題的靈感來源,看起來就像是是完美的搭配。

Neurofunk是Drum&Bass的一種黑暗而激烈的亞流派。除此之外,它的特點是非常複雜的聲音設計,尤其是低音線。有關這方面的最新例子,請檢視Document One在"LSD"中從0:44左右開始的低音。(https://youtu.be/F8cq83rkeGQ)對於更多"傳統",請檢視InsideInfo和Mefjus的"脈動"。(https://youtu.be/0tg2F9QESiE)

這種複雜的聲音設計似乎與我使用神經網路的目的相符。然而,大多數Neurofunk製作人嚴重依賴複雜的波表或FM合成來精心塑造他們的聲音。完全基於樣本可能具有挑戰性。此外,Neurofunk往往非常精確和尖銳。這兩個屬性我不確定神經網路的方法能否給出。

不過,我還是接受了挑戰。而且,樣本只是一個起點。

雖然我設定了每個聲音必須來自神經網路生成的樣本的限制,但我沒有對我可以使用的效果或後處理設定任何限制,讓我有很大的自由來塑造聲音。

通過這種方式,我認為NeuralFunk與大多數其他AI輔助音樂生成方法不同。

在許多情況下,人們或者像在RNN中一樣(https://magenta.tensorflow.org/performance-rnn),讓AI模型通過MIDI生成來記錄序列,或者使用深度學習來合成特定樂器,例如NSynth。(https://magenta.tensorflow.org/nsynth)

通過深度學習來合成所有的聲音,然後從中產生一個音軌,這不是我到目前為止遇到的事情,儘管如果我是第一個這樣做的話我會感到非常驚訝。雖然這可能是第一個以這種方式建立的Drum&Bass音軌。

結果顯然不是AI製作的音樂。但它的音樂是用人工智慧作為聲音設計工具和探索新的創作表達方式而製作的。

深度學習階段

鑑於非常粗略的想法,下一步是弄清楚用什麼型別的網路來實際生成樣本。

我還不太清楚我要走的方向,我再次從Nao那裡得到了一些靈感。他有一個用於聲譜分類的iPython筆記本。(https://gist.github.com/naotokui/a2b331dd206b13a70800e862cfe7da3c)我對聲音分類不感興趣,但我認為一些預處理可能很有用,所以我開始嘗試使用它,將我庫中的一些樣本轉換成光譜圖。

這是專案NeuralFunk真正開始的時候,這張9月21日的Amen Break譜圖。

例項分享:深度學習與音樂製作的碰撞能產生怎樣的火花?


在那之後,我決定從實際的神經網路開始,一個好的(並且有點明顯的)地方是採用一個基本的WaveNet(https://deepmind.com/blog/wavenet-generative-model-raw-audio/),在我的樣本庫上訓練它,然後看看會發生什麼。

我開始收集來自不同樣本目錄的所有樣本。這主要是Makoto的樣本,以及我的Maschine 2 Library,以及擴充套件的Resonant Blaze(https://www.native-instruments.com/en/products/komplete/expansions/resonant-blaze/),Prospect Haze(https://www.native-instruments.com/en/products/komplete/expansions/prospect-haze/)和Decoded Forms(https://www.native-instruments.com/en/products/komplete/expansions/decoded-forms/)(所有這些都是強烈推薦的)。我非常感謝本地工具,因為他們將樣本作為wav檔案直接提供,而不是深藏在軟體中。

然後我將它們全部轉換為16kHz,然後把超過10秒的任何音訊都剪下掉。有一些較長的迴圈和整個音軌和莖,但我決定忽略那些。

最後我有大約62,000個樣本(雖然我後來注意到我可能已經有更多了,因為我的自動搜尋僅尋找與".wav"和".aiff"的完全匹配,這錯過了很多,如".WAV",".aif"等)。

接下來,我採用了Wavenet的TensorFlow(https://github.com/ibab/tensorflow-wavenet),並簡單地訓練了該資料。考慮到資料的巨大差異,我並不期待驚人的結果,但這是一個開始,值得嘗試。我確實最終得到了一些有趣的結果。儘管如預期的那樣,大多數都是(不是隨機的)噪音。

為了讓Wavenet更好地瞭解它應該生成什麼資料,我決定新增一個調節網路。

除了音訊檔案本身,我還建立並儲存了每個檔案前三秒的頻譜圖表示。我的初步計劃是新增一個完整的卷積編碼器網路,該網路將通過Wavenet進行端對端訓練,將頻譜圖作為附加輸入並將其壓縮到條件向量。

不幸的是,至少在我的快速實驗中,這被證明是一項艱鉅的任務,而Wavenet只是學會了在頻譜圖編碼器學習任何有用之前忽略條件向量。這似乎是太多強大的解碼器阻止編碼器學習的許多情況之一。(https://towardsdatascience.com/the-variational-autoencoder-as-a-two-player-game-part-iii-d8d56c301600)。

然而,在擺弄Wavenet的同時,我仍然沒有放棄我最初想要找到樣本之間相似性的想法。我的想法是,我可以使用Wavenet生成大量的隨機樣本,然後使用相似性搜尋來查詢接近我喜歡的特定參考聲音的聲音。

因此,為了使相似性搜尋起作用,我還編寫了一個在相同光譜圖上訓練的變分自動編碼器(VAE)。我可以使用生成的嵌入來簡單地通過比較潛在空間中的距離來進行相似性搜尋。

但這個模型實際上可以讓我做得更多。

我沒有使用Wavenet端到端地訓練編碼器,而是使用VAE的嵌入作為Wavenet的條件向量,從而獲得更好的結果。Wavenet現在顯然利用了條件反射資訊,它的輸出具有許多它所受到的聲音特徵。

但即便如此,我可以使用VAE的解碼器本身重建頻譜圖,然後使用Griffin-Lim演算法重新對映回音訊。

在這裡,一個模型允許我建立嵌入,我可以使用它來調節另一個模型,使我能夠進行高階語義搜尋,以及實際上自己生成新穎的聲音。

它也非常容易訓練,只需幾個小時就可以在我的iMac的CPU上進行融合。模型本身也很簡單。這實際上是我第一次從頭開始編寫一個反摺積網路,所以我很快就把它拼湊在了一起,但它似乎是可行的。

鑑於時間很短,我並不真正關心優化。一旦有所作為,我就繼續前進。我所做的一切都不嚴謹。我甚至懶得將我的資料拆分成單獨的測試或驗證集。

我新增到VAE的唯一一點點花哨的事情是一些標準化的流層。同樣,我的實驗遠不夠嚴格,但新增一些流動層似乎從質量上導致了總體上更好的結果。

我做了64維嵌入。但是使用TSNE,我可以將維度減小到2,以進行視覺化。

原始樣本沒有任何類別標籤,因此我使用檔名提取一些近似標籤,在名稱中查詢"kick"和"sfx"等單詞。結果出人意料的好。這裡是所有樣本的視覺化,這些樣本屬於我選擇的八個類別之一。

例項分享:深度學習與音樂製作的碰撞能產生怎樣的火花?


實際上我很驚訝群集的結果是如此之好,以及哪些群集與哪些群集相鄰。

我做了另一個視覺化,包括所有樣本(即檔名中沒有匹配標籤的樣本)。

例項分享:深度學習與音樂製作的碰撞能產生怎樣的火花?


結果不是那麼好,但這可能部分是因為我沒有時間或耐心來擺弄TSNE引數並且只取得了我得到的第一個結果。

可以在此處找到VAE的所有程式碼,以及一些預處理和其他隨機位。(https://github.com/maxfrenzel/SpectrogramVAE)

我沒有費心共享我的Wavenet程式碼,因為我嘗試過的所有更復雜的東西實際上都沒有用,而且真正起作用的東西實際上只是對原始實現的一個小修改(https://github.com/ibab/tensorflow-wavenet),它允許直接讀取和輸入預先計算嵌入來自".npy"檔案的向量並使用它們進行調節。

樣本生成階段

擁有所有模型後,我可以開始實際生成一些聲音。

首先是VAE和Griffin-Lim組合。它給了我三種產生聲音的方法。

最簡單的方法是對頻譜圖進行編碼,再次對其進行解碼,然後重建音訊。一個例子是這個clavinet樣本。我們可以看到基本頻率得到了很好的保留,但很多其他細節都得到了改變。

例項分享:深度學習與音樂製作的碰撞能產生怎樣的火花?


這聲嘟嘟聲是另一個好例子。同樣,基本頻率和整體輪廓被保留,但很多細節被改變或丟失。

例項分享:深度學習與音樂製作的碰撞能產生怎樣的火花?


第二種方法是實際組合兩個或多個嵌入,然後解碼生成的潛在程式碼。一個很好的例子,它實際上最終形成了一個主旋律元素是一種鼓聲和聲樂的組合。

例項分享:深度學習與音樂製作的碰撞能產生怎樣的火花?


結果是一個非常好的和諧的聲音,但開始時增加了一些有趣的subby,給出了一個很好的stabby合成聲音。

這是另一個例子,結合了三種不同的輸入。

例項分享:深度學習與音樂製作的碰撞能產生怎樣的火花?


生成的樣本是一個kick聲,就像其中一個輸入,但有很多有趣的角色來自hi-hat和tabla。

最後,我也可以在沒有任何輸入的情況下直接從潛在空間進行取樣。這導致了許多有趣的結果。

其中一些是明顯可識別的聲音型別,而另一些則更隨機和具有實驗性,但仍然可用作聲音效果。

例項分享:深度學習與音樂製作的碰撞能產生怎樣的火花?


我想說,在這一點上,我遵循了非常清晰而深思熟慮的聲音生成和設計過程。但考慮到時間有限,我實際上做的是編寫一個指令碼,選擇0到3之間的隨機數,然後從我的庫中隨機選擇輸入樣本,嵌入它們,將它們組合起來,並生成最終的音訊。

這樣我就生成了幾千個半隨機樣本。

我做的另一件小事就是給自己加上一點個人特徵,記錄下自己說的"Taktile"(我的藝術家名字)和"NeuralFunk",然後通過VAE解碼器和Wavenet執行這兩個樣本,以獲得兩個基於它們的樣本。

例項分享:深度學習與音樂製作的碰撞能產生怎樣的火花?


結果並沒有真正類似人聲,但是他們將它作為音效進入音軌(例如,第一個下降的技術聲音實際上是"Taktile"樣本之一)。

我對Wavenet幾乎採用了完全相同的方法。

選擇0到3之間的隨機數,隨機選擇預先計算的預處理嵌入數(或從高斯中取樣一個隨機數)並將它們組合成單個條件向量,然後讓Wavenet為每個嵌入生成32,000個樣本(2秒)。

我再次以這種方式生成了數百個隨機聲音片段。

有趣的是,Wavenet似乎理解了一般的聲音特性,而不是時間資訊。而且由於它訓練過完整的迴圈和節拍,它產生了一些非常有趣的輸出。

例如,給定單次一次性打擊聲作為條件作用,結果有時實際上是包括相似型別的打擊聲的完整節拍。

如果我繼續研究這個問題,我可能想要嘗試的一件事就是不對整個頻譜圖進行編碼並將其用作全域性調節,而是對各個時間片進行編碼,然後將它們作為區域性調節方式饋送到Wavenet以獲得對它的聲音的時間方面的更多控制。

但就目前而言,我仍然有很多有趣的樣本可供使用。

你可以在此處下載所有示例。(https://www.dropbox.com/s/vo5s1iq5eqyxxcm/Generated%20Samples.zip?dl=0)zip檔案內部分別是對應於Wavenet和VAE樣本的兩個目錄。

對於VAE,以"random"開頭的檔名是基於我庫中隨機樣本的檔案。以"取樣"開頭的那些直接從在潛在空間中取樣的程式碼解碼。對於每個音訊檔案,我還包括一個輸出頻譜圖的png,以及輸入頻譜圖(如果有任何輸入)。

Wavenet目錄包含四個對應於四個不同模型的子目錄。 "generated_1"和"generated_2"是無條件模型,而"generated_emb2"和"generated_emb_big2"是條件模型(末尾的數字指的是我訓練它們的批量大小)。

對於有條件的檔案,檔名包含它所處理的原始檔案。例如。 "generated_emb_big2"中的"emb2_13727-StylusBD08 023_9519-Kick JunkieXL 3.wav"以兩個檔案"StylusBD08 023"和"Kick JunkieXL 3"(其他數字指我自己的內部索引系統)為條件。

例項分享:深度學習與音樂製作的碰撞能產生怎樣的火花?


你可以以任何你想要的方式使用這些樣本。如果你想出一些很酷的東西,我很樂意聽到它!

生產階段

在生成了數千個樣本之後,終於有了時間來製作並將它們變成類似於音樂的東西。

例項分享:深度學習與音樂製作的碰撞能產生怎樣的火花?


雖然我最近開始更多地瞭解Ableton Live,但我決定在Native Instrument的Maschine中做這個專案,因為這仍然是我迄今為止最舒服和最熟悉的DAW。我只是偶爾切換到Live,因為它是令人驚奇的變形工具。

最初的生產階段非常痛苦。儘管我將我的VAE作為相似性搜尋工具,但它目前的版本有許多缺點,這使得它對這項任務毫無用處。例如,它只考慮樣本的開頭。但特別是在Wavenet的情況下,檔案中經常會有更多有趣的部分被埋沒。

出於這個原因,我實際上不得不手動瀏覽所有樣本並找到有趣的聲音。這花了我兩個整個晚上,我花了好幾個小時來把我發現的有趣的聲音放入我粗略按聲音型別排序的組中,即打擊樂,旋律,SFX和低音。然後,我進一步通過鼓組並按鼓聲型別對每個樣本進行顏色編碼,例如紅色為kick,綠色為snare,等等。

例項分享:深度學習與音樂製作的碰撞能產生怎樣的火花?


最後,我將所有kicks,snares和hats複製到不同的組中,以便稍後我可以一起處理它們。

最後,我有超過20個不同的小組,每個小組有16個樣本,總共超過320個樣本,我覺得很有趣。

但到目前為止,這遠不是繁瑣的預處理的結束......正如我所提到的,有趣的聲音通常不在樣本的開頭。我必須把我真正想要的部分分離出來。

例項分享:深度學習與音樂製作的碰撞能產生怎樣的火花?


還有相當多的樣本,特別是VAE產生的樣本,有一些令人不快的高頻噪聲,所以我應用了一些低通濾波器來消除它。

最後,為了在一致的鍵中寫入音軌,在這種情況下(主要是F minor),我不得不通過每個音調移位來調整旋律樣本。

有了這一切,經過幾個小時,基本的準備和預處理終於完成了,我可以開始製作音樂了。

我做的第一件事就是佈置Amen Break(https://en.wikipedia.org/wiki/Amen_break)。但是我也想對它進行重新取樣,這樣我就可以把它弄零散。

結果是一個相當不錯的聲音Amen Break(除了最後一個糟糕的聲音鈸)。對於附帶的影像,我認為通過DeepDream執行原始的"Amen,Brother"封面會很不錯。

點選此處來聽它(https://www.instagram.com/p/Bo9ATWbhCbQ/)。不幸的是Instagram嵌入似乎沒有工作,所以我只是連結到它。

例項分享:深度學習與音樂製作的碰撞能產生怎樣的火花?


我試著放下一些鼓,但聽不到任何好的聲音。然後我想可能從一些旋律的東西開始。或者低音。但無論我試圖在哪裡開始,我都無法得到任何像樣的東西。

我早期嘗試更多聲音設計,為樣本新增濾鏡,效果和調製,聽起來也很糟糕。

在接下來的幾天裡,我做了很多微調,並在介紹中新增了其他元素。但每當我試圖超越它時,我都會再次陷入困境。

幸運的是,我的好友D.A.V.E.當我告訴他關於這個專案時,他立即提出要合作。

D.A.V.E.他不僅是一位出色的DJ和製作人,而且他也是一位優秀的老師,他在這條道路上給了我很多幫助。我強烈建你去看看他的作品。(https://www.digitalandvinylexpert.com)

他提出了一些合成器部分,說實話,一開始聽我真的覺得有點討厭,但後來我完全被吸引了並且經過一些修改變成了我最喜歡的元素之一。

這是合作的一個非常酷的事情。即使你並不總是完全喜歡或贊同你的合作者所做的事情,它也會給你新的想法並幫助你擺脫困境。你可以修改它並使它成為你自己的,並最終得出一些你自己從來沒有想過的成品。

在接下來的幾天裡,我們來回瞭解專案的最新訊息。事實上,我們處於完全不同的時區(D.A.V.E.在倫敦,我在東京)實際上非常有助於協調事情。在工作之後的晚上(我的時間),我們會快速調整並談論想法,然後我會在音軌上工作幾個小時。在晚上結束時,我會把他的最新版本寄給他,當我第二天早上起床時,他又給我發了一些新的想法。

最終,在大約一週的時間裡,NeuralFunk成長為現在的樣子。這並不是我在開始這個專案時所設想的那種神奇的音軌,但無論如何它總是具有實踐性的。

以下是Maschine的(幾乎)最終安排。這絕對是一個Maschine專案,擁有我所做過的最不同的團體和模式。

例項分享:深度學習與音樂製作的碰撞能產生怎樣的火花?


有很多事我想改變或改進,特別是低音和其他低頻元素相當混亂,但根本沒有時間。

所以最後我決定把它稱之為"完成",要觀看我即興創作的視訊,請點選此處(https://www.instagram.com/p/BpUHNzihncV)。

例項分享:深度學習與音樂製作的碰撞能產生怎樣的火花?


總的來說,我認為該專案非常有趣。老實說,我完全滿意的唯一部分是介紹,如果有更多的時間,我可能會廢棄很多東西並重做它,但考慮到時間限制以及樣本本身的實驗性質,我認為結果也不算太糟糕。

我還有很多方向。其中一些我已經在上面提到了,但我還有更多的想法。

例如,我想改進VAE中的編碼器/解碼器架構,從一個簡單的卷積網路處理譜圖,就像處理任何其他影像一樣,到考慮了沿兩個軸的不同資訊的東西。

我還在考慮回到我原來的想法,並將相似性搜尋(甚至可能是樣本生成)整合到一些有趣的現場表演工具中。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31545819/viewspace-2218854/,如需轉載,請註明出處,否則將追究法律責任。

相關文章