Terminalden midi dosyasını nasıl çalabilirim?


29

Terminalden bir midi dosyası oynatmak için en basit bir komut satırı uygulaması (veya Mavericks'te yerleşik bir araç) arıyorum. Mümkün olduğunca sade, gibi bir şey play myfile.mid.

Bağlam: Python'da midi ile oynuyorum ve bir senaryodan başlatabileceğim bir şeye ihtiyacım var. GUI yok, pencere yok, sadece oynatılıyor. Kabul edilmek için Python betiğinden çağrılabilir olmalıdır, ancak terminalde çalışan herhangi bir şey olmalıdır.

Yanıtlar:


36

Bu, beklediğimden daha karmaşık bir problem olarak ortaya çıktı.

QuickTime 7, QuickTime 7'nin oynamasına rağmen MIDI dosyalarını oynatamaz.

Bildiğim kadarıyla olduğunu o aracı söyleyebilirim hayır "yerleşik" bir çözüm, Mac OS X üzerinde MIDI dosyalarını oynatmak için (örneğin, afplaydoes not iş). Bu nedenle, herhangi bir çözümün başka bir programın indirilmesini ve kurulmasını içereceğini düşünüyorum.

Seçenek # 1: Mavericks'te hala iyi çalışan QuickTime 7'yi indirip yükleyin ve ardından midi dosyalarını şu şekilde oynayabilirsiniz:

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

ancak bu yalnızca kullanıcı varsayılan olarak kapalı olduğuna inandığım tercihi etkinleştirdiğinde otomatik olarak oynatılır .

Seçenek # 2: FluidSynth Kullanın

Kurmak için ya Fink, MacPorts ya da (benim tavsiyem) Homebrew kullanıyor olmalısın. Homebrew kurulduktan sonra, bunu Terminal'e yazın:

brew install fluidsynth

(MacPorts' komutu olacağını sudo port install fluidsynthve Fink en olacaktı fink install fluidsynth.)

Ancak, indirme işlemi fluidsynthyalnızca orada size yarı yolda yardımcı olur. O zaman daha önce hiç duymadığım bir "SoundFont" dosyasına ihtiyacınız var. Burada onlar hakkında bilgi var

Birini S. Christian Collins'ten "GeneralUser" adı verilen ve ücretsiz olanı indirdim. Mevcut sürüm (2013-11-27 itibariyle) FluidSynth sürüm 1.44'tür . {Gelecekte bu doğrudan bağlantı koparsa, sizi GeneralUser için normal web sayfasına götürecek olan önceki bağlantıyı kullanın.}

Bunu indirdikten ve açtığınızda, "GeneralUser GS FluidSynth v1.44.sf2" (bir dosya gelecekte daha sonra değişebilir) dahil olmak üzere bir dizi dosyanız olacaktır. Bu dosyayı yeniden adlandırdım ve adresine taşıdım /usr/local/share/fluidsynth/generaluser.v.1.44.sf2.

SoundFont dosyası yerleştirilip fluidsynthyüklendikten sonra, bu komutu kullanarak bir midi çalabilirsiniz:

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

nb Bunu yaparken görüntülenen bazı (görünüşte zararsız) hata mesajları vardır. Onları bastırmak istiyorsanız kullanın:

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

yerine.

Belli ki asla hepsini hatırlamayacağım, bu yüzden zshdenilen bir işlev yaptımplaymidi

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  
}

(Bunun için de çalışması gerekirbash .)

Şimdi tek yapmam gereken türü:

playmidi example.mid 

ve example.midoynayacak.


StackExchange'i en iyi şekilde kullanın! Fluidsynth seçeneği, kabul etmeye istekli olduğumdan çok daha fazla hacklenmiş olsa da (herkes kurulu değil ...) gerçekten iyi çalışıyor ve senaryoda VLC'den daha hızlı başlatılıyor. Bu yüzden saçma bir şekilde basit alternatif bir çözüm ortaya çıkarsa bir gün veya iki bekleyeceğim, ancak ödül sizin değilse. BTW, benim için sıvı-sent / usr/local/Cellar/fluid-synth/1.1.6 'da ortaya çıkıyor. (Quicktime çözümünün eski sürümünü beğenmedim, ne kadar süreceğini asla bilemezsiniz).
DCS

Evet, “Homebrew | MacPorts | Fink kullan” ifadesinin ideal olmadığını kabul ediyorum, ancak a) komut satırını kullanarak herhangi bir zaman harcayan herhangi biri, Apple'ın sağlayabildiğinden / sağlayabildiğinden daha fazlasını isteyen bir şeyler bulabilir ve b) yerleşik bir çözüm bulunmadığı takdirde, burada makul bir çözüm gibiydi. QuickTime7'ye gelince, katılıyorum, düşündüğümden daha uzun süre hayatta kaldı, ancak OTOH QuickTime 7'nin yapabileceği şeyleri yapamayacağına inanamıyorum. (İWork'un geleceğinden korkmamı sağlıyor, ama bu başka bir gün başka bir konu için başka bir tartışma :-)
TJ Luoma

İWorks'ün son sürümü aslında son sürüme kıyasla sakat kalmıştı ... Sadece Terminal'in kaybolmasını bekliyorum. Ama bu kadar yeter, yoksa geveze konuşacağız.
DCS

@DCS Bilgilendirilmiş şikayetleri özetlemeyiz. En kötüsü, bir sohbet odasına gelmelerini veya garanti verilmesi durumunda yeni bir konu açmalarını isteyeceğiz. Ayrıca, yayınlarınızdan bazı ayrıntıları da düzenledim. Lütfen bu bilgiyi bir cevap olarak açın veya bu bilginin kendisine uygun olması durumunda cevaplardan birini düzenleyin.
bmike

Bunu Yosemite üzerinde denedim ve işe yaramadı. Mac portları bile kaldırdım ve yeniden yükledim. Hata: fluidsynth: uyarı: Kanal 9'da hiçbir ön ayar bulunamadı [bank = 128 prog = 56] harici istemci isteğini yerine getiremedi. jack ana sinyalini 31. yakalandı
Robert VVasmann

35

Bu benim için çalıştı:

$ brew timidity yükleyin
$ timidity dosyası.midi

Benim için de işe yaradı - ve fluidsynth içeren yanıttan LOT daha az sorun.
glenra

1
Buradaki en iyi cevap. Fluidsynth cevabı gerçekten zekicedir, ancak bir noktada kırmakla yükümlüdür (zaten değilse), çünkü bundan çok daha karmaşıktır.
Westcroft_to_Apz

Bu benim için işe yaramadı. Yukarıdaki ilk komutu çalıştırdıktan sonra file.midi: No such file or directory
ikinciyi

5

VLC'yi etkileşimli olmayan bir CLI arayüzü ile kullanabilirsiniz. -I dummy :

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

Midi desteğini etkinleştirmek için, Tercihler> Tümünü Göster> Giriş / Kodekler> Ses kodekleri> Fluid Synth'e gidin ve ses kaynağını http://www.schristiancollins.com/generaluser.php adresinden FluidSynth soundfont gibi bir dosyaya ayarlayın .

Düzenleme: midi desteği VLC'nin son sürümünden kaldırıldı. TJ Luoma tarafından açıklandığı gibi kabuktaki akışkanları hala kullanabilirsiniz:

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
Eserleri! Ancak, tam gelişmiş bir süper oyuncu olan VLC, çalma işlemine başlamadan önce bazı belirgin başlangıç ​​gecikmelerine sahiptir, bu, Windows çözümümün, playsmf.exe adlı süper küçük bir uygulamasının sahip olmadığı bir problemdi. Bu benim amacım için VLC'yi öldürmez, fakat daha küçük bir şeye sahip olmak yine de iyi olurdu. Başka bir cevabın ortaya çıkıp çıkmadığını görmek için birkaç gün bekleyeceğim; değilse, ben seninkini kabul edeceğim. BTW: vlc: // quit, VLC'den çıkmak ve betiğimin devam etmesine izin vermek için argümanlara eklenmelidir.
DCS

Yukarıdaki güncellememe bakın - kahretsin, bu iyi çalışıyordu!
DCS

vlc'nin eski bir sürümünü kullanmak mümkün mü?
wrossmck

@RossMcKinley: Teknik olarak mümkün olsa da, kesinlikle yapmak istediğim bu değil. Yazılım bir nedenden dolayı güncellendi ve VLC gibi ağır bir programın sistemimde güncel olmasını istiyorum. Bu sadece 100kb mini bir araç olsaydı farklı olurdu, ama VLC böyle değildi.
DCS

1

Göre VLC kendi forumlarında bu yazı Felix Paul Kuehne , site yöneticisi, söz konusu

Merhaba, görünüşe göre, FluidSynth son güncelleme için derleme işleminde kayboldu. Yakında 2.1.2'ye döneceğinden emin olun!

Yani şimdi ya vlc 2.0.9'a düşürün ya da vlc 2.1.2'yi bekleyin. Bu şekilde, mevcut çözümünüz eskisi gibi çalışır.


Ne yazık ki, bu VLC 2.2.1'den (Kasım 2015) itibaren işe yaramıyor
Jess Riedel

1

Tam olarak değil cevabı ama Mac OS X komut satırında midi veri gönderebilen küçük bir uygulama var. Ayrıca, temel GarageBand işlevlerini de kontrol edebilir: http://www.bibiko.de/music/MIDImyAPP/


i Stack Exchange üzerinde midi üzerinde Mesajları Aşırıyordu neden ben, arıyordu tam böyle bir şey olduğunu sayesinde hey
forgotstackxpassword

0

İşleri daha kolay hale getirmek için TJ Luoma'nın cevabını bir AppleScript uygulamasında kapatabilirsiniz :

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

Ardından rastgele bir .mid dosyasında Bilgi Al'ı seçebilir, AppleScript uygulamasına "Birlikte Aç:" ı değiştirebilir ve varsayılan olarak .mid dosyalarını açmanın yolu olarak "Tümünü Değiştir ..." e basabilirsiniz. Şimdi bir MIDI dosyasına çift tıkladığınızda, Terminal penceresini açacak ve otomatik olarak oynayacaktır.


Tabii ki, bu genel olarak bazı insanlar için faydalı olabilir, ancak operasyon komutanlığında bir bölüm soruyordu;)
forgotstackxpassword 16:16

Üzgünüz, soruyu yanlış okudum!
kullanıcı3932000,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.