터미널에서 미디 파일을 어떻게 재생할 수 있습니까?


29

터미널에서 미디 파일을 재생할 수있는 가장 간단한 명령 줄 앱 (또는 내가 모르는 매버릭스의 온보드 도구)을 찾고 있습니다. 가능한 한 평범합니다 play myfile.mid.

컨텍스트 : Python에서 midi를 가지고 놀고 있는데 스크립트에서 실행할 수있는 것이 필요합니다. GUI, 창 없음, 재생 만 가능합니다. 파이썬 스크립트에서 호출 할 수 있어야하지만 터미널에서 작동하는 것은 무엇이든해야합니다.

답변:


36

이것은 원래 예상했던 것보다 더 복잡한 문제로 판명되었습니다.

QuickTime 7은 QuickTime 7과 달리 MIDI 파일을 재생할 수 없습니다.

내가 알 수있는 한, Mac OS X에서 MIDI 파일을 재생하는 "내장"솔루션 이 없다는 것을 의미합니다 (예 : afplay작동하지 않음). 따라서 모든 솔루션에는 다른 프로그램을 다운로드하여 설치해야한다고 생각합니다.

옵션 # 1 : Mavericks에서 여전히 잘 작동하는 QuickTime 7 을 다운로드하여 설치 한 후 다음 방법으로 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"라는 하나를 무료로 다운로드했습니다. 현재 버전 (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보다 스크립트에서 더 잘 작동하고 빠르게 실행됩니다. 엄청나게 간단한 대안 솔루션이 나오면 하루나 이틀 정도 기다릴 것이지만, 현상금이 아니라면 당신의 것이됩니다. BTW, 저에게 유체 합성은 /usr/local/Cellar/fluid-synth/1.1.6에서 나타납니다. (이전 버전의 Quicktime 솔루션이 마음에 들지 않습니다. 작동 시간을 알 수 없습니다).
DCS

예, "use Homebrew | MacPorts | Fink"가 이상적이지는 않다는 데 동의합니다. a) 명령 줄을 사용하여 시간을 보내는 사람은 누구나 Apple이 제공 할 수있는 것보다 더 많은 것을 원할 것입니다. b) 기본 제공 솔루션이 없으면 여기에서 합리적인 것으로 보입니다. QuickTime7의 경우, 예상했던 것보다 오래 살아남 았지만 OTOH "QuickTime X"가 여전히 QuickTime 7으로 할 수없는 일을 믿을 수는 없습니다. (나는 iWork의 미래를 두려워하지만, 그것은 또 다른 날에 다른 스레드에 대한 또 다른 토론입니다 :-)
TJ Luoma

iWorks의 최신 릴리스는 실제로 마지막 버전과 비교하여 무너졌습니다. 터미널이 사라질 때까지 기다리고 있습니다. 그러나 충분히, 또는 우리는 잡담을 위해 쫓겨날 것입니다.
DCS

@DCS 우리는 고소장을 비난하지 않을 것입니다. 최악의 경우, 우리는 그들이 대화방에 스폰하거나 보증된다면 새 스레드를 열도록 요청할 것입니다. 또한 게시물에서 일부 세부 정보를 편집했습니다. 해당 정보를 답변으로 표시하거나 해당 정보에 맞는 답변 중 하나를 수정하십시오.
bmike

나는 이것을 요세미티에서 시도했지만 작동시키지 못했습니다. 나는 심지어 맥 포트를 제거하고 재설치했다. 오류 : fluidsynth : 경고 : 채널 9 [bank = 128 prog = 56]에서 찾은 프리셋이 외부 클라이언트 요청을 처리 할 수 ​​없습니다. 잭 메인 잡은 신호 31.
로버트 Wasmann

35

이것은 나를 위해 일했다 :

brew 설치 소심
$ 소심한 file.midi

저에게도 효과가 있었으며 fluidsynth와 관련된 답변보다 훨씬 적은 문제입니다.
glenra

1
가장 좋은 답변은 여기입니다. fluidsynth의 대답은 정말 영리하지만,이 시점보다 훨씬 복잡하기 때문에 어느 시점에서 (아직 그렇지 않은 경우) 깨지기 쉽습니다.
Westcroft_to_Apse 8

이것은 나를 위해 작동하지 않았습니다. 위의 첫 번째 명령을 실행 한 후 두 번째 명령을 실행하고 다음 메시지를 수신했습니다.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를 죽이지 않지만 더 작은 것을 갖는 것이 여전히 좋을 것입니다. 다른 답변이 표시되는지 며칠 기다립니다. 그렇지 않다면, 나는 당신의 것을 받아 들일 것입니다. BTW : 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 명령 행에서 미디 데이터를 전송할 수있는 작은 앱이 있습니다. 기본 GarageBand 기능도 제어 할 수 있습니다 : http://www.bibiko.de/music/MIDImyAPP/


고마워 그건 내가 찾던 것과 정확히 같은데 왜 내가 stackexchange에서 미디에 게시물을 감추고 있었다
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 파일에서 정보 입수를 선택하고 "Open with :"를 AppleScript 앱으로 변경 한 다음 "Change All ..."을 눌러 .mid 파일을 여는 기본 방법으로 만들 수 있습니다. 이제 MIDI 파일을 두 번 클릭하면 터미널 창이 열리고 자동으로 재생됩니다.


물론, 그것은 일반적으로 일부 사람들에게 도움이 될 수 있지만, op는 명령 줄 soution을 요구하고있었습니다.)
forgotstackxpassword

죄송합니다. 질문을 잘못 읽으십시오!
user3932000
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.