Làm thế nào tôi có thể phát một tập tin midi từ thiết bị đầu cuối?


29

Tôi đang tìm kiếm một ứng dụng dòng lệnh đơn giản nhất (hoặc một công cụ trên máy bay trên Mavericks mà tôi không biết) để phát tệp midi từ thiết bị đầu cuối. Càng đơn giản càng tốt, một cái gì đó như thế play myfile.mid.

Bối cảnh: Tôi đang chơi xung quanh với midi trong Python và tôi cần thứ gì đó tôi có thể khởi chạy từ một kịch bản. Không có GUI, không có cửa sổ, chỉ cần phát lại. Nó phải được gọi từ tập lệnh Python để được chấp nhận, nhưng bất cứ điều gì hoạt động trong thiết bị đầu cuối nên được.

Câu trả lời:


36

Điều này hóa ra là một vấn đề phức tạp hơn tôi dự kiến ​​ban đầu.

QuickTime X không thể phát các tệp MIDI, mặc dù QuickTime 7 có thể.

Theo như tôi có thể nói điều đó có nghĩa là không có giải pháp "tích hợp" nào để phát các tệp MIDI trên Mac OS X (ví dụ: afplaykhông hoạt động). Do đó tôi tin rằng mọi giải pháp sẽ liên quan đến việc tải xuống và cài đặt một số chương trình khác.

Tùy chọn # 1: Tải xuống và cài đặt QuickTime 7 vẫn hoạt động tốt trên Mavericks và sau đó bạn có thể phát các tệp midi bằng cách:

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

tuy nhiên , điều đó sẽ chỉ tự động phát nếu người dùng đã bật tùy chọn đó, theo mặc định tôi tắt .

Tùy chọn # 2: Sử dụng FluidSynth

Để cài đặt nó, bạn phải sử dụng Fink, MacPorts hoặc (khuyến nghị của tôi) Homebrew. Khi Homebrew được cài đặt, hãy nhập cái này vào Terminal:

brew install fluidsynth

(Lệnh của MacPorts sẽ là sudo port install fluidsynthvà Fink sẽ là fink install fluidsynth.)

Tuy nhiên, tải xuống fluidsynthchỉ giúp bạn có được một phần ở đó. Sau đó, bạn cần một tập tin "SoundFont", điều mà tôi chưa từng nghe thấy trước đây. Có thông tin về họ ở đây

Tôi đã tải xuống một từ S. Christian Collins được gọi là "GeneralUser" miễn phí. Phiên bản hiện tại (kể từ 2013-11-27) là phiên bản FluidSynth 1.44 . {Nếu liên kết trực tiếp đó bị hỏng trong tương lai, hãy sử dụng liên kết trước đó sẽ đưa bạn đến trang web thông thường cho GeneralUser.}

Khi bạn đã tải xuống và giải nén nó, bạn sẽ có một loạt các tệp bao gồm "GeneralUser GS FluidSynth v1.44.sf2" (rõ ràng tên có thể thay đổi trong tương lai). Tôi đổi tên tập tin đó và chuyển nó sang /usr/local/share/fluidsynth/generaluser.v.1.44.sf2.

Khi tệp SoundFont được đặt và fluidsynthđược cài đặt, bạn có thể phát midi bằng cách sử dụng lệnh này:

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

nb Có một số thông báo lỗi (dường như vô hại) được hiển thị khi bạn làm điều đó. Nếu bạn muốn loại bỏ chúng, hãy sử dụng:

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

thay thế.

Rõ ràng là tôi sẽ không bao giờ nhớ tất cả những điều đó, vì vậy tôi đã thực hiện một zshchức năng gọi là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  
}

(Điều đó sẽ làm việc cho bashquá tôi tin.)

Bây giờ tất cả những gì tôi phải làm là gõ:

playmidi example.mid 

example.midsẽ chơi.


StackExchange tốt nhất của nó! Mặc dù tùy chọn fluidsynth là cách hack nhiều hơn tôi sẵn sàng chấp nhận (không phải ai cũng đã cài đặt ...) nó hoạt động rất tốt và khởi chạy nhanh hơn trong kịch bản so với VLC đã làm. Vì vậy, tôi sẽ đợi một hoặc hai ngày nếu một giải pháp thay thế đơn giản đến nực cười nào đó xuất hiện, nhưng nếu không thì tiền thưởng là của bạn. BTW, đối với tôi chất lỏng synth xuất hiện trong /usr/local/Cellar/fluid-synth/1.1.6. (Tôi không thích phiên bản cũ của giải pháp Quicktime, bạn không bao giờ biết nó sẽ hoạt động được bao lâu).
DCS

Vâng, tôi đồng ý rằng "sử dụng Homebrew | MacPorts | Fink" không phải là lý tưởng, nhưng a) bất cứ ai dành thời gian sử dụng dòng lệnh sẽ thấy mình muốn nhiều hơn những gì Apple có thể / cung cấp và b) thiếu một giải pháp tích hợp, nó có vẻ là một giải pháp hợp lý ở đây. Đối với QuickTime7, tôi đồng ý, nó tồn tại lâu hơn tôi nghĩ, nhưng OTOH tôi không thể tin rằng "QuickTime X" vẫn không thể làm những điều mà QuickTime 7 có thể. (Khiến tôi lo sợ về tương lai của iWork, nhưng đó là một cuộc thảo luận cho một chủ đề khác vào một ngày khác :-)
TJ Luoma

Bản phát hành gần đây của iWorks thực sự đã bị tê liệt so với phiên bản trước ... Tôi chỉ chờ Terminal biến mất. Nhưng đủ, hoặc chúng ta sẽ bị bash cho trò chuyện.
DCS

@DCS Chúng tôi sẽ không bash thông báo khiếu nại. Tệ nhất, chúng tôi sẽ yêu cầu họ sinh ra một phòng chat hoặc mở một chủ đề mới nếu được bảo hành. Ngoài ra, tôi đã chỉnh sửa một số chi tiết trong bài viết của bạn. Vui lòng bật thông tin đó dưới dạng câu trả lời hoặc chỉnh sửa một trong những câu trả lời nếu thông tin đó phù hợp với họ.
bmike

Tôi đã thử điều này trên Yosemite và không thể làm cho nó hoạt động. Tôi thậm chí đã gỡ cài đặt và cài đặt lại cổng mac. Lỗi: fluidsynth: cảnh báo: Không tìm thấy cài đặt trước trên kênh 9 [bank = 128 prog = 56] không thể xử lý yêu cầu của khách hàng bên ngoài. jack chính bắt tín hiệu 31.
Robert Wasmann 17/03/2016

35

Điều này làm việc cho tôi:

$ brew cài đặt rụt rè
$ rụt rè file.midi

Làm việc cho tôi cũng vậy - và nó ít rắc rối hơn câu trả lời liên quan đến chất lỏng.
glenra

1
Câu trả lời tốt nhất ở đây. Câu trả lời linh động thực sự rất thông minh, nhưng nó có thể bị phá vỡ tại một số điểm (nếu nó chưa có) bởi vì nó phức tạp hơn nhiều so với câu hỏi này.
Westcroft_to_Apse

Điều này đã không làm việc cho tôi. Sau khi chạy lệnh đầu tiên ở trên, tôi đã chạy lệnh thứ hai và nhận được thông báo này:file.midi: No such file or directory
user65526

5

Bạn có thể sử dụng VLC với giao diện CLI không tương tác với -I dummy:

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

Để bật hỗ trợ midi, hãy đi tới Tùy chọn> Hiển thị tất cả> Đầu vào / Bộ giải mã> Bộ giải mã âm thanh> Fluid Synth và đặt âm thanh thành một tệp như âm thanh FluidSynth từ http://www.schristiancollins.com/generaluser.php .

Chỉnh sửa: hỗ trợ midi đã bị xóa khỏi phiên bản VLC gần đây. Bạn vẫn có thể sử dụng chất lỏng từ vỏ như được mô tả bởi 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
Công trinh! Tuy nhiên, VLC, là siêu trình phát đầy đủ, có một số độ trễ khởi động rất đáng chú ý trước khi bắt đầu phát lại, mà giải pháp Windows của tôi cho vấn đề này, một ứng dụng siêu nhỏ có tên Playsmf.exe không có. Điều đó không giết chết VLC cho mục đích của tôi, nhưng có một cái gì đó nhỏ hơn vẫn tốt. Tôi sẽ đợi một vài ngày để xem nếu một câu trả lời khác bật lên; nếu không, tôi sẽ chấp nhận của bạn. BTW: vlc: // thoát phải được thêm vào các đối số để thoát VLC và cho phép tập lệnh của tôi tiếp tục.
DCS

Xem cập nhật của tôi ở trên - chết tiệt, cái này được sử dụng để hoạt động tốt!
DCS

Có thể sử dụng một phiên bản cũ của vlc?
wrossmck

@RossMcKinley: Mặc dù về mặt kỹ thuật có thể, đây chắc chắn không phải là điều tôi muốn làm. Phần mềm được cập nhật vì một lý do và tôi muốn một chương trình nặng như VLC được cập nhật trên hệ thống của tôi. Điều này sẽ khác nếu nó chỉ là một công cụ mini 100kb, nhưng VLC thì không như vậy.
DCS

1

Theo bài đăng này trên diễn đàn riêng của VLC, ông Felix Paul Kuehne , quản trị viên trang web, cho biết

Xin chào, rõ ràng, FluidSynth đã bị mất trong quá trình biên dịch cho bản cập nhật cuối cùng. Hãy yên tâm rằng nó sẽ trở lại vào 2.1.2 rất sớm!

Vì vậy, bây giờ hoặc hạ cấp xuống vlc 2.0.9, hoặc chờ vlc 2.1.2. Bằng cách này, giải pháp hiện tại của bạn sẽ hoạt động như trước đây.


Thật không may, điều này không hoạt động kể từ VLC 2.2.1 (tháng 11 năm 2015)
Jess Riedel


0

Để làm cho mọi thứ thuận tiện hơn, bạn có thể kết thúc câu trả lời của TJ Luoma trong ứng dụng 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

Sau đó, bạn có thể chọn Nhận thông tin trên một tệp .mid ngẫu nhiên, thay đổi "Mở bằng:" thành ứng dụng AppleScript và nhấn "Thay đổi tất cả ..." để biến nó thành cách mở tệp .mid mặc định. Bây giờ khi bạn nhấp đúp vào tệp MIDI, nó sẽ mở cửa sổ Terminal và tự động phát.


tất nhiên, điều đó có thể hữu ích cho một số người nói chung, nhưng op đã hỏi về một hướng dẫn dòng lệnh;)
quênstackxpassword

Rất tiếc, đọc sai câu hỏi!
dùng3932000
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.