如何从终端播放Midi文件?


29

我正在寻找一个最简单的命令行应用程序(或我不知道的Mavericks上的板载工具)来从终端播放midi文件。尽可能简单,像play myfile.mid

上下文:我正在用Python玩Midi,我需要可以从脚本启动的东西。没有GUI,没有窗口,只能播放。必须能够从Python脚本中调用它才能被接受,但是在终端中起作用的任何东西都应该是可以接受的。

Answers:


36

原来这是一个比我最初预期的要复杂的问题。

尽管QuickTime 7可以,但是QuickTime X无法播放MIDI文件。

据我所知,这意味着在Mac OS X上播放MIDI文件没有 “内置”解决方案(例如,afplay不起作用)。因此,我相信任何解决方案都将涉及下载和安装其他程序。

选项#1:下载并安装QuickTime 7,该版本在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 fluidsynth,芬克的命令为fink install fluidsynth。)

但是,下载fluidsynth只能让您分得一杯there。然后,您需要一个我从未听说过的“ SoundFont”文件。这里有关于他们的信息

我从S. Christian Collins下载了一个免费的“ GeneralUser”。当前版本(截至2013-11-27)是FluidSynth版本1.44。{如果该直接链接将来会中断,请使用上一个链接,该链接将带您进入GeneralUser的常规网页。}

下载并解压缩后,您将拥有一系列文件,包括“ GeneralUser GS FluidSynth v1.44.sf2”(显然,将来名称可能会更改)。我重命名了该文件并将其移至/usr/local/share/fluidsynth/generaluser.v.1.44.sf2

放置并fluidsynth安装SoundFont文件后,可以使用以下命令播放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快。因此,如果有一些可笑的简单替代解决方案出现,我将等待一两天,但如果没有,那是您的赏金。顺便说一句,对我来说,fluid-synth在/usr/local/Cellar/fluid-synth/1.1.6中出现。(我不喜欢旧版的Quicktime解决方案,您永远不知道它会运行多长时间)。
DCS

是的,我同意“使用Homebrew | MacPorts | Fink”不是一个理想的选择,但是a)任何花费大量时间使用命令行的人都会发现自己想要的东西超出了Apple可以提供的能力,并且b)缺少内置解决方案,在这里似乎是一个合理的解决方案。至于QuickTime7,我同意,它的生存时间比我想象的要长,但是OTOH我无法相信“ QuickTime X”仍然无法完成QuickTime 7的工作。(让我担心iWork的未来,但这是另一天另一话题的讨论:-)
TJ Luoma

与上一版本相比,iWorks的最新版本实际上已经瘫痪了……我只在等待终端消失。但是足够了,否则我们将被chat不休。
DCS

@DCS我们不会抨击知情的投诉。在最坏的情况下,我们会要求他们在聊天室中产生或在需要时打开新线程。另外,我从您的帖子中编辑了一些细节。请弹出该信息作为答案,或者如果该信息适合它们,则编辑其中一个答案。
bmike

我在优胜美地上尝试了此操作,但无法正常工作。我什至卸载并重新安装了mac端口。错误:fluidsynth:警告:在通道9 [bank = 128 prog = 56]上找不到任何预设,无法处理外部客户请求。千斤顶主要抓住了信号31
罗伯特Wasmann

35

这为我工作:

$ brew安装胆小
$胆小的file.midi

我也为我工作-与涉及fluidsynth的答案相比,这麻烦得多。
glenra

1
最好的答案在这里。fluidsynth答案确实很聪明,但是它可能会在某个时候中断(如果尚未解决),因为它比这个复杂得多。
Westcroft_to_Apse

这对我不起作用。运行上面的第一个命令后,我运行了第二个命令,并收到以下消息:file.midi: No such file or directory
user65526

5

您可以将VLC与非交互式CLI界面一起使用-I dummy

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

要启用Midi支持,请转至“首选项”>“显示全部”>“输入/编解码器”>“音频编解码器”>“ Fluid Synth”,然后将声音字体设置为类似http://www.schristiancollins.com/generaluser.php的FluidSynth声音字体的文件。

编辑:midi支持已从VLC的最新版本中删除。您仍然可以按照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
作品!但是,VLC是成熟的超级播放器,在播放开始之前有一些非常明显的启动延迟,这是我的Windows解决问题的方法,一个名为playmf.exe的超小型应用程序没有。出于我的目的,这并不能杀死VLC,但是拥有较小的东西仍然会很好。我将等几天,看看是否弹出另一个答案。如果没有,我会接受你的。顺便说一句:vlc:// quit必须添加到参数中才能退出VLC并允许我的脚本继续。
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
Jess Riedel


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文件时,它将打开“终端”窗口并自动播放。


当然,这也许对某些人总体上是有帮助的,但是操作人员正在询问命令行格式;)
forgotstackxpassword

抱歉,未正确阅读问题!
user3932000'9
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.