Labas, šiandien grosime MIDI failus terminale!

Aš nutariau pažvelgti į savo magistro darbą šviežiomis ausimis ir akimis. Jau po daugelio metų – daugiau nei septynių! Jau kaip patyręs programuotojas. Tuo metu kūriau muziką su rekursiniais neuroniniais tinklais – aido neuroniniais tinklais. Džiaugiuosi tuometine savo ambicija ir drąsa. Tačiau šiandien ne apie tai. Šiandien apie MIDI failų sugrojimą!

Tam mes naudojame FluidSynth programą.

Kas yra FluidSynth?

FluidSynth yra programinis sintezatorius (angl. software synthesizer), kuris skaito MIDI failus ir paverčia juos garsu naudodamas SoundFont (.sf2) garso bankus. SoundFont — tai failas, kuriame saugomi tikrų instrumentų garso pavyzdžiai (angl. samples). Kai FluidSynth gauna MIDI instrukciją, pavyzdžiui, “pagrok man do natą fortepijonu”, jis paima atitinkamą įrašytą do natos skambesį iš Soundfont failo ir mums sugroja.

Kaip įsidiegti FluidSynth?

Kadangi aš naudoju macOS operacinę sistemą, tad įsidiegiu FluidSynth naudojant Homebrew programą. Kaip įsidiegti kitose operacinėse sistemose, žiūrėkite FluidSynth čia.

brew install fluid-synth

Tikrinu ar sėkmingai

fluidsynth --version

Turėtume matyti kažką panašaus į tai

FluidSynth runtime version 2.5.3

Kaip parsisiųsti SoundFont garso banką?

Dabar mums trūksta tik SoundFont garso banko failo. Be jo FluidSynth neturės ką sugroti, nes jis tik groja, o pačių skambesių įrašų neturi.

Populiariausias nemokamas SoundFont yra FluidR3 GM, kuriame yra 128 standartiniai instrumentai: fortepijonas, gitara, smuikas, trimitai ir kiti.

Žemiau galime rasti rašmeną, kur parsiunčia mums SoundFont failą

mkdir -p ~/soundfonts  # Sukuria soundfonts aplanką vartotojo namų direktorijoje
curl -L -o ~/soundfonts/FluidR3_GM.zip "https://keymusician01.s3.amazonaws.com/FluidR3_GM.zip"  # Parsisiunčia archyvuotą SoundFont failą
unzip ~/soundfonts/FluidR3_GM.zip -d ~/soundfonts # Išarchyvuoja SoundFont failą iš archyvo

Tikrinam ar failas teisingas

file ~/soundfonts/FluidR3_GM.sf2

Matome, kad failas yra SoundFont/Bank formatas, todėl viskas gerai

FluidR3_GM.sf2: RIFF (little-endian) data, SoundFont/Bank

Grojimas

Štai ir viskas, ką reikėjo paruošti! Dabar paleisk savo MIDI failą:

fluidsynth -a coreaudio -ni ~/soundfonts/FluidR3_GM.sf2 tavo_failas.mid

Ką reiškia šie Fluidsynth parametrai?

  • -a coreaudio — naudoti macOS garso sistemą (angl. audio driver)
  • -ni — neinteraktyvus režimas (angl. non-interactive), t.y. programa gros failą ir baigs darbą
  • pirmas failas — SoundFont garso bankas
  • antras failas — tavo MIDI failas

Jeigu tiek ir reikėjo, tuomet sveikinu! Gali uždaryti šį puslapį ir mėgautis muzika. O jei nori sužinoti daugiau, skaityk toliau.

Papildomi parametrai

Garso stiprumas

Jei per tyliai arba per garsiai, naudok -g parametrą:

fluidsynth -a coreaudio -ni -g 2.0 ~/soundfonts/FluidR3_GM.sf2 tavo_failas.mid

Reikšmė 1.0 yra numatytoji, 2.0 yra dvigubai garsiau, o 0.5 yra dvigubai tyliau.

Interaktyvus režimas

Jei nori valdyti grojimą rankiniu būdu, paleisk be -ni:

fluidsynth -a coreaudio ~/soundfonts/FluidR3_GM.sf2 tavo_failas.mid

Tada galėsi naudoti FluidSynth konsolę su komandomis kaip player_stop, player_cont, quit ir kitomis.

Įrašymas į WAV failą

Nori konvertuoti MIDI į garso failą?

fluidsynth -ni -F rezultatas.wav ~/soundfonts/FluidR3_GM.sf2 tavo_failas.mid

Parametras -F nurodo išvesties failą. Taip gausi WAV formatą, kurį galėsi klausytis bet kuriame grotuve arba konvertuoti į MP3.

Jeigu nepavyko

Jeigu kažkas nesigauna ir gauname tokius rezultatus

  1. command not found: fluidsynth

Reiškia FluidSynth neįdiegtas. Įsitikrink, kad fluidsynth --version grąžina versiją, o ne klaidą. Pabandyk įdiegti Fluidsynth dar kartą brew install fluid-synth.

  1. expected RIFF chunk id

SoundFont failas sugadintas arba tai ne SF2 failas. Tikrinam su file ~/soundfonts/FluidR3_GM.sf2

  1. Negirdėti garso

Patikrink garso stiprumą sistemoje ir bandyk pagarsintu su -g 2.0.


Štai ir viskas, dabar galėsime groti MIDI failus iš terminalo iki kol kaimynai užpyks. Smagaus rokenrolo!


MIDI formato pradžia siekia 1983-uosius metus, kai Dave Smith ir Ikutaro Kakehashi sukūrė standartą, leidžiantį skirtingiems muzikos instrumentams „kalbėtis" tarpusavyje. Už šį darbą jie abu gavo techninį Grammy apdovanojimą 2013-aisiais. Įdomu, kad standartas beveik nepasikeitė per 40 metų — MIDI failai, sukurti praėjusio amžiaus devintajame dešimtmetyje, puikiai veikia ir šiandien.


Šaltiniai