Midi router neboli způsob, jak si o řád zvýšit kvalitu hudebních kláves

PhDr. Mgr. Jeroným Klimeš, Ph.D. 2018-02-15

Jak nás Yamaha odrbává a pije nám krev

Když si koupíte třeba klavír Yamaha Arius YDP-142 zjistíte časem, že je to opravdu hodně a hodně okuchaná verze pořádného klavíru. Yamaha umí vyrobit dobré nástroje, ale ty stojí okolo 100 000 Kč. Prodává proto uměle zhoršené nástroje, aby lidi donutila kupovat jejich dražší nástroje.

Se zvukem se většinou nic moc neudělá. Prostě když si koupíte něco, co má zvuk plechovky, tak posloucháte plechovku. Ale dají se dohnat ty vlastnosti keyboardu, které jsou otázkou MIDI. Například jednou ze základních funkcí kláves je split - levá ruka hraje basu a pravá klavír nebo vibrafon, nebo klavír s pomalými houslemi. To znamená, že při trochu cviku v rychlých partiích či krátkých notách hraje basa s klavírem a v dlouhých notách se naopak rozeznějí housle. To je dáno vlastností zvuku - housle mají pomalý nástup, v rychlých partiích nejsou slyšet. Naopak klavír rychle doznívá a po něm zůstává znít nosný zvuk houslí. Pozor, následující noty hraje jeden hráč, ale slyšíte sami, že to zní jako skupina.

Například u Ariusu máme klavír i housle, ale není basová kytara, takže by se hodilo místo basy použít nějaký z rejstríků, co zbyly, například el. piano či jazz organ. Jenže to si musíte napsat program, který split udělá za Yamahu, která vás o něj cíleně připravila. Tedy z Yamahy vysílate MIDI signály do počítače. Ten je trochu upraví a pošle je zpět.

Podobně v kapele občas potřebujeme exotický doprovodný nástroj jen pro ozdobu, který by hrála dcera na pomocné midi klávesy, které ale nemají pořádný zvuk, nebo nevydávají vůbec žádný zvuk, protože je to tzv. master keyboard. Tady narazíte u Yamahy na další problém. Své lépe znějící rejstříky má schované do různých bank a ne všechny keyboardy umějí vysílat MSB a LSB tak, aby zapnuly příslušnou banku a pak vybraly potřebný rejstřík či program. I zde je třeba mezi pomocné klávesy a Yamahu vložit počítač, který potřebné kódy upraví a přepošle do Yamahy. Schéma je asi následující:

Master Keyboard --> PC --> Yamaha

Yamaha (s vypnutým zvukem čili function Local off) --> PC (úprava v routeru a zpět do) -- > Yamaha

Můj starý Fatar neumí vysílat signály MSB a LSB, pouze změny programu. Yamaha, ale má schované zvuky svého dobrého klavíru v MSB=1, LSB=112, PRG=1. Jinými slovy tento zvuk nemohu pomocí Fataru vygenerovat, musím to poslat přes Mididings, který když uvidí PRG=1, tak pošle navíc i MSB=1, LSB=112. Prostě Yamaha dělá muzikantům nechutné naschvály - komplikuje jim život, aby z nich vyždímala peníze - místo symbiozy parazitismus.

Chvála Linuxu

Tolik obecný a universální úvod a nyní vám popíši, jak jsem to vyřešil u sebe v Linuxu (Lubuntu či Ubuntu core). Výhoda Linuxu je, že může běžet na starém, okuchaném počítači či vyřazeném notebooku jen v textovém režimu, takže bleskově nabíhá a když ho máte dobře nastavený, tak nepotřebujete na pódiu ani monitor. Prostě ho zapnete a strčíte jeden USB kabel do jedné díry a druhý keyboard do druhé USB zdířky a o víc se nestaráte. Stejně tak si koupíte malé Raspberry a to funguje jako plnohodnotný linuxový počítač.

Konvertor z pětikolíku DIN na USB

Staré klávesy mají na MIDI ještě pětikolíkové zdířky. K těm je třeba si koupit na www.ebay.com MIDI konvertor. Stojí asi 100 Kč a s většinou nástrojů funguje dobře.

Problém jsem měl u varhanní pedálnice - , kde naopak pořádně nefungoval. Tak jsem si koupil od Miditech tzv. Midiface II asi za 700 Kč, který s varhanní pedálnicí výborně komunikuje a bez problémů se hlásí jako midizařízení v počítači.

Jak se v Linuxu propojují dva fyzické MIDI nástroje

Když zastrčíte klávesy do USB zdířky, je třeba se podívat, na jaký port se připojily. Takže je třeba si pustit terminal (CTRL+ALT+T) a zadat příklad.

aconnect -l

Parametr -l je zkratka anglického slova list čili výpis.

Pokud nemáte tento či jiný zde zmiňovaný program nainstalovaný, pak jej v Linuxu/Ubuntu nainstalujete pomocí příkazu:

sudo apt install jmenoprogramu

Každopádně tento příkaz by vám měl vygenerovat něco jako:

Client 0: 'System' [Typ=Kernel]

  0 'Timer     '

  1 'Announce    '

Client 14: 'Midi Through' [Typ=Kernel]

  0 'Midi Through Port-0'

Client 24: 'MK-249C USB MIDI keyboard' [Typ=Kernel]

  0 'MK-249C USB MIDI keyboard MIDI '

Client 28: 'Portable Grand' [Typ=Kernel]

  0 'Portable Grand MIDI 1'

Tyto dva nástroje pak propojíme příkazem:

aconnect -x; aconnect 24:0 28:0; aconnect -l

To je pro počítač příkaz: Posílej midi signaly z portu 24:0 na port 28:0, tzn. signály z masterkeyboardu MK-249 se posílají do Yamahy na portu 28:0.

Propojení dvou virtuálních nástrojů

1) Instalace

Je podobné jako propojení dvou fyzických nástrojů, rozdíl je jen v tom, že je musíte nainstalovat:

sudo apt install vmpk

Toto je virtuální midi piano keyboard, takže můžete hrát pomocí myši či klávesnice

sudo apt install fluidsynth

Toto je softwarový syntezátor, který vyrábí zvuky pomocí souboru zvukových fontů, který mají koncovku *.sf2

2) spuštění

Po instalaci oba tyto virtuální nástroje pustíme:

vmpk

fluidsynth --audio-driver=alsa --midi-driver=alsa_seq /usr/share/sounds/sf2/FluidR3_GM.sf2

Každopádně zkontrolujte, zda máte správně cestu k souboru se zvuky nástrojů *.sf2

3) Propojení

Příkaz:

aconnect -l

vypíše například:

Client 0: 'System' [Typ=Kernel]

  0 'Timer     '

  1 'Announce    '

Client 14: 'Midi Through' [Typ=Kernel]

  0 'Midi Through Port-0'

Client 128: 'VMPK Output' [Typ=User]

  0 'VMPK Output   '

Client 129: 'VMPK Input' [Typ=User]

  0 'VMPK Input   '

Client 130: 'FLUID Synth (19748)' [Typ=User]

  0 'Synth input port (19748:0)'

Tyto dva virtuální midi nástroje tedy můžete propojit:

aconnect -x; aconnect 128:0 130:0; aconnect -l

Toto odstraní strará propojení, pak propojí nové nástroje a vypíše konečný stav:

Client 0: 'System' [Typ=Kernel]

  0 'Timer     '

  1 'Announce    '

Client 14: 'Midi Through' [Typ=Kernel]

  0 'Midi Through Port-0'

Client 128: 'VMPK Output' [Typ=User]

  0 'VMPK Output   '

verbunden zu: 130:0

Client 129: 'VMPK Input' [Typ=User]

  0 'VMPK Input   '

Client 130: 'FLUID Synth (19748)' [Typ=User]

  0 'Synth input port (19748:0)'

verbunden von: 128:0

Mně to píše německy, protože mám nainstalovanou německou lokalizaci, abych naučil německy. Ale piše to tady, že porty jsou propojeny (verbunden) tak, jak jsem chtěl, tzn. 128 --> 130. Každopádně když klikám myší na klávesnici, tak počítač vydává tóny klavíru. Ostatní se dá nastavit z programu VMPK.

Automatizované propojení reálných či virtuálních nástrojů

devicename1="VMPK Output:0"

devicename2="FLUID Synth:0"

aconnect -x; aconnect "$devicename1" "$devicename2" ; aconnect -l

nebo

aconnect -x; aconnect "VMPK Output:0" "FLUID Synth:0"; aconnect -l

Tento skript může buď vložit do nějakého souboru s příponou sh (napr. propojeni.sh), nastavit práva ke spuštění a pouštět z příkazové řádky.

Výhody MIDI routeru

Mezi takto dva propojené nástroje můžeme ještě vsunout MIDI router. Ten může s notami udělat to, co samotný masterkeyboard neumí, což je většinou split, zdvojení tónů či přidání nějakého intervalu, zapnutí exotického rejstříku ze zapomenuté banky ap.

Zprvu jsem pro tyto účely používal program Midish, ale musel jsem ho opustit, protože má nedostatečnou dokumentaci a nějak jsem se v ní ztrácel. Nyní používám Mididings, které má mnohem přívětivější manuál.

Automatické propojení dvou nástrojů s midi routerem

# napřed si musíte definovat jednotlivá zařízení (devices), tak jak je vidíte z výstupu příkazu 'aconnect -l'

devicename1="MK-249C USB MIDI keyboard:0"

devicename2in="Mididings Router:0"

devicename2out="Mididings Router:1"

devicename3="Portable Grand:0"

devicemonitor="Mididings Monitor:0"

# Zamýšlené propojení je přímočaré: [device1] --> [device2in - device2out] --> [device3] & [Monitor]

# pak spustíme midirouter a monitor

lxterminal --title "MIDI router"  --command='mididings -c "Mididings Router" "Pass() // Transpose(7) // Transpose(12)"'

#lxterminal --title "MIDI router"  --command='mididings -c "Mididings Router" -f "soubor_se_skriptem.py" # u větších souborů se vyplatí vložit skript routeru do externího souboru.

lxterminal --title "MIDI monitor" --command='mididings -c "Mididings Monitor" "~Filter(SYSRT_SENSING) >> ~Filter(SYSRT_CLOCK) >> Print()"'

sleep 5 # počkáme pět sekund, aby vše naskočilo

#propojime porty

aconnect -x; aconnect "$devicename1" "$devicename2in"; aconnect "devicename2out" "devicename3"; acconect "$devicename2out" $devicemonitor; aconnect -l

Tento jednoduchý router nám vytvoří něco, čemu se u varhan říká třířadá mixtura, tedy když se zmáčkne jedna klávesa C, tak zazní tři tóny, například: C - G - c

Tento skript můžete spouštět tak, že jej zkopírujeme a vložíme do okna terminálu (CTRL+C a pak CTRL+SHIP+V v terminálu). To je dobré tak na vyzkoušejí. Lépe je vložit tento skript do souboru a ten spouštět.

Viz tato ukázka s odkazem na MP3 soubor:

Řešení s Raspberry

Raspberry je malý počítač asi jako mobil, který se hodí, kdykoli se nechcete vláčet s notebookem. Stojí do 1000 Kč. Napájím ho z powerbanky, na kterou vydrží běžet celý den, takže koncert i se zkouškou není žádný problém.

Spuštění je vcelku bezproblémové: Do Raspberry se zasunou USB kabely ze dvou keyboardů. Napřed se zapnou keyboardy, pak se zapne Raspberry. Po nabootovaní, tzn. za cca 30 sekund, to hraje - signály z masterkeyboardu tečou do Yamahy, ze které se využívají jak samply, tak reprobedny. Já hraji třeba basu a klavír a dcera Judita hraje ozdoby na smyčcový orchestr. Celý koncert si toho už nevšimnu. V nejhorším to restartuji.

Ještě by to chtělo pár technických detailů, jak na to, že?

Osobně mám všechny Raspberry nainstalované v minimální "light/lite" konfiguraci bez windows X. K čemu taky? Jen zabírají místo, takto mi stačí 4GB SD karta a startuje to rychleji.

Po instalaci vetšinu nastavení vyřešíte pomocí příkazu raspi-config. Především nastavíte Raspberry, aby automaticky logovalo do uživatele PI.

Pomocí příkazu raspi-config mám taky zapnutý SSH přístup, takže po instalaci k Raspberry přistupuji už pouze přes Internet. Nemám u něho ani klávesnici, ani monitor, ani myš. Vše to obsluhuji jen ze svého notebooku přes SSH. Takže mám čtyři USB porty pro čtyři propojené MIDI klávesy.

Dříve jsem zkoušel spouštět Raspberry v tzv. bezhlavém modu ("headless"), tzn. nebootuje do uživatelského rozhraní, neloginuje, ale skončí tak, že spustí soubor: /etc/rc.local, který zapne mididings router. To fungovalo, ale popravdě řečeno nevidím přidanou hodnotu.

Užitečnou variantou na koncerty je zapínat u Raspberry wifinu v režimu hotspot, takže pokud chci, mohu se k Raspberry připojit z notebooku přes jeho wifinu. I tentokrát naloguji do terminálu (ssh pi@192.168.30.1). V terminálu mohu mididings script testovat v interaktivním modu, aniž bych musel restartovat Raspberry. Nevýhoda hotspotu je v tom, že aktualizace a instalace z Internetu musím dělat přes síťový kabel.

Pokud nemám Raspberry v režimu hotspot a jsem třeba v kostele, kde není wifi, pak to řeším tak, že si spoustím hotspot na telefonu a k němu připojím, jak notebook, tak Raspberry. No trochu opičarna, ale v nouzi na koncertech při nenadálých komplikacích se hodí mít to takto připravené.

Automatický start Mididings routeru se vklada do souboru /etc/rc.local (možná by to šlo i do ~/home/pi/.bashrc, nevím, nezkoušel jsem).

Podobnou konfiguraci využívám se starým masterkeyboardem Fatar, který přes Raspberry a Mididings ovládá laciný Yamaha keyboard z Liedlu (YPT-230 za 2500 Kč). Opět Mididings dokáže přidat split a další funkce, které YPT-230 nemá a díky Fataru je navíc k dispozici dotyková citlivost (touch sensitivity), kterou YPT-230 nemá.

  

Fatar dole a YPT-230 nahoře jsou připojeny přes Raspberry a zmíněný Ebay konvertor USB/DIN

Problémy s vysícími klávesami

U Raspberry někdy po instalaci zlobí vysící klávesy, u notebooku jsem to nezaregistroval. Na výpisu je vidět, že počítač vyšle NoteOn, ale už nevyšle NoteOff. Pro tyto případy je třeba mít Mididings router nastavený tak, aby se při zapnutí jakéhokoli nástroje automaticky vygeneroval povel Panic(). Takže stačí v pauze zmáčknout tlačítko s předefinovanými houslemi a okamžitě vysící klávesy přestanou hrát.

Každopádně problém je v rychlém rozhraní USB2 Tam je i návod, jak přepnout USB do pomalého modu. Do souboru /boot/cmdline.txt vložíte příklaz dwc_otg.speed=1 a restartujete Raspberry. Od té doby jsem problémy s vysícími klávesami prakticky nezaznamenal.

Pár funkčních skriptů ke stažení a upravení pro vlastní potřeby

Zabalil jsem do zipu pár skriptů, které mi fungovaly. Takže by asi neměl být problém je trochu upravit pro Vaše účely.

Místo prohlášení, že za nic neručím a že za zlomenou nohu babičky a požár stodoly si můžete sami, zde raději napíšu, že v případě problémů mi můžete napsat. Na linux nejsem žádný expert, ale co vím, to Vám řeknu. Jsem opět nadšený, že díky Linuxu, že mám plnohodnotné, až profesionálně řešené propojení MIDI kláves.