2010-09-07 49 views
6

Có cách nào để lấy dữ liệu ghi chú từ tệp MIDI không? Đó là, tôi muốn chia nhỏ tệp MIDI thành các phần cấu thành của nó để chúng ở dạng một từ duy nhất (hoặc bất kỳ loại dữ liệu nào khác). Điều tôi muốn làm cuối cùng là lấy một tệp MIDI và tìm các mẫu trong ghi chú. Nhận được trong mỗi lưu ý, tìm tần số của nó (được chơi) và lưu ý khả năng các ghi chú khác sẽ được phát sau nó.Nhận dữ liệu ghi chú từ tệp MIDI

Thật tuyệt vời khi thực hiện điều này trong C/C++, nhưng mọi ngôn ngữ sẽ ổn.

Trả lời

1

Phân tích cú pháp các tệp MIDI bằng tay không có gì thú vị, hãy nói về điều này. ;) Các định dạng, mặc dù cũng tài liệu, rất khó để đối phó với kể từ khi bạn luôn ở mức byte nguyên. Vì bạn quan tâm đến việc trích xuất một số thông tin có ý nghĩa từ các tệp MIDI, tôi khuyên bạn nên sử dụng một khung như Juce, được viết bằng C++ và có hỗ trợ đọc tệp MIDI.

Juce khá lớn, nhưng API là tài liệu tốt và được tài liệu hóa tốt. Ví dụ: class for parsing MIDI files khá đơn giản và dễ sử dụng.

5

Nik Reisman - xin lỗi, nhưng tôi không đồng ý với bạn ... phân tích cú pháp midi trong C#, C++ là khoảng 400 hàng mã..Không có gì khó và không có gì khó.

tôi sẽ tư vấn cho bạn bắt đầu với liên kết này: http://www.sonicspot.com/guide/midifiles.html Có tất cả mọi thứ bạn cần biết về midi và làm thế nào để đọc nó ..

Trong mô tả ngắn gọn như thế nào phân tích cú pháp sẽ làm việc:
1) Thu gọn midi ở chế độ byte
2) Đọc đoạn tiêu đề, nơi có thông tin về kích thước, số lượng bản nhạc và định dạng tệp QUAN TRỌNG !!
- Có 3 loại định dạng: 0,1,2 (loại 2 thực sự là "có giá trị", chỉ có vài tệp midi với loại này, vì vậy bạn không cần phải đọc midi nếu có loại 2)
- nếu có không được viết: "MThd" (0x4D546864), kết thúc với lỗi (đó là một tập tin xấu midi)
3) đọc theo dõi đoạn
- nếu có không được viết: "MTrk" (0x4D54726B) cuối với lỗi (đó là một tập tin midi xấu)
4) Đọc các sự kiện midi .. - Có rất nhiều sự kiện, bạn có thể đọc tất cả bằng các lệnh if-else, hoặc bạn chỉ có thể đọc những sự kiện bạn muốn biết, ví dụ LƯU Ý ON, LƯU Ý OFF - Đôi khi trong một số tập tin midi không phải là CHÚ Ý OFF .. sự kiện này là chang ed với LƯU Ý BẬT và vận tốc 0

Trên trang web mọi thứ được giải thích thực sự độc đáo. Nếu bạn mở tập tin midi ở chế độ byte, bạn sẽ chỉ có một vài phương thức và mọi thứ chỉ là về các lệnh if-else và ở đó bạn sẽ nắm bắt những gì được lưu trữ ngay bây giờ.
Điều quan trọng là hiểu VARIABLE LENGTH, nhưng trên các trang web nó cũng được giải thích. Nó không khó. Bạn có thể google nhiều trang web nơi VARIABLE LENGTH được giải thích quá, với một số hình ảnh và ví dụ. Vì vậy, tôi không nghĩ rằng thật khó để giải thích nó ở đây.

Nếu bạn muốn được tư vấn thêm một chút, hãy viết cho tôi, tôi sẽ thử. Nhưng phân tích midi không khó như nó trông như thế nào. Nếu bạn có một số vấn đề, hãy viết cho tôi ..

+1

NIH syndrom có ​​thể? Tôi có nghĩa là một std :: vector lớp không phải là khó để viết trên bề mặt của nó chỉ là một mảng chiều dài biến ... std :: log2() là không khó để viết một trong hai ... và như vậy. Tại sao không viết tất cả mọi thứ cho mình? Các công cụ như phân tích cú pháp tệp bằng tay là điều tuyệt vời nhất trong số chúng, thậm chí nhiều hơn thế khi xử lý các định dạng "chuẩn" mà chắc chắn cần phải có một thực thi vững chắc ở đâu đó. – thesaint

+2

Xin lỗi, tôi có thể gửi cho anh ấy 2198312093 khung công tác và giải pháp của bên thứ ba và anh ấy có thể gặp phải các vấn đề lớn hơn sau đó chỉ bằng cách viết nó bằng chính mình. Atleast nếu tôi sử dụng thư viện của bên thứ 3, tôi đang gặp phải vấn đề lớn hơn sau đó nếu tôi tự mình viết nó. Và dù sao thì ai đó cũng cần viết mã. Nếu tôi là một hoặc một số Joseph Nowak từ Đài Loan viết nó không quan trọng. Tất cả thời gian bạn có thể nhận được một số lỗi. Và nếu bạn thực sự muốn biết những gì một số thư viện đang làm, bạn cần phải xem xét mã đó. Vì vậy, trong nhiều trường hợp, bạn dễ dàng tự viết nó hơn. – piggy

Các vấn đề liên quan