2010-01-10 3 views
10

Я работаю над проектом midi, и я хотел визуализировать музыку MIDI, такую ​​как Spectrography of Mp3 music ... Я хочу знать, как конвертировать Midi Ticks в фактические секунды воспроизведения ... Например, если есть midi tick в PPQ (Pulse за четверть ноты), например, 1120. Есть ли формула для преобразования его в секунды воспроизведения в реальном мире?Midi Ticks to Actual PlayBack Seconds !!! (Midi Music)

+0

im not get you ... Допустим, у меня есть музыка с постоянным темпом 424 BPM ... Теперь у меня колеблющиеся миди тики в PPQ ... например, 70272,70344,70372 и т. Д. ... теперь для каждый miditick я хочу иметь эквивалентное воспроизведение в реальном мире во втором .... если я возьму, например, 145240 PPQ (midi tick) .. (образец миди-тика, взятый из образца музыкального файла midi) ... тогда ур-формула давая мне это 0.9116185787866357 no of Milliseconds ..., который преобразуется в 0.0009116185787866358 в секундах ..., который меня озадачивает, потому что такой 145240 миди тик производится через 1 секунду при воспроизведении музыки midi .... Помощь Plz – Taha

ответ

10

Формула: 60000/(BPM * PPQ) (миллисекунды).

Где BPM - это темп трека (Beats Per Minute).

(т.е. трек 120 BPM будет иметь MIDI время (60000/(120 * 192)) или 2.604 мс на 1 тик.

Если вы не знаете, BPM, то вы должны будете определить, что в первую очередь. MIDI раз полностью . в зависимости от темпа трека

+0

Было бы здорово если этот ответ объясняет, как вычислить BPM. – Oddthinking

+3

@Oddthinking: Вычислить это из чего? – Aaronaught

+4

BPM не является родным понятием для MIDI. Он получен из примечания Microseconds Per Quarter Note (от SET_TEMPO) и подписи времени. См. [Это сообщение в блоге] (http://www.lastrayofhope.com/2009/12/23/midi-delta-time-ticks-to-seconds/) для получения более подробной информации о том, как он вычисляется. – Oddthinking

0

60 ударов в минуту 1 минута 1000 миллисекунд 1 сек 60 секунд 1 минута или 60000 миллисекунд

так, чтобы преобразовать миллисекунд ударов в минуту для события клеща: ударов в минуту (в миллисекундах) равно 60000, деленное на (BpmVa ЛУЭ)

установить событие клеща для */8 мер (как в 7/8): ударов в минуту (в миллисекундах), равно 60000, деленное на (BpmValue), разделенная на 2

Я работаю на C# метроном Теперь. Если вы программируете, наведите его на целое число, чтобы округлить его. долей миллисекунды не должно быть проблемой. хотя, если точность заключается в вашей сделке, убедитесь, что вы задали результат для чтения в плавающей точке.

вопрос: есть ли объект таймера C# для значения с плавающей точкой, присвоенного миллисекундам?

любые комментарии или предложения, связанные с внедрением C#, очень ценятся. если моя математика неисправна, пожалуйста, дайте мне знать. благодаря!

+1

Осторожно об использовании таймеров C#, которые имеют разрешение всего около 15 мс. См. Http://stackoverflow.com/questions/3744032/why-are-net-timers-limited-to-15-ms-resolution – pilotcam

+1

Я действительно ценю ваше сообщение, так как я не понял. но идти до даже 50 мил темп должен быть 1120 ударов в минуту lol – Adam

+1

Я вижу вашу точку теперь, когда я читаю статью. будет ли выставлять значения в более мелкие целые типы, улучшающие скорость разрешения? noob здесь, так что идите легко – Adam

Смежные вопросы