Passa al contenuto principale

Come creare musica usando l'intelligenza artificiale e l'apprendimento automatico



Impara a creare musica con intelligenza artificiale! Reti neurali ricorrenti per la creazione di musica!

File di dati MAESTRO e Wave2Midi2Wave
Dopo aver esaminato queste fonti, ho trovato un documento di ricerca che introduce un nuovo set di dati chiamato MAESTRO (che sta per MIDI e Audio Edited for Synchronous TRacks and Organization). Progetta anche la nuova architettura Wave2Midi2Wave, che fondamentalmente combina tre algoritmi all'avanguardia e li forma insieme in un file di dati MAESTRO.

Il MIDI è fondamentalmente uno standard tecnico che include molti protocolli per computer con diversi tipi di dispositivi audio. Ciò è utile perché le informazioni trasmesse includono informazioni su tono, tonalità, velocità e tempo.

Il motivo principale per cui questo nuovo set di dati è così importante è che contiene molti più dati rispetto a qualsiasi set di dati precedente. Per metterlo in prospettiva, il file di dati MAESTRO contiene 172 ore di trascrizioni audio e MIDI. Il file di dati MAPS contiene solo 17,9 ore e il file di dati MusicNet solo 15,3 ore.

Come accennato in precedenza, Wave2Midi2Wave è fondamentalmente una combinazione di tre diversi modelli all'avanguardia e ciascuno svolge un compito diverso. Innanzitutto, Wave2Midi viene utilizzato per tradurre il suono in una rappresentazione simbolica (MIDI). Quindi parte della rete Midi crea nuovi contenuti. Tutto questo è sintetizzato da Midi2Wave per produrre un suono realistico.

La prima rete di Wave2Midi2Wave utilizza un'architettura all'avanguardia chiamata Onsets and Frames, che converte automaticamente le tue registrazioni in note rappresentate nel MIDI. Quindi, se stavi improvvisando, potresti sapere esattamente cosa stavi suonando!

Usando CNN e LSTM, gli scienziati sono stati in grado di "prevedere l'inizio del pitch e quindi utilizzare queste previsioni per regolare le previsioni del pitch del frame". Ciò significa essenzialmente che una rete neurale nel modello viene utilizzata per prevedere quando viene suonata una nota (cioè l'insorgenza). E un'altra rete neurale prevede per quanto tempo viene suonata una nota (ogni fotogramma attivo).

Midi: Music Transformer
Per la seconda rete in Wave2Midi2Wave, viene utilizzato un tipo speciale di trasformatore per generare sequenze musicali nuovissime con coerenza a lungo termine. L'output di rete ha un senso molto più strutturale rispetto ad altre reti neurali.

In un trasformatore convenzionale, l'attenzione è rivolta alla modellizzazione delle relazioni tra le parole, perché nelle frasi il significato di una parola si basa non solo sulle parole che l'hanno preceduta, ma sul contesto dell'intera frase.
I trasformatori aggregano informazioni da tutte le altre parti della rete e generano una rappresentazione per ogni parola in base all'intero contesto. Questo processo si ripete in modo che ogni parola generi nuove rappresentazioni.

Il punto è che possiamo usare i trasformatori per assegnare informazioni a diversi pezzi di dati in base al contesto dell'intera rete. Ritorniamo al tema della generazione musicale.
Un problema con il trasformatore originale è che si basa su posizioni assolute per la propria attenzione. Quando si applica alla musica, i Transformer lottano con le distanze, l'ordine e la ripetizione. Usando la relativa attenzione, il modello di trasformazione musicale può concentrarsi su elementi relazionali e generare sequenze oltre a quanto mostrato negli esempi di addestramento.

Midi2Wave: WaveNet
L'ultima parte della rete prende il modello WaveNet e lo addestra in un set di dati di generazione musicale che suona letteralmente come una registrazione. WaveNet è un'architettura modello basata su PixelCNN ed è specializzata nella sintesi audio.
L'architettura utilizza livelli convoluzionali. Poiché i thread non utilizzano connessioni ricorrenti come in RNN, ciò significa che in genere è molto più facile da addestrare rispetto a RNN. Un problema, tuttavia, è che tonnellate di strati o filtri super-grandi sono necessari per aumentare il campo percettivo (la quantità di dati che un modello può coprire), il che aumenta i costi di calcolo.

I thread di espansione vengono utilizzati per bypassare. Ciò significa sostanzialmente che i filtri possono essere applicati su un'area più ampia se determinati valori di input vengono ignorati. Otterrai quasi lo stesso effetto di un filtro più grande se lo hai esteso con zeri, ma è molto più efficiente.

La formazione WaveNet, il modello più moderno per la sintesi vocale, sul set di dati MAESTRO porta alcuni risultati piuttosto incredibili con i quali gradualmente introdurrò esempi specifici.

Komentáře

Post popolari di questo blog

Rokytnice nad Jizerou, Lysa hora

Rokytnice nad Jizerou (in tedesco Rochlitz an der Iser) è una città e una località montana dei Monti dei Giganti occidentali. Si trova nella regione di Liberec, nel distretto di Semily, nella valle allungata del ruscello Huťský tra i massicci di Stráž (782 m), Čertova hora (1022 m) e Lysá hora (1344 m) e lungo la riva sinistra (orientale) del fiume Jizera. Ci vivono circa 2 abitanti.

Monti dei Giganti, Monti Jizera, Paradiso Boemo

Cari visitatori del server PetrPikora.com, le pagine dedicate ai Monti dei Giganti, ai Monti Jizera e al Paradiso Boemo sono ora disponibili sul nuovo dominio ceco PetrPikora.cz, grazie. Per un periodo di tempo limitato, i post più vecchi saranno disponibili su entrambi i domini contemporaneamente.

Calcolatrice semplice con codice Python

Questo semplice programma Python chiede all'utente di selezionare l'operazione desiderata. Le opzioni di selezione 1, 2, 3 e 4 sono valide. Vengono selezionati due numeri se ... elif ... else e la ramificazione viene utilizzata per eseguire una sezione specifica del programma. Le funzioni add (), subtract (), multiply () e divide () definite dall'utente eseguono le operazioni appropriate.
# Questa funzione aggiunge due numeri def add (x, y): return x + y # Questa funzione sottrae due numeri def subtract (x, y): return x - y # Questa funzione moltiplica due numeridef moltiplica ( x, y): return x * y # Questa funzione divide due numeridef divide (x, y): return x / y print ("Seleziona operazione.") print ("1.Add") print ("2.Subtract") stampa ("3.Multiply")