ฉันจะเล่นไฟล์ midi จากเทอร์มินัลได้อย่างไร


29

ฉันกำลังมองหาแอพบรรทัดคำสั่งที่ง่ายที่สุด (หรือเครื่องมือออนบอร์ดใน Mavericks ฉันไม่ทราบ) ในการเล่นไฟล์ midi จากเทอร์มินัล play myfile.midในฐานะที่เป็นธรรมดาที่เป็นไปได้สิ่งที่ต้องการ

บริบท: ฉันเล่นกับมิดี้ใน Python และฉันต้องการสิ่งที่ฉันสามารถเปิดตัวจากสคริปต์ ไม่มี GUI ไม่มี windows แค่เล่น จะต้องสามารถเรียกได้จากสคริปต์ Python เพื่อให้ได้รับการยอมรับ แต่สิ่งใดก็ตามที่ทำงานในเทอร์มินัลควรเป็น

คำตอบ:


36

สิ่งนี้กลายเป็นปัญหาที่ซับซ้อนกว่าที่ฉันคาดไว้

QuickTime X ไม่สามารถเล่นไฟล์ MIDI ได้แม้ว่า QuickTime 7 จะทำได้

เท่าที่ฉันสามารถบอกได้ว่าหมายความว่าไม่มี "ตัว" ในการแก้ปัญหาการเล่นไฟล์ MIDI บน Mac OS X (ตัวอย่างเช่นafplayไม่ทำงาน) ดังนั้นฉันเชื่อว่าโซลูชันใด ๆ ที่เกี่ยวข้องกับการดาวน์โหลดและติดตั้งโปรแกรมอื่น

ตัวเลือก # 1: ดาวน์โหลดและติดตั้งQuickTime 7ซึ่งยังคงทำงานได้ดีบน Mavericks แล้วคุณสามารถเล่นไฟล์ midi ได้โดย:

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

แต่ที่จะเล่นอัตโนมัติหากผู้ใช้เปิดใช้งานการตั้งค่าได้ที่ซึ่งผมเชื่อว่าเป็นปิดโดยปริยาย

ตัวเลือก # 2: ใช้FluidSynth

ในการติดตั้งคุณต้องใช้ HomePink, MacPort หรือ (คำแนะนำของฉัน) Homebrew เมื่อติดตั้ง Homebrew ให้พิมพ์สิ่งนี้ในเทอร์มินัล:

brew install fluidsynth

(คำสั่งของ MacPorts จะเป็นsudo port install fluidsynthและจะเป็นของตำรวจfink install fluidsynth)

อย่างไรก็ตามการดาวน์โหลดfluidsynthจะช่วยให้คุณไปได้ทางนั้น จากนั้นคุณต้องใช้ไฟล์ "SoundFont" ซึ่งฉันไม่เคยได้ยินมาก่อน มีข้อมูลเกี่ยวกับพวกเขาที่นี่

ฉันดาวน์โหลดหนึ่งไฟล์จากChristian 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ติดตั้งแล้วคุณสามารถเล่น 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 ที่ดีที่สุด! ในขณะที่ตัวเลือกของไหลคือวิธีการแฮ็กมากกว่าที่ฉันยินดีที่จะยอมรับ (ไม่ใช่ทุกคนที่ติดตั้งชง ... ) มันทำงานได้ดีจริงๆ ดังนั้นฉันจะรอวันหรือสองวันถ้าบางวิธีแก้ปัญหาทางเลือกที่เรียบง่ายน่าขันเกิดขึ้น แต่ถ้าไม่ใช่รางวัลของคุณ BTW สำหรับฉัน synth-fluid ปรากฎใน / usr/local/Cellar/fluid-synth/1.1.6 (ฉันไม่ชอบโซลูชัน Quicktime รุ่นเก่าคุณไม่มีทางรู้ว่าจะใช้งานได้นานแค่ไหน)
DCS

ใช่ฉันเห็นด้วยว่า "ใช้ Homebrew | MacPorts | Fink" ไม่ใช่อุดมคติ แต่ก) ทุกคนที่ใช้เวลาโดยใช้บรรทัดคำสั่งจะพบว่าตัวเองต้องการมากกว่าที่ Apple สามารถทำได้ / b) ไม่มีวิธีแก้ปัญหาในตัวดูเหมือนว่าจะสมเหตุสมผล สำหรับ QuickTime7 ฉันเห็นด้วยมันรอดชีวิตได้นานกว่าที่ฉันคิด แต่ OTOH ฉันไม่อยากจะเชื่อว่า "QuickTime X" ยังไม่สามารถทำสิ่งที่ QuickTime 7 ทำได้ (ทำให้ฉันกลัวอนาคตของ iWork แต่นั่นเป็นอีกการสนทนาสำหรับเธรดอื่นในวันอื่น :-)
TJ Luoma

จริง ๆ แล้วการเปิดตัวของ iWorks นั้นพิการเมื่อเปรียบเทียบกับเวอร์ชั่นล่าสุด ... ฉันแค่รอให้เทอร์มินัลหายไป แต่เพียงพอหรือเราจะถูกทุบตีเพื่อพูดพล่อย
DCS

@DCS เราจะไม่ทุบตีการร้องเรียนที่แจ้ง ที่แย่ที่สุดเราจะขอให้พวกเขาวางไข่ในห้องแชทหรือเปิดกระทู้ใหม่หากได้รับการรับประกัน นอกจากนี้ฉันยังแก้ไขรายละเอียดบางส่วนจากโพสต์ของคุณ โปรดแสดงข้อมูลนั้นเป็นคำตอบหรือแก้ไขหนึ่งในคำตอบหากข้อมูลนั้นตรงกับพวกเขา
bmike

ฉันลองสิ่งนี้ในโยเซมิตีและไม่สามารถใช้งานได้ ฉันยังถอนการติดตั้งและติดตั้งพอร์ต Mac ใหม่ ข้อผิดพลาด: fluidsynth: คำเตือน: ไม่พบค่าที่กำหนดล่วงหน้าในช่อง 9 [bank = 128 prog = 56] ไม่สามารถจัดการคำขอของลูกค้าภายนอก แม่แรงจับสัญญาณ 31
Robert Wasmann

35

สิ่งนี้ใช้ได้กับฉัน:

$ Brew เวลาในการติดตั้ง
$ timidity file.midi

ทำงานให้ฉันด้วย - และมันก็เป็นปัญหาน้อยกว่าคำตอบเกี่ยวกับฟลูอิดซิน
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, ไปที่การตั้งค่า> แสดงทั้งหมด> Input / ตัวแปลงสัญญาณ> ตัวแปลงสัญญาณเสียง> ของไหล Synth และตั้ง SoundFont ไปยังแฟ้มเช่น SoundFont 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
Works! อย่างไรก็ตาม VLC ซึ่งเป็นผู้เล่นตัวยงเต็มรูปแบบนั้นมีความล่าช้าในการเริ่มต้นที่เห็นได้ชัดเจนมากก่อนที่จะเริ่มเล่นซึ่งวิธีแก้ไขปัญหา Windows ของฉันมีปัญหาแอปขนาดเล็กพิเศษชื่อ playsmf.exe ไม่มี นั่นไม่ได้ฆ่า VLC เพื่อจุดประสงค์ของฉัน แต่การมีบางอย่างที่เล็กกว่านั้นก็ยังดีอยู่ ฉันจะรอสองสามวันเพื่อดูว่าคำตอบอื่นปรากฏขึ้นหรือไม่ ถ้าไม่ฉันจะยอมรับของคุณ BTW: vlc: // เลิกต้องถูกเพิ่มลงในอาร์กิวเมนต์เพื่อออกจาก 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 (พ.ย. 2558)
Jess Riedel

1

ไม่ใช่คำตอบที่แน่นอน แต่มีแอพขนาดเล็กที่สามารถส่งข้อมูล midi บนบรรทัดคำสั่งของ Mac OS X นอกจากนี้ยังสามารถควบคุมฟังก์ชั่น GarageBand พื้นฐานได้เช่นกัน: http://www.bibiko.de/music/MIDImyAPP/


เฮ้ขอบคุณนั่นคือสิ่งที่ฉันกำลังมองหาทำไมฉันถูก skimming โพสต์บน midi ใน stackexchange
forgetotstackxpassword

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 แบบสุ่มเปลี่ยน "Open with:" เป็นแอป AppleScript และกด "Change All ... " เพื่อให้เป็นวิธีเริ่มต้นในการเปิดไฟล์. mid ตอนนี้เมื่อคุณดับเบิลคลิกที่ไฟล์ MIDI มันจะเปิดหน้าต่าง Terminal ขึ้นมาแล้วเล่นโดยอัตโนมัติ


แน่นอนว่าอาจจะเป็นประโยชน์สำหรับบางคนทั่วไป แต่ op ถูกถามเกี่ยวกับ soution บรรทัดคำสั่ง;)
forgotstackxpassword

อุ๊ปส์เข้าใจผิดคำถาม!
user3932000
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.