Bagaimana saya bisa memainkan file midi dari terminal?


29

Saya mencari aplikasi baris perintah paling sederhana (atau alat on-board di Mavericks yang tidak saya sadari) untuk memutar file midi dari terminal. Sejelas mungkin, sesuatu seperti play myfile.mid.

Konteks: Saya bermain-main dengan midi dengan Python dan saya butuh sesuatu yang bisa saya luncurkan dari sebuah skrip. Tidak ada GUI, tidak ada windows, hanya pemutaran. Itu harus bisa dipanggil dari skrip Python untuk diterima, tetapi apa pun yang bekerja di terminal harus.

Jawaban:


36

Ini ternyata menjadi masalah yang lebih rumit dari yang saya perkirakan.

QuickTime X tidak dapat memutar file MIDI, meskipun QuickTime 7 bisa.

Sejauh yang saya tahu itu berarti tidak ada solusi "built-in" untuk memutar file MIDI pada Mac OS X (misalnya, afplaytidak berfungsi). Karena itu saya percaya bahwa solusi apa pun akan melibatkan pengunduhan dan pemasangan beberapa program lain.

Opsi # 1: Unduh dan instal QuickTime 7 yang masih berfungsi dengan baik di Mavericks, dan kemudian Anda dapat memutar file midi dengan:

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

namun itu hanya akan memutar otomatis jika pengguna telah mengaktifkan preferensi itu, yang saya yakini tidak aktif secara default.

Opsi # 2: Gunakan FluidSynth

Untuk menginstalnya, Anda harus menggunakan Homebrew Fink, MacPorts, atau (rekomendasi saya). Setelah Homebrew diinstal, ketikkan ini di Terminal:

brew install fluidsynth

(Perintah MacPorts adalah sudo port install fluidsynthdan Fink akan fink install fluidsynth.)

Namun, pengunduhan fluidsynthhanya membuat Anda separuh jalan di sana. Maka Anda memerlukan file "SoundFont", yang belum pernah saya dengar sebelumnya. Ada informasi tentang mereka di sini

Saya mengunduh satu dari S. Christian Collins bernama "GeneralUser" yang gratis. Versi saat ini (pada 2013-11-27) adalah FluidSynth versi 1.44 . {Jika tautan langsung itu rusak di masa depan, gunakan tautan sebelumnya yang akan membawa Anda ke halaman web reguler untuk GeneralUser.}

Setelah Anda mengunduh dan membuka ritsletingnya, Anda akan memiliki serangkaian file termasuk "GeneralUser GS FluidSynth v1.44.sf2" (tentu saja namanya dapat berubah di masa mendatang). Saya mengganti nama file itu dan memindahkannya ke /usr/local/share/fluidsynth/generaluser.v.1.44.sf2.

Setelah file SoundFont fluidsynthdipasang dan diinstal, Anda dapat memainkan midi dengan menggunakan perintah ini:

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

nb Ada beberapa pesan kesalahan (yang tampaknya tidak berbahaya) yang ditampilkan saat Anda melakukannya. Jika Anda ingin menekan mereka gunakan:

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

sebagai gantinya.

Jelas saya tidak akan mengingat semua itu, jadi saya membuat zshfungsi yang disebutplaymidi

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  
}

(Itu seharusnya berhasil bashjuga untuk saya.)

Sekarang yang harus saya lakukan adalah mengetik:

playmidi example.mid 

dan example.midakan bermain.


StackExchange yang terbaik! Sementara opsi fluidsynth jauh lebih mudah diretas daripada yang saya terima (tidak semua orang telah menginstalnya ...) ini bekerja dengan sangat baik dan meluncurkan skrip lebih cepat daripada VLC. Jadi saya akan menunggu satu atau dua hari jika solusi alternatif yang sangat sederhana muncul, tetapi jika bukan hadiahnya adalah milik Anda. BTW, bagi saya fluid-synth muncul di /usr/local/Cellar/fluid-synth/1.1.6. (Saya tidak suka versi lama dari solusi Quicktime, Anda tidak pernah tahu berapa lama itu akan berfungsi).
DCS

Ya, saya setuju bahwa "menggunakan Homebrew | MacPorts | Fink" bukanlah suatu yang ideal, tetapi a) siapa pun yang menghabiskan banyak waktu menggunakan baris perintah akan menemukan diri mereka menginginkan lebih dari apa yang dapat disediakan / disediakan oleh Apple dan b) karena tidak memiliki solusi bawaan, sepertinya ini masuk akal di sini. Sedangkan untuk QuickTime7, saya setuju, ini bertahan lebih lama dari yang saya bayangkan, tapi OTOH saya tidak percaya "QuickTime X" masih tidak bisa melakukan hal-hal yang QuickTime 7 bisa lakukan. (Membuat saya takut masa depan iWork, tapi itu diskusi lain untuk utas lain di hari lain :-)
TJ Luoma

Rilis iWorks baru-baru ini sebenarnya telah lumpuh dibandingkan dengan versi terakhir ... Saya hanya menunggu Terminal menghilang. Tapi cukup, atau kita akan dihancurkan untuk obrolan.
DCS

@ DCS Kami tidak akan menampar keluhan yang diinformasikan Paling buruk, kami akan meminta mereka menelurkan ke ruang obrolan atau membuka utas baru jika diperlukan. Juga, saya mengedit beberapa detail dari posting Anda. Harap beri info tersebut sebagai jawaban atau edit salah satu jawaban jika info itu cocok dengan mereka.
bmike

Saya mencoba ini pada Yosemite dan tidak bisa membuatnya bekerja. Saya bahkan menghapus dan menginstal ulang port mac. Kesalahan: fluidsynth: peringatan: Tidak ada preset ditemukan di saluran 9 [bank = 128 prog = 56] tidak dapat menangani permintaan klien eksternal. jack utama menangkap sinyal 31.
Robert Wasmann

35

Ini bekerja untuk saya:

$ brew instal timidity
$ timidity file.midi

Bekerja untuk saya juga - dan itu BANYAK masalah kurang dari jawaban yang melibatkan fluidsynth.
glenra

1
Jawaban terbaik di sini. Jawaban fluidsynth benar-benar pintar, tetapi mungkin akan rusak pada beberapa titik (jika belum) karena jauh lebih rumit daripada yang ini.
Westcroft_to_Apse

Ini tidak berhasil untuk saya. Setelah menjalankan perintah pertama di atas, saya menjalankan yang kedua, dan menerima pesan ini:file.midi: No such file or directory
user65526

5

Anda dapat menggunakan VLC dengan antarmuka CLI non-interaktif dengan -I dummy:

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

Untuk mengaktifkan dukungan midi, buka Preferensi> Tampilkan Semua> Input / Codec> Audio codec> Fluid Synth dan atur soundfont ke file seperti soundfont FluidSynth dari http://www.schristiancollins.com/generaluser.php .

Sunting: dukungan midi telah dihapus dari versi VLC terbaru. Anda masih dapat menggunakan fluidsynth dari shell seperti yang dijelaskan oleh 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
Bekerja! Namun, VLC, sebagai pemain super besar, memiliki beberapa penundaan startup yang sangat mencolok sebelum pemutaran dimulai, yang solusi Windows saya untuk masalah ini, aplikasi super kecil bernama playsmf.exe tidak memiliki. Itu tidak membunuh VLC untuk tujuan saya, tetapi memiliki sesuatu yang lebih kecil masih akan menyenangkan. Saya akan menunggu beberapa hari untuk melihat apakah jawaban lain muncul; jika tidak, aku akan menerima milikmu. BTW: vlc: // berhenti harus ditambahkan ke argumen untuk keluar dari VLC dan memungkinkan skrip saya untuk melanjutkan.
DCS

Lihat pembaruan saya di atas - sial, ini bekerja dengan baik!
DCS

apakah mungkin menggunakan versi lama vlc?
wrossmck

@RossMcKinley: Meskipun secara teknis memungkinkan, ini tentu saja bukan yang ingin saya lakukan. Perangkat lunak diperbarui karena suatu alasan, dan saya ingin program yang berat seperti VLC diperbarui di sistem saya. Ini akan berbeda jika itu hanya alat mini 100kb, tetapi VLC tidak seperti itu.
DCS

1

Menurut posting ini di forum VLC sendiri Felix Paul Kuehne , admin situs, mengatakan

Halo, tampaknya, FluidSynth tersesat dalam proses kompilasi untuk pembaruan terakhir. Yakinlah bahwa itu akan segera kembali ke 2.1.2!

Jadi untuk sekarang downgrade ke vlc 2.0.9, atau tunggu vlc 2.1.2. Dengan cara ini, solusi Anda yang ada akan berfungsi seperti dulu.


Sayangnya, ini tidak berfungsi pada VLC 2.2.1 (Nov 2015)
Jess Riedel

1

Tidak persis jawabannya tetapi ada aplikasi kecil yang dapat mengirim data midi pada baris perintah Mac OS X. Itu juga dapat mengontrol fungsi dasar GarageBand: http://www.bibiko.de/music/MIDImyAPP/


hei terima kasih itu adalah sesuatu yang persis seperti yang saya cari, mengapa saya membaca sekilas posting di midi di
stackexchange

0

Agar lebih nyaman, Anda bisa merangkum jawaban TJ Luoma di aplikasi 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

Anda kemudian dapat memilih Dapatkan Info pada file .mid acak, ubah "Buka dengan:" ke aplikasi AppleScript, dan tekan "Ubah Semua ..." untuk menjadikannya cara default membuka file .mid. Sekarang ketika Anda mengklik dua kali pada file MIDI, itu akan membuka jendela Terminal dan memutarnya secara otomatis.


tentu saja, itu membantu mungkin bagi sebagian orang secara umum, tetapi op sedang bertanya tentang perintah baris perintah;)
forgetstackxpassword

Ups maaf, salah baca pertanyaannya!
user3932000
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.