Як я можу відтворити файл midi з терміналу?


29

Я шукаю найпростіший додаток командного рядка (або бортовий інструмент в Mavericks, про який я не знаю), щоб відтворити файл midi з терміналу. Як можна зрозуміліше, щось подібне play myfile.mid.

Контекст: Я граю з midi в Python, і мені потрібно щось, що я можу запустити зі сценарію. Ні GUI, ні вікна, просто відтворення. Потрібно викликати сценарій Python, щоб прийняти, але все, що працює в терміналі, повинно бути.

Відповіді:


36

Це виявилося складнішою проблемою, ніж я спочатку очікував.

QuickTime X не може відтворювати файли MIDI, хоча QuickTime 7 міг.

Наскільки я можу сказати, це означає, що на 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 введіть це в Terminal:

brew install fluidsynth

(Команда MacPorts була б sudo port install fluidsynthі Фінка була б fink install fluidsynth.)

Однак завантаження fluidsynthотримує там лише частково. Тоді вам потрібен файл "SoundFont", про який я ніколи не чув. Тут є інформація про них

Я скачав його від С. Крістіана Коллінза під назвою "GeneralUser", який є безкоштовним. Поточна версія (станом на 2013-11-27) - FluidSynth, версія 1,44 . {Якщо це пряме посилання в майбутньому перерветься, скористайтеся попереднім посиланням, яке переведе вас на звичайну веб-сторінку для GeneralUser.}

Завантаживши та розпакувавши це, у вас з'явиться серія файлів, включаючи "GeneralUser GS FluidSynth v1.44.sf2" (очевидно, що назва може змінитися в майбутньому). Я перейменував цей файл і перемістив його /usr/local/share/fluidsynth/generaluser.v.1.44.sf2.

Після того, як файл SoundFont буде встановлений і fluidsynthвстановлений, ви можете відтворити міді за допомогою цієї команди:

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 є набагато більш хакерським, ніж я хотів прийняти (не всі встановили заварку ...), він працює дуже добре і запускається у сценарії швидше, ніж VLC. Тож я зачекаю день чи два, якщо з’явиться якесь смішно просте альтернативне рішення, але якщо не щедрість - ваша. До речі, для мене рідина-синтезатор виявляється в /usr/local/Cellar/fluid-synth/1.1.6. (Мені не подобається стара версія рішення Quicktime, ви ніколи не знаєте, як довго це буде працювати).
DCS

Так, я погоджуюся, що "використовувати Homebrew | MacPorts | Fink" - це не ідеал, але а) кожен, хто витрачає будь-яку кількість часу за допомогою командного рядка, виявить, що хоче більше, ніж те, що Apple може / надає і б) не вистачало вбудованого рішення, тут здавалося розумним. Що стосується QuickTime7, я згоден, він вижив довше, ніж я вважав, що це буде, але OTOH я не можу повірити, що "QuickTime X" все ще не може зробити те, що QuickTime 7 міг би. (Змушує мене боятися майбутнього iWork, але це ще одна дискусія для чергової теми в інший день :-)
TJ Luoma

Нещодавній випуск iWorks насправді був каліком порівняно з останньою версією ... Я лише чекаю, поки термінал зникне. Але досить, інакше нас поб'ють за балаканину.
DCS

@DCS Ми не будемо оскаржувати скарги. У гіршому випадку, ми попросимо, щоб вони нерестувались в кімнаті для чату або відкрили нову тему, якщо це гарантовано. Також я відредагував деякі деталі з вашої публікації. Будь ласка, надішліть цю інформацію як відповідь або відредагуйте одну з відповідей, якщо ця інформація відповідає їм.
bmike

Я спробував це на Yosemite і не зміг змусити його працювати. Я навіть видалив та перевстановив порти Mac. Помилка: fluidsynth: попередження: жоден попередньо встановлений на каналі 9 [bank = 128 prog = 56] не зміг обробити запит зовнішнього клієнта. jack main caught signal 31.
Роберт Васманн

35

Це працювало для мене:

$ piw встановити боязкість
$ файл стійкості.midi

Працював і для мене - і це набагато менше проблем, ніж відповідь, що стосується fluidsynth.
glenra

1
Найкраща відповідь тут. Відповідь на флюідзинт справді розумна, але вона може зламатися в якийсь момент (якщо цього ще не було), оскільки це набагато складніше, ніж ця.
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 та встановіть звуковий шрифт на такий файл, як звуковий шрифт FluidSynth від http://www.schristiancollins.com/generaluser.php .

Редагувати: підтримку 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, у надмалому додатку на ім'я playsmf.exe не було. Це не вбиває VLC за моєю метою, але мати щось менше буде все-таки добре. Я зачекаю кілька днів, щоб побачити, чи з’явиться інша відповідь; якщо ні, я прийму вашу. BTW: vlc: // quit потрібно додати до аргументів, щоб вийти з VLC та дозволити відновити мій сценарій.
DCS

Дивіться моє оновлення вище - чорт, це працювало добре!
DCS

чи можна використовувати стару версію vlc?
wrossmck

@RossMcKinley: Хоча технічно це можливо, це, звичайно, не те, що я хочу робити. Програмне забезпечення оновлюється з причини, і я хочу, щоб програма з великою вагою, як VLC, була в курсі моєї системи. Це було б інакше, якби це був лише міні-інструмент на 100 кбіт, але VLC не такий.
DCS

1

Відповідно до цієї публікації на власних форумах VLC , сказав адміністратор сайту Фелікс Пол Куене

Привіт, мабуть, FluidSynth загубився в процесі компіляції за останнє оновлення. Будьте впевнені, що незабаром він повернеться в 2.1.2!

Тож зараз або переходьте на vlc 2.0.9, або зачекайте на vlc 2.1.2. Таким чином, ваше існуюче рішення буде працювати, як раніше.


На жаль, це не працює з VLC 2.2.1 (листопад 2015 р.)
Джесс Рідель

1

Не зовсім відповідь, але є невеликий додаток, який може надсилати дані midi у командному рядку Mac OS X. Він також може керувати основними функціями GarageBand: http://www.bibiko.de/music/MIDImyAPP/


ей спасибі, це щось саме так, як я шукав, чому я знімав пости на міді на stackexchange
забув stackxpassword

0

Щоб зробити щось більш зручним, ви можете перекласти відповідь TJ Luoma у програмі 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

Потім можна вибрати Отримати інформацію у випадковому .mid-файлі, змінити "Відкрити за допомогою" на додаток AppleScript і натиснути "Змінити все ...", щоб зробити його відкритим .mid-файлами за замовчуванням. Тепер, коли ви двічі клацніть файл MIDI, він відкриє вікно терміналу і відтворить його автоматично.


Звичайно, це корисно, можливо, для деяких людей взагалі, але оператор запитував про суть командного рядка;)
забув stackxpassword

На жаль, запитайте неправильно!
користувач3932000
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.