2010-01-10 40 views
10

Tôi đang làm việc trên dự án midi và tôi muốn hình dung âm nhạc midi như Spectrography của nhạc Mp3 ... Tôi muốn biết cách chuyển đổi Midi Ticks thành giây phát lại thực tế ... Giống như nếu có midi đánh dấu trong PPQ (Pulse per quarter note) ví dụ 1120. có công thức nào để chuyển đổi nó thành các giây phát lại trong thế giới thực không?Midi Ticks để thực tế Playback giây !!! (Midi Music)

+0

im không nhận được bạn ... Cho phép nói rằng tôi có một âm nhạc có nhịp độ liên tục 424 BPM ... Bây giờ tôi có dao động midi ve trong PPQ..ví dụ 70272,70344,70372 vv ... bây giờ cho mỗi miditick tôi muốn có một phát lại thế giới thực tương đương thứ hai .... nếu tôi lấy ví dụ 145240 PPQ (midi tick) .. (mẫu midi tick lấy từ file midi nhạc) ... thì công thức ur là cho tôi 0.9116185787866357 này không có mili giây nào ... chuyển đổi thành 0.0009116185787866358 trong giây ... câu đố của tôi là cuz 145240 midi tick được sản xuất sau 1 giây khi phát lại âm nhạc midi .... Trợ giúp Plz – Taha

Trả lời

10

Công thức là 60000/(BPM * PPQ) (mili giây).

Trong đó BPM là tiến độ của bản nhạc (Beats Per Minute).

(tức là một ca khúc 120 BPM sẽ có một thời gian MIDI của (60000/(120 * 192)) hoặc 2,604 ms cho 1 tick.

Nếu bạn không biết BPM sau đó bạn sẽ phải xác định rằng đầu tiên. Lần MIDI hoàn toàn . phụ thuộc vào tiến độ theo dõi

+0

Thật tuyệt vời nếu câu trả lời này giải thích cách tính BPM. – Oddthinking

+3

@Oddthinking: Tính toán nó từ cái gì? – Aaronaught

+4

BPM không phải là một khái niệm gốc đối với MIDI. Nó có nguồn gốc từ phần triệu giây mỗi phần lưu ý (từ SET_TEMPO) và Chữ ký thời gian. Xem [bài đăng trên blog này] (http://www.lastrayofhope.com/2009/12/23/midi-delta-time-ticks-to-seconds/) để biết thêm chi tiết về cách tính toán. – Oddthinking

0

60 bpm là 1 phút 1000 mili giây là 1 giây 60 giây là 1 phút hoặc 60.000 mili giây

như vậy để chuyển đổi mili giây để BPM cho một sự kiện đánh dấu: bpm (trong mili giây) bằng 60000 chia cho (BpmVa lue)

để thiết lập sự kiện đánh dấu cho */8 biện pháp (như trong 7/8): bpm (trong mili giây) tương đương với 60000 chia cho (BpmValue) chia cho 2

Tôi đang làm việc trên một C# Metronome hiện nay. Nếu bạn đang lập trình cast nó thành số nguyên để làm tròn xuống. các phân số của mili giây không phải là một vấn đề. mặc dù nếu độ chính xác là thỏa thuận của bạn, hãy đảm bảo bạn đặt kết quả của mình để đọc trong một điểm nổi.

câu hỏi: đối tượng C# timer có cho phép giá trị dấu chấm động được gán cho mili giây không?

mọi nhận xét hoặc đề xuất liên quan đến triển khai C# được đánh giá cao. nếu toán học của tôi bị lỗi, xin vui lòng cho tôi biết. cảm ơn!

+1

Cẩn thận khi sử dụng C# timers có độ phân giải chỉ khoảng 15ms. Xem http://stackoverflow.com/questions/3744032/why-are-net-timers-limited-to-15-ms-resolution – pilotcam

+1

tôi thực sự đánh giá cao sự hợp tác của bạn khi tôi không nhận ra. nhưng để đi đến 50 triệu nhịp độ sẽ phải là 1120 nhịp mỗi phút lol – Adam

+1

tôi thấy điểm của bạn bây giờ là tôi đã đọc bài báo. sẽ đúc các giá trị thành các loại số nguyên nhỏ hơn để cải thiện tốc độ của độ phân giải? noob ở đây, vì vậy hãy dễ dàng – Adam