ターミナルからMIDIファイルを再生するにはどうすればよいですか?


29

私は、ターミナルからMIDIファイルを再生するための最も単純なコマンドラインアプリ(または私が知らないMavericksのオンボードツール)を探しています。できるだけ単純な、次のようなものplay myfile.mid

コンテキスト:Pythonでmidiをいじっていますが、スクリプトから起動できるものが必要です。GUIなし、ウィンドウなし、再生のみ。受け入れられるにはPythonスクリプトから呼び出し可能でなければなりませんが、ターミナルで機能するものはすべて受け入れられる必要があります。

回答:


36

これは、当初予想していたよりも複雑な問題であることが判明しました。

QuickTime XはMIDIファイルを再生できませんが、QuickTime 7は再生できました。

私の知る限り、Mac OS XでMIDIファイルを再生するための「組み込みの」ソリューションafplayはありません(たとえば、機能しません)。したがって、ソリューションには他のプログラムのダウンロードとインストールが含まれると考えています。

オプション#1:QuickTime 7をダウンロードしてインストールします。QuickTime7はMavericksで引き続き正常に機能し、次の方法でMIDIファイルを再生できます。

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

ただし、ユーザーがその設定を有効にしている場合にのみ自動再生されます。デフォルトではオフになっています。

オプション#2:FluidSynthを使用する

それをインストールするには、Fink、MacPorts、または(私の推奨)Homebrewを使用する必要があります。Homebrewがインストールされたら、これをターミナルに入力します。

brew install fluidsynth

(MacPortsのコマンドはsudo port install fluidsynthFinkのコマンドになりますfink install fluidsynth。)

ただし、ダウンロードfluidsynthでは途中でしか取得できません。次に、これまで聞いたことのない「SoundFont」ファイルが必要です。それらに関する情報ここにあります

S. Christian Collinsから「GeneralUser」と呼ばれる無料の1つをダウンロードしました。現在のバージョン(2013-11-27現在)はFluidSynthバージョン1.44です。{将来、その直接リンクが壊れる場合は、GeneralUserの通常のWebページに移動する前のリンクを使用してください。}

ダウンロードして解凍すると、「GeneralUser GS FluidSynth v1.44.sf2」などの一連のファイルが作成されます(名前は将来変更される可能性があることは明らかです)。そのファイルの名前を変更してに移動しました/usr/local/share/fluidsynth/generaluser.v.1.44.sf2

SoundFontファイルを配置しfluidsynthてインストールしたら、次のコマンドを使用してMIDIを再生できます。

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

nbこれを行うと表示される(一見無害な)エラーメッセージがいくつかあります。それらを抑制したい場合:

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

代わりに。

明らかに、すべてを覚えることは決してないので、次のzsh関数を作成しました。playmidi

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  
}

(それもうまくいくはずbashです。)

今、私がしなければならないのは、入力するだけです:

playmidi example.mid 

そしてexample.mid再生されます。


StackExchangeが最高です!fluidsynthオプションは、私が受け入れようと思ったよりもはるかにハッキングされていますが(誰もがbrewをインストールしているわけではありません...)、VLCが行ったよりも本当にうまく機能し、スクリプトでより速く起動します。馬鹿げたほどシンプルな代替ソリューションが登場した場合、1〜2日待ちますが、そうでない場合は賞金があなたのものになります。ところで、私にとって、fluid-synthは/usr/local/Cellar/fluid-synth/1.1.6にあります。(古いバージョンのQuicktimeソリューションは好きではありません。どのくらいの期間動作するかわかりません)。
DCS

ええ、「Homebrew | MacPorts | Finkを使用する」は理想的ではないことに同意しますが、a)コマンドラインを使用して時間を費やす人は、Appleが提供/提供する以上のことを望んでいることに気付くでしょう。組み込みのソリューションがないため、ここでは妥当なもののように思えました。QuickTime7に関しては、私が思っていたよりも長く生き残っていることに同意しますが、OTOHは「QuickTime X」がQuickTime 7でできることをまだできないとは信じられません。(iWorkの将来を恐れていますが、それは別の日の別のスレッドの別の議論です:
TJルオマ

iWorksの最近のリリースは、実際には前回のバージョンと比べて機能していません。ターミナルが消えるのを待っています。しかし、十分、または私たちはおしゃべりのために打たれます。
DCS

@DCS情報に基づく苦情を打ち消しません。最悪の場合、彼らはチャットルームにスポーンするか、正当な場合は新しいスレッドを開くように依頼します。また、私はあなたの投稿からいくつかの詳細を編集しました。その情報を回答としてポップするか、その情報が適切な場合は回答の1つを編集してください。
bmike

ヨセミテでこれを試してみましたが、動作しませんでした。Macポートをアンインストールして再インストールしました。エラー:fluidsynth:警告:チャネル9 [bank = 128 prog = 56]でプリセットが見つかりませんでした。外部クライアント要求を処理できませんでした。ジャックメインキャッチ信号31
ロバートWasmann

35

これは私のために働いた:

$ brew病インストールbrew病
$ timidity file.midi

私のためにも働いた-そして、それはfluidsynthを伴う答えよりもはるかに少ないトラブルです。
グレンラ

1
ここでベストアンサー。fluidsynthの答えは本当に賢いのですが、これよりもはるかに複雑であるため、ある時点で(まだ行っていない場合)壊れる可能性があります。
Westcroft_to_Apse

これはうまくいきませんでした。上記の最初のコマンドを実行した後、私は2番目を走っており、このメッセージ受信:file.midi: No such file or directory
user65526を

5

以下を使用して、非対話型CLIインターフェイスでVLCを使用できます-I dummy

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

MIDIサポートを有効にするには、[設定]> [すべて表示]> [入力/コーデック]> [オーディオコーデック]> [Fluid Synth]に移動し、http: //www.schristiancollins.com/generaluser.phpのFluidSynthサウンドフォントのようなファイルにサウンドフォントを設定します

編集:VLCの最近のバージョンからmidiサポートが削除されました。TJ Luomaの説明に従って、シェルからfluidsynthを引き続き使用できます。

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
動作します!ただし、本格的なスーパープレーヤーであるVLCには、再生の開始前に非常に顕著な起動遅延があります。これは、問題に対する私のWindowsソリューションである、playsmf.exeという名前の超小型アプリにはありませんでした。それは私の目的のためにVLCを殺すわけではありませんが、もっと小さなものを持っているといいでしょう。数日待ってから、別の回答が表示されるかどうかを確認します。そうでない場合は、受け入れます。ところで:VLCを終了してスクリプトを再開するには、vlc:// quitを引数に追加する必要があります。
DCS

上記の私の更新を参照してください-いまいましい、これはうまく機能していました!
DCS

古いバージョンのvlcを使用することはできますか?
wrossmck

@RossMcKinley:技術的には可能ですが、これは私がやりたいことではありません。ソフトウェアは何らかの理由で更新されますが、VLCのようなヘビーウェイトプログラムをシステム上で最新にしたいのです。これは単なる100kbのミニツールである場合は異なりますが、VLCはそうではありません。
DCS

1

VLC自身のフォーラムでのこの投稿に よると、サイト管理者のFelix Paul Kuehne氏は次のように述べています。

こんにちは、どうやら、FluidSynthは最後の更新のコンパイルプロセスで迷子になりました。すぐに2.1.2に戻ってくるのでご安心ください!

したがって、現時点ではvlc 2.0.9にダウングレードするか、vlc 2.1.2を待ちます。このように、既存のソリューションは以前と同じように機能します。


残念ながら、これはVLC 2.2.1(2015年11月)の時点では機能しません
ジェスリーデル

1

正確な答えではありませんが、Mac OS Xコマンドラインでmidiデータを送信できる小さなアプリがあります。また、基本的なGarageBand機能も制御できます。http//www.bibiko.de/music/MIDImyAPP/


ちょっと私はstackexchangeのMIDIの投稿をスキミングされた理由は、私が探していたまさに同じようなものであるおかげで
forgotstackxpassword

0

物事をより便利にするために、AppleScriptアプリでTJ Luomaの答えまとめることができます。

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

次に、ランダムな.midファイルで[情報を見る]を選択し、[開く:]をAppleScriptアプリに変更し、[すべて変更...]を押して.midファイルを開くデフォルトの方法にします。これで、MIDIファイルをダブルクリックすると、ターミナルウィンドウが開き、自動的に再生されます。


もちろん、それは一般的には一部の人々にとっては役立つかもしれませんが、opはコマンドラインの停止について尋ねていました;)
forgotstackxpassword

すみません、質問を読み間違えました!
user3932000
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.