Jak mogę odtworzyć plik midi z terminala?


29

Szukam najprostszej aplikacji wiersza poleceń (lub narzędzia pokładowego w Mavericks, o których nie wiem), do odtwarzania pliku midi z terminala. Najprościej jak to możliwe, coś takiego play myfile.mid.

Kontekst: Gram w Midi w Pythonie i potrzebuję czegoś, co mogę uruchomić ze skryptu. Bez GUI, bez okien, po prostu odtwarzanie. Aby można było zaakceptować skrypt w języku Python, wszystko, co działa w terminalu, powinno być.

Odpowiedzi:


36

Okazało się, że jest to bardziej skomplikowany problem, niż początkowo się spodziewałem.

QuickTime X nie może odtwarzać plików MIDI, chociaż QuickTime 7 może.

O ile wiem, oznacza to, że nie ma „wbudowanego” rozwiązania do odtwarzania plików MIDI w systemie Mac OS X (na przykład afplaynie działa). Dlatego uważam, że każde rozwiązanie będzie wymagało pobrania i zainstalowania innego programu.

Opcja nr 1: Pobierz i zainstaluj QuickTime 7, który nadal działa dobrze w Mavericks, a następnie możesz odtwarzać pliki midi poprzez:

open -a QuickTime\ Player\ 7 /path/to/your/file.mid 

jednak nastąpi automatyczne odtwarzanie tylko wtedy, gdy użytkownik włączy tę preferencję, która moim zdaniem jest domyślnie wyłączona .

Opcja nr 2: Użyj FluidSynth

Aby go zainstalować, musisz użyć Fink, MacPorts lub (moja rekomendacja) Homebrew. Po zainstalowaniu Homebrew wpisz to w Terminalu:

brew install fluidsynth

(Komenda MacPorts byłaby, sudo port install fluidsyntha Fink byłaby fink install fluidsynth).

Jednak pobieranie prowadzi fluidsynthtylko częściowo. Potrzebujesz więc pliku „SoundFont”, o którym nigdy wcześniej nie słyszałem. Nie ma informacji o nich tutaj

Pobrałem jeden z S. Christian Collins o nazwie „GeneralUser”, który jest bezpłatny. Obecna wersja (stan na 27.11.2013) to FluidSynth wersja 1.44 . {Jeśli ten bezpośredni link zepsuje się w przyszłości, użyj poprzedniego linku, który przeniesie Cię na zwykłą stronę internetową dla GeneralUser.}

Po pobraniu i rozpakowaniu będziesz mieć serię plików, w tym „GeneralUser GS FluidSynth v1.44.sf2” (oczywiście nazwa może ulec zmianie w przyszłości). Zmieniłem nazwę tego pliku i przeniosłem go do /usr/local/share/fluidsynth/generaluser.v.1.44.sf2.

Po umieszczeniu i fluidsynthzainstalowaniu pliku SoundFont możesz odtworzyć plik midi za pomocą tego polecenia:

fluidsynth -i /usr/local/share/fluidsynth/generaluser.v.1.44.sf2 ~/Music/example.mid 

nb Istnieją pewne (pozornie nieszkodliwe) komunikaty o błędach, które są wyświetlane, gdy to robisz. Jeśli chcesz je wyłączyć, użyj:

(fluidsynth -i /usr/local/share/fluidsynth/generaluser.v.1.44.sf2 ~/Music/example.mid 2>&1) >/dev/null

zamiast.

Oczywiście nigdy tego nie zapamiętam, więc utworzyłem zshfunkcję o nazwieplaymidi

function playmidi {

    SOUNDFONT='/usr/local/share/fluidsynth/generaluser.v.1.44.sf2'

    if [ -e "$SOUNDFONT" ]
    then 

        for i in "$@"
        do 
            if [ -e "$i" ]
            then
                (fluidsynth -i "$SOUNDFONT" "$i"  2>&1) >/dev/null
            else
                echo "[playmidi]: cannot find file at $i"   
                return 1
            fi  
        done 
    else
            echo "[playmidi]: SOUNDFONT file not found at $SOUNDFONT"
            return 1
    fi  
}

(Myślę, że to też powinno działać bash).

Teraz wszystko, co muszę zrobić, to wpisać:

playmidi example.mid 

i example.midzagrają.


StackExchange w najlepszym wydaniu! Chociaż opcja Fluidsynth jest o wiele bardziej hakerska, niż byłem gotów zaakceptować (nie wszyscy mają zainstalowane napar ...), działa naprawdę dobrze i uruchamia się w skrypcie szybciej niż VLC. Więc poczekam dzień lub dwa, jeśli pojawi się jakieś absurdalnie proste alternatywne rozwiązanie, ale jeśli nie, nagroda jest twoja. BTW, dla mnie syntezator płynów pojawia się w /usr/local/Cellar/fluid-synth/1.1.6. (Nie podoba mi się stara wersja rozwiązania Quicktime, nigdy nie wiadomo, jak długo będzie działać).
DCS

Tak, zgadzam się, że „use Homebrew | MacPorts | Fink” nie jest ideałem, ale a) każdy, kto spędza dowolną ilość czasu za pomocą wiersza poleceń, będzie chciał więcej niż Apple może / zapewnia i b) brakowało wbudowanego rozwiązania, tutaj wydawało się rozsądne. Jeśli chodzi o QuickTime7, zgadzam się, że przetrwał dłużej, niż się spodziewałem, ale OTOH nie mogę uwierzyć, że „QuickTime X” nadal nie może robić rzeczy, które mógłby QuickTime 7. (Obawiam się, że boję się o przyszłość iWork, ale to kolejna dyskusja na inny wątek innego dnia :-)
TJ Luoma,

Ostatnia wersja iWorks została okaleczona w porównaniu do ostatniej wersji ... Czekam tylko na zniknięcie terminala. Ale wystarczy, bo będziemy gadać.
DCS,

@DCS Nie będziemy odrzucać świadomych skarg. W najgorszym przypadku poprosimy ich o odrodzenie się na czacie lub otwarcie nowego wątku, jeśli jest to uzasadnione. Zredagowałem też niektóre szczegóły z twojego postu. Podaj te informacje jako odpowiedź lub edytuj jedną z odpowiedzi, jeśli ta informacja pasuje do nich.
bmike

Próbowałem tego na Yosemite i nie mogłem go uruchomić. Odinstalowałem i ponownie zainstalowałem porty Mac. Błąd: Fluidsynth: ostrzeżenie: Nie znaleziono ustawienia wstępnego na kanale 9 [bank = 128 prog = 56] nie może obsłużyć żądania klienta zewnętrznego. jack main złapał sygnał 31.
Robert Wasmann

35

To działało dla mnie:

$ nieśmiałość instalacji naparu
$ timidity file.midi

Pracowałem też dla mnie - i jest to o wiele mniej kłopotów niż odpowiedź dotycząca fluidów.
glenra

1
Najlepsza odpowiedź tutaj. Fluidsynth odpowiedź jest naprawdę sprytna, ale w pewnym momencie może się złamać (jeśli jeszcze tego nie zrobiła), ponieważ jest o wiele bardziej skomplikowana niż ta.
Westcroft_to_Apse

To mi nie zadziałało. Po uruchomieniu pierwszego polecenia powyżej uruchomiłem drugie i otrzymałem następujący komunikat:file.midi: No such file or directory
user65526

5

Możesz używać VLC z nieinteraktywnym interfejsem CLI z -I dummy:

/Applications/VLC.app/Contents/MacOS/VLC -I dummy file.mid vlc://quit

Aby włączyć obsługę midi, przejdź do Preferencje> Pokaż wszystko> Kodery-dekodery> Kodeki audio> Fluid Synth i ustaw soundfont na plik taki jak Soundfont FluidSynth z http://www.schristiancollins.com/generaluser.php .

Edycja: obsługa midi została usunięta z najnowszej wersji VLC. Nadal możesz używać Fluidsynth z powłoki, jak opisano w TJ Luoma:

brew install fluidsynth
wget http://www.schristiancollins.com/soundfonts/GeneralUser_GS_1.44-FluidSynth.zip
unzip GeneralUser_GS_1.44-FluidSynth.zip
mkdir -p /usr/local/share/fluidsynth
mv GeneralUser\ GS\ 1.44\ FluidSynth/GeneralUser\ GS\ FluidSynth\ v1.44.sf2 /usr/local/share/fluidsynth
fluidsynth -i /usr/local/share/fluidsynth/GeneralUser\ GS\ FluidSynth\ v1.44.sf2 file.mid

1
Prace! Jednak VLC, jako pełnoprawny super odtwarzacz, ma bardzo zauważalne opóźnienie uruchamiania przed rozpoczęciem odtwarzania, czego nie miało moje rozwiązanie problemu z Windows, super-mała aplikacja o nazwie playmf.exe. To nie zabija VLC dla moich celów, ale posiadanie czegoś mniejszego byłoby nadal przyjemne. Poczekam kilka dni, aby zobaczyć, czy pojawi się kolejna odpowiedź; jeśli nie, zaakceptuję twoje. BTW: vlc: // quit musi zostać dodane do argumentów, aby wyjść z VLC i umożliwić wznowienie działania mojego skryptu.
DCS

Zobacz moją aktualizację powyżej - cholera, to kiedyś działało dobrze!
DCS,

czy można użyć starej wersji VLC?
wrossmck

@RossMcKinley: Chociaż technicznie jest to możliwe, z pewnością nie chcę tego robić. Oprogramowanie zostało z jakiegoś powodu zaktualizowane i chcę, aby ciężki program, taki jak VLC, był aktualny w moim systemie. Byłoby inaczej, gdyby to było tylko narzędzie o wielkości 100 KB, ale VLC tak nie jest.
DCS,

1

Według tego postu na forach VLC Felix Paul Kuehne , administrator witryny, powiedział

Witaj, najwyraźniej FluidSynth zgubił się w procesie kompilacji ostatniej aktualizacji. Zapewniamy, że wkrótce wróci do 2.1.2!

Więc na razie zmień wersję na vlc 2.0.9 lub poczekaj na vlc 2.1.2. W ten sposób istniejące rozwiązanie będzie działać tak, jak kiedyś.


Niestety nie działa to od wersji VLC 2.2.1 (listopad 2015)
Jess Riedel


0

Aby było wygodniej, możesz zakończyć odpowiedź TJ Luomy w aplikacji AppleScript:

on open inputFile
    tell application "Terminal"
        do script "fluidsynth -i /usr/local/share/fluidsynth/generaluser.v.1.44.sf2 " & (quoted form of POSIX path of inputFile as string)
        activate
    end tell
end open

Następnie możesz wybrać opcję Uzyskaj informacje o losowym pliku .mid, zmienić „Otwórz za pomocą:” na aplikację AppleScript i nacisnąć „Zmień wszystko ...”, aby ustawić domyślny sposób otwierania plików .mid. Teraz, po dwukrotnym kliknięciu pliku MIDI, otworzy się okno Terminala i odtworzy go automatycznie.


oczywiście może to być pomocne dla niektórych osób, ale
operacja

Ups, przepraszam, źle przeczytałem pytanie!
user3932000,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.