Fórum Ubuntu CZ/SK
Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: nex555-penguin 13 Prosince 2012, 22:48:58
-
Zdravím, mořím se tu s jedním problémem už asi hodinu a stejně jsem nepřišel na vyřešení
potřebuji hromadně převést mnoho midi souborů do mp3
mkfifo roura
fluidsynth /usr/share/sounds/sf2/FluidR3_GM.sf2 pokus.mid -F roura & lame roura pokus.mp3
skončí: Rendering audio to file 'roura'..
Warning: unsupported audio format
fluidsynth: error: Failed to open audio file 'roura' for writing
[1] Dokončena
pokud pustím zvlášť ve dvou terminálech tak to funguje v pořádku - vím že to bude nějaká blbost na moji straně ale už fakt nevím... :/
... ještě mě napadlo, fluidsynthu to chvíli trvá než naskočí a začne tam sypat data a pokud pustím opačně (tj. nejdříve lame roura pokus.mp3
a pak terpve fluidsynth /usr/share/sounds/sf2/FluidR3_GM.sf2 pokus.mid -F roura
tak to vypíše tu samou chybu jako když to pustím v jednom příkazu (to "Warning: unsupported audio format" se vyhodí v terminálu u lame). Tak mě napadlo, jestli by se lame nedalo spustit až o chvíli déle (jen se divím, že si nepočká na to, až v rouře něco bude mít - takhle počká si ale jakmile si lame otevře rouru pro čtení, fluidsynth už do ní není schopný zapsat... :-\ )
děkuji předem za pomoc
-
Možná bude stačit dát příkazu lame input parametr naznačující, jaký typ souboru má očekávat, např.
lame -r roura vysl.mp3 #raw
viz man lame, část INPUT
-
proc vlastne nepouzivas normalni rouru (|)? Myslim, ze vzhledem k tomu jak je to tam s buffrovanim, tak by tenhle problem nastat nemel...
EDIT: aha, nekoukal jsem na man page fluidsynthu, myslel jsem ,ze jako je zvykem pri pouziti - misto souboru pouzije standardni vystup
-
prosím o přesný příklad příkazu . Samosebou jednoduchá roura bylo to první co jsem zkoušel ale fluidsynth očekává za -F soubor a lame zase také očekává nějaký vstup, lame se mi povedlo donutit aby četlo z stdin (díky daysleeper) ale prostě to nějak nechodí dohromady (fluidsynth odmítne zapisovat), zkoušel jsem i zástupná znamínka ( - ) ale výsledek pořád nic... buďto fluidsynth odmítne zapisovat a lame pak nemá co číst, nebo fluidsynth začne zapisovat ale lame skončí chybou, protože FS nezačne zapisovat hned od začátku (chvíli mu trvá než načte soundfonty)
-
Nezvládl by to i avconv?
#!/bin/bash
find *.mid|while read line;
do avconv -i "$line" "$line".mp3;
done
-
Nebo by to třeba šlo takto? Fluidsynth neznám, nepoužívám, takže nevím...
#!/bin/bash
find *.mid|while read line;
do fluidsynth /usr/share/sounds/sf2/FluidR3_GM.sf2 -F "$line" "$line".mp3;
done
Edit, mohlo by fungovat toto...
fluidsynth -F pokus.wav /usr/share/sounds/sf2/FluidR3_GM.sf2 pokus.mid
avconv -i pokus.wav pokus.mp3