Från labbet

Lo-Fi musikkompositör med maskininlärning

Genom att utforska den underbara och ständigt växande världen av maskininlärning så byggde vi en musikkompositör som ger oss en glimt av framtiden – och det ser spännande ut.

Tech used

  • Python
  • Google Magenta
  • Tensorflow
  • Javascript
  • Tone.js
  • MIDI

Bakgrund

Idén till Lo-Fi musikkompositör med maskininlärning kom vi på under Prototyphelgen (helgen innan Prototypveckan drar igång), när en så kallad ljud-till-MIDI-omvandlare användes på en av utvecklarnas egna låtar. Trots att det inte var helt felfritt så var ändå själva huvudtemat och melodin från originalmusiken intakt, vilket ledde till att vi undersökte möjligheterna att generera musik med djupinlärning. Grundtanken var att ta en enkel form av musik som lätt kan omvandlas från ljud till MIDI-spår, träna ML-modeller på MIDI-informationen och sedan låta dem spela något liknande i en oändlig loop.

Processen och Utmaningar

Den första utmaningen som vi stötte på var föga förväntad – datainsamling och normalisering. Vi insåg nästan omgående att konceptet med ljud-till-MIDI-omvandling var för komplext och att lo-fi jazz och hiphop-beats skulle vara lättare att samla in, sätta ihop, och normalisera. När det var fastställt så använde vi Googles Magenta-projekt för att normalisera MIDI- eller MusicXML dataset till NoteSequences, som vi sedan använde i modellerna för maskininlärningen.

En av de största utmaningarna i utvecklingen av konceptet var annars att få maskininlärningsmodellerna att generera musik som var både lyssningsbar och unik. Även om det först lät helt okej, så slutade det ofta med att det lät väldigt mycket som träningsdatan, vilket tyder på överanpassning. På grund av tidsbegränsningar så var vi dock tvungna att jobba vidare och skiftade istället fokus till att sätta ihop något som kunde producera goda övergripande resultat. Vi bestämde oss för att ha flera modeller som genererade musikmönster där varje modell var ansvarig för sitt eget instrument. Men träningsdatan hade inte förberetts tillräckligt för detta, så fokus lades på pianot medan basen och trummorna spelades i en fördefinierad loop i ett stadigt tempo.

Resultat

Även om det slutliga resultatet inte nödvändigtvis representerade den ursprungliga idén var vi fortfarande nöjda med vad vi hade uppnått. Musikkompositören kunde spela helt okej musik, om än lite långsamt. Det var ett roligt sätt att utforska olika scenarier där maskininlärning kan användas för att komponera musik – även om vi säkert kan använda en något annorlunda metod nästa gång, så var projektet en värdefull, stimulerande, och lärorik upplevelse.




Med mer tid och resurser kan ett projekt som detta absolut förbättras. Med en större datamängd, noggrant tränade modeller och mer finjustering, kan det verkligen bli något bra och användbart. Och om inte, så kan det åtminstone tjäna som en grund för andra innovationer inom området för maskininlärning och musikkomposition.