日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python 颤音_自成一派,这个作曲大师确实名副其实!

發(fā)布時(shí)間:2025/3/20 python 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 颤音_自成一派,这个作曲大师确实名副其实! 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

AWS DeepComposer 是一項(xiàng)教育型的 AWS 服務(wù),可以訓(xùn)練出生成式人工智能,并利用 GAN(Generative Adversarial Network)轉(zhuǎn)換輸入的旋律,創(chuàng)作出完整的原創(chuàng)樂曲。

簡(jiǎn)單來說,借助 AWS DeepComposer,我們可以使用預(yù)先訓(xùn)練好的音樂流派模型(如爵士、搖滾、流行、交響樂等)將我們提供的旋律轉(zhuǎn)換為相應(yīng)流派的曲子。那么當(dāng)你玩轉(zhuǎn)這個(gè)服務(wù)后,有沒有想過自己也「開宗立派」,通過一定的參數(shù)訓(xùn)練出自己的流派選項(xiàng)?

當(dāng)然可以!我們只需要將音樂數(shù)據(jù)文件存儲(chǔ)在 NumPy 對(duì)象中,隨后結(jié)合 GitHub 上的 Lab 2—— 訓(xùn)練一套自定義 GAN 模型中的訓(xùn)練步驟進(jìn)行操作即可。下文將介紹如何將 MIDI 文件轉(zhuǎn)換為適用于 AWS Deepomposer 的格式,而訓(xùn)練出自己的流派模型。

在下文中,我們可以使用自己的 MIDI 文件訓(xùn)練出雷鬼音樂流派模型。雷鬼音樂誕生于牙買加島,常用樂器包括低音吉他、鼓以及各類打擊樂器。不過本文介紹的方法也是通用的,大家完全可以借此訓(xùn)練任何其他音樂流派。

數(shù)據(jù)處理:生成訓(xùn)練數(shù)據(jù)

MIDI(.mid)文件是訓(xùn)練數(shù)據(jù)的最初始狀態(tài)。MIDI 文件由軟件生成(并讀取),文件中包括關(guān)于音符及聲音回放的數(shù)據(jù)。在數(shù)據(jù)處理過程中,我們需要將 MIDI 文件轉(zhuǎn)換為 NumPy 數(shù)組,并將其持久化保存成磁盤上的一個(gè)單獨(dú)的.npy 文件。下圖展示了數(shù)據(jù)的轉(zhuǎn)換過程:

盡管機(jī)器學(xué)習(xí)普遍使用.csv文件存儲(chǔ)數(shù)據(jù),但.npy文件是為加速訓(xùn)練過程中的讀取速度高度優(yōu)化的。.npy文件的最終形態(tài)應(yīng)為(x, 32, 128, 4),其含義分別為(樣本數(shù)量,每個(gè)樣本的時(shí)間步數(shù), 音高范圍, 樂器)。

若將 MIDI 文件轉(zhuǎn)換為適當(dāng)?shù)母袷?#xff0c;我們需要完成以下步驟:讀取 MIDI 文件以生成一個(gè) Multitrack 對(duì)象。

確定要使用的四條樂器音軌。

檢索各音軌中的 Pianoroll 矩陣,并將其調(diào)整為正確的格式。

將 Pianoroll 對(duì)象與給定的樂器相匹配,并將其存儲(chǔ)在.npy文件中。

讀取 MIDI 文件以生成一個(gè) Multitrack 對(duì)象

數(shù)據(jù)處理的第一步,是解析各 MIDI 文件并生成一個(gè) Multitrack 對(duì)象。下圖即為 Multitrack 對(duì)象的基本結(jié)構(gòu)。

這個(gè)過程用需要用到 Pypianoroll 庫,它以 Python 代碼實(shí)現(xiàn)讀取及寫入 MIDI 文件的功能。具體參見以下代碼:#init with beat resolution of 4

music_tracks = pypianoroll.Multitrack(beat_resolution=4)

#Load MIDI file using parse_midi

#returns Multitrack object containing Track objects

music_tracks.parse_midi(your_midi_file_directory + your_midi_filename)

music_tracks是一個(gè) Mulitrack 對(duì)象,包含一個(gè)從 MIDI 文件中讀取到的 Track 對(duì)象列表。每個(gè) Mulitrack 對(duì)象都包含速度(Tempo)、節(jié)拍(Downbeat)、節(jié)拍分辨率(Beat resolution)以及名稱(Name),具體如以下代碼所示:tracks: [FRETLSSS, ORGAN 2, CLAVINET, MUTED GTR, CLEAN GTR, VIBRAPHONE, DRUMS],

tempo: [120. 120. 120. ... 120. 120. 120.],

downbeat: [ True False False False False False False False False . . .

False False False False False False False False False False False False],

beat_resolution: 4,

name: “reggae1”

確定要使用的四條樂器音軌

如果要解析的 Mulitrack 對(duì)象中恰好包含四種樂器,則可以直接跳過此步驟。

我們之前解析的 Mulitrack 對(duì)象共包含7條樂器音軌(Fretless 電貝司、風(fēng)琴、豎笛、靜音電吉他、清音電吉他、顫音琴和鼓)。模型需要學(xué)習(xí)的樂器種類越多,訓(xùn)練時(shí)間就越長(zhǎng),成本自然也越高。有鑒于此,這里我們選擇的 GAN 只支持最多4種樂器。如果 MIDI 文件中的音軌包含4種以上樂器,請(qǐng)直接從所選擇的音樂流派中選擇最重要的4種樂器進(jìn)行模型訓(xùn)練。相應(yīng)的,如果樂器數(shù)量不足4種,則需要擴(kuò)充 MIDI 文件。樂器數(shù)量錯(cuò)誤會(huì)導(dǎo)致 NumPy 的形制出現(xiàn)錯(cuò)誤。

給定音軌上的每一種樂器都擁有自己的編號(hào)。編號(hào)由通用 MIDI 規(guī)范規(guī)定,相當(dāng)于樂器的唯一標(biāo)識(shí)符。以下代碼示例就用相關(guān)編號(hào)提取到鋼琴、風(fēng)琴、貝司以及吉他四種樂器:instrument1_program_numbers = [1,2,3,4,5,6,7,8] #Piano

instrument2_program_numbers = [17,18,19,20,21,22,23,24] #Organ

instrument3_program_numbers = [33,34,35,36,37,38,39,40] #Bass

instrument4_program_numbers = [25,26,27,28,29,30,31,32] #Guitar

if track.program in instrument1_program_numbers:

collection['Piano'].append(track)

elif track.program in instrument2_program_numbers:

collection['Organ'].append(track)

elif track.program in instrument3_program_numbers:

collection['Bass'].append(track)

elif track.program in instrument4_program_numbers:

collection['Guitar'].append(track)

檢索每條音軌中的 Pianoroll 矩陣,并將其調(diào)整為正確的格式

Multitrack 對(duì)象為每種樂器提供一個(gè) Track 對(duì)象。每個(gè) Track 對(duì)象中都包含一個(gè) Pianoroll 矩陣、一個(gè)編號(hào)、人個(gè)表示音軌是否為鼓的布爾值以及一個(gè)名稱。

以下代碼,為單一 Track 的具體示例:pianoroll:

[[0 0 0 ... 0 0 0]

[0 0 0 ... 0 0 0]

[0 0 0 ... 0 0 0]

...

[0 0 0 ... 0 0 0]

[0 0 0 ... 0 0 0]

[0 0 0 ... 0 0 0]],

program: 7,

is_drum: False,

name: CLAVINET

在訓(xùn)練當(dāng)中,單一 Pianoroll 對(duì)象應(yīng)具有32個(gè)離散的時(shí)間步長(zhǎng),代表一首歌曲的片段與128個(gè)音高。所選樂器音軌的 Pianoroll 對(duì)象的起始形態(tài)為(512,128),我們需要將其調(diào)整為正確的格式。每個(gè) Pianoroll 對(duì)象將重新調(diào)整為2個(gè)小節(jié)(32個(gè)時(shí)間步長(zhǎng))、音高為128。輸入以下代碼后,單一 Pianoroll 對(duì)象的最終形制為 (16, 32, 128):#loop through chosen tracks

for index, track in enumerate(chosen_tracks):

try:

#reshape pianoroll to 2 bar (i.e. 32 time step) chunks

track.pianoroll = track.pianoroll.reshape( -1, 32, 128)

#store reshaped pianoroll per instrument

reshaped_piano_roll_dict = store_track(track, reshaped_piano_roll_dict)

except Exception as e:

print("ERROR!!!!!----> Skipping track # ", index, " with error ", e)

為了簡(jiǎn)潔起見,以下代碼示例僅顯示鋼琴音軌的制作示例:{'Piano': [Track(pianoroll=array([[[0, 0, 0, ..., 0, 0, 0],

[0, 0, 0, ..., 0, 0, 0],

[0, 0, 0, ..., 0, 0, 0],

...,

[0, 0, 0, ..., 0, 0, 0],

[0, 0, 0, ..., 0, 0, 0],

[0, 0, 0, ..., 0, 0, 0]],

...,

[0, 0, 0, ..., 0, 0, 0],

[0, 0, 0, ..., 0, 0, 0],

[0, 0, 0, ..., 0, 0, 0]]], dtype=uint8), program=7, is_drum=False, name=CLAVINET)]

將 Pianoroll 對(duì)象與給定樂器相匹配,并將其存儲(chǔ)在.npy 文件中。

下一步是按樂器將所有音軌連結(jié)起來,并將其存儲(chǔ)在.npy 訓(xùn)練文件當(dāng)中。我們可以將這個(gè)過程理解為各 Pianoroll 對(duì)象間的彼此堆疊。我們需要為4種所選樂器分別重復(fù)這個(gè)過程,具體請(qǐng)參見以下代碼:def get_merged(music_tracks, filename):

...

#will hold all merged instrument tracks

merge_piano_roll_list = []

for instrument in reshaped_piano_roll_dict:

try:

merged_pianorolls = np.empty(shape=(0,32,128))

#concatenate/stack all tracks for a single instrument

if len(reshaped_piano_roll_dict[instrument]) > 0:

if reshaped_piano_roll_dict[instrument]:

merged_pianorolls = np.stack([track.pianoroll for track in reshaped_piano_roll_dict[instrument]], -1)

merged_pianorolls = merged_pianorolls[:, :, :, 0]

merged_piano_rolls = np.any(merged_pianorolls, axis=0)

merge_piano_roll_list.append(merged_piano_rolls)

except Exception as e:

print("ERROR!!!!!----> Cannot concatenate/merge track for instrument", instrument, " with error ", e)

merge_piano_roll_list = np.stack([track for track in merge_piano_roll_list], -1)

return merge_piano_roll_list.reshape(-1,32,128,4)

現(xiàn)在,我們將合并后的 Pianoroll 存儲(chǔ)在.npy 文件當(dāng)中,詳見以下代碼:#holds final reshaped tracks that will be saved to training .npy file

track_list = np.empty(shape=(0,32,128,4))

. . .

#merge pianoroll objects by instrument

merged_tracks_to_add_to_training_file = get_merged(music_tracks, filename)

#concatenate merged pianoroll objects to final training data track list

track_list = np.concatenate((merged_tracks_to_add_to_training_file, track_list))

# binarize data

track_list[track_list == 0] = -1

track_list[track_list >= 0] = 1

#save the training data to reggae-train.npy

save(train_dir + '/reggae-train.npy', np.array(track_list))

結(jié)果

以上代碼將一組存儲(chǔ)在 your_midi_file_directory 中的 MIDI 文件生成 reggae-train.npy。相應(yīng) Jupyter notebook 與完整代碼可通過GitHub repo獲取。

現(xiàn)在,我們已經(jīng)擁有了訓(xùn)練數(shù)據(jù)文件,接下來就可以根據(jù) AWS DeepComposer 示例 notebook 中 Lab 2—— 訓(xùn)練自定義 GAN 模型提出的步驟訓(xùn)練自定義音樂流派模型。

本文在 SoundCloud 上提供兩個(gè)由 AI 生成的雷鬼風(fēng)格音軌:Summer Breeze 與 Mellow Vibe。

技巧與秘訣

我們可以使用以下技巧與秘訣理解你的數(shù)據(jù)內(nèi)容,并生成更悅耳的 AI 樂曲。

在 GarageBand 中查看及收聽 MIDI 文件

如果你使用 Mac 設(shè)備,可以使用 GarageBand 收聽 MIDI 文件并查看其中使用的樂器。如果沒有 Mac 設(shè)備,則可使用任何其他支持 MIDI 文件的Digital Audio Workstation(DAW)。在通過 GarageBand 收聽 AI 生成的樂曲時(shí),音質(zhì)要明顯更好,甚至可以連接專業(yè)級(jí)揚(yáng)聲器以獲得極好的聽覺效果。

使用樂器編號(hào)更改伴奏的樂器

在運(yùn)行Lab 2—— 訓(xùn)練自定義 GAN 模型提供的推理代碼時(shí),大家可能會(huì)注意到,所有由 AI 生成的音軌都會(huì)在 GarageBand 中顯示為“Steinway Grand Piano”。如果熟悉 AWS DeepComposer 控制臺(tái),則可隨時(shí)調(diào)整樂器種類。要在訓(xùn)練自定義模型時(shí)更改伴奏的樂器種類,請(qǐng)?jiān)谡{(diào)用midi_utils中的save_pianoroll_as_midi函數(shù)時(shí)使用programs參數(shù),具體請(qǐng)見以下代碼:#use programs to provide the program numbers for the instruments I care about

#17 = Drawbar Organ, 28 = Electric Guitar, 27 = Electric Guitar, 11 = Music Box

midi_utils.save_pianoroll_as_midi(fake_sample_x[:4], programs=[17, 28, 27, 11], destination_path=destination_path)

使用 GarageBand 添加其他伴奏

在使用AI生成一首樂曲(帶伴奏)之后,我們可以使用GarageBand(或者其他類似的工具)進(jìn)一步添加更多伴奏。我們可以調(diào)整音軌的速度,甚至讓某些樂器靜音。我們也可以添加任意數(shù)量的其他伴奏樂器以創(chuàng)造出獨(dú)特的聲音表現(xiàn)。

在 AWS DeepComposer 控制臺(tái)上創(chuàng)建推理旋律

在運(yùn)行推理時(shí),我們需要一段 MIDI 格式的自定義旋律。我們還可以添加伴奏樂器配合該自定義旋律生成一首獨(dú)特的樂曲。在訓(xùn)練自定義模型時(shí),最簡(jiǎn)單的旋律創(chuàng)建方法就是使用 AWS DeepComposer 控制臺(tái)。我們可以使用虛擬鍵盤或者 AWS DeepComposer 鍵盤記錄下旋律,而后選擇“Download”將其下載為 MIDI 文件。

使用 Matplotlib 繪制 Pianoroll

大家可以使用 Track 上的 Plot 函數(shù)繪制 Pianoroll 對(duì)象,這樣就能直觀查看 Pianoroll 對(duì)象了。具體請(qǐng)參見以下代碼:import matplotlib.pyplot as plt

...

fig, ax = track.plot()

plt.show()

下圖所示,為 Pianoroll 對(duì)象的基本觀感。

數(shù)據(jù)二值化

代碼包含了一段對(duì)數(shù)據(jù)進(jìn)行二進(jìn)制化的部分。這項(xiàng)更新非常重要,因?yàn)樵谔幚矶M(jìn)制化輸入時(shí),該模型實(shí)際處理的是-1與1(而非0與1)。Track_list中包含最終訓(xùn)練數(shù)據(jù),在繼續(xù)使用 Reggae-train.npy之前,應(yīng)將其設(shè)置為-1或者1。具體請(qǐng)參見以下代碼:# binarize data

track_list[track_list == 0] = -1

track_list[track_list >= 0] = 1

總結(jié)

AWS DeepComposer 不只是一款普通的鍵盤,同時(shí)也是一種有趣的互動(dòng)方式,幫助我們了解生成式的 AI 與 GAN 的復(fù)雜性。我們可以在它的幫助下學(xué)習(xí)演奏簡(jiǎn)單的旋律,甚至可能激發(fā)出創(chuàng)作全新樂曲的靈感、訓(xùn)練出自己的自定義音樂流派模型、最終創(chuàng)造出前所未有的聲音。我們也可以將兩種流派融合起來以創(chuàng)造出新的音樂類型!

總結(jié)

以上是生活随笔為你收集整理的python 颤音_自成一派,这个作曲大师确实名副其实!的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。