2010-01-10 15 views
10

Ich arbeite an Midi Projekt und ich wollte die Midi Musik wie Spectrography von Mp3 Musik visualisieren ... Ich möchte wissen, wie man Midi Ticks in die tatsächliche Wiedergabe Sekunden umwandelt ... Als ob es eine gibt Midi tick in PPQ (Pulse pro Viertelnote) zum Beispiel 1120. gibt es eine Formel, um es in echte Playback-Sekunden umzuwandeln?Midi Ticks zum tatsächlichen PlayBack Sekunden !!! (Midi Music)

+0

ich bekomme Sie nicht ... Lets sagen, ich habe eine Musik mit einem konstanten Tempo von 424 BPM ... Jetzt habe ich schwankende Midi Ticks in PPQ..zum Beispiel 70272.70344,70372 etc ... jetzt für jeder Miditick möchte ich eine gleichwertige echte Welt Playback Sekunde haben .... wenn ich zum Beispiel 145240 PPQ (Midi Tick) nehme .. (Probe Midi Tick aus Sample Midi Musik Datei entnommen) ... dann ur Formel ist gib mir das 0.9116185787866357 nein von Milliseconds ... welches in 0,0009116185787866358 in Sekunden umwandelt ... das verwirrt mich cuz wie 145240 Midi Tick wird nach 1 Sekunde auf der Wiedergabe von Midi Musik produziert .... Plz Hilfe – Taha

Antwort

10

Die Formel lautet 60000/(BPM * PPQ) (Millisekunden).

Wo BPM ist das Tempo der Spur (Beats Per Minute).

(dh eine 120 BPM Spur würde für 1 tick eine MIDI-Zeit von (60000/(120 * 192)) oder 2,604 ms haben.

Wenn Sie die BPM nicht wissen, dann werden Sie das erste bestimmen müssen. MIDI Zeiten sind völlig . abhängig von der Strecke tempo

+0

Es wäre toll Wenn diese Antwort erklärt, wie man BPM berechnet. – Oddthinking

+3

@Oddthinking: Berechne es von was? – Aaronaught

+4

BPM ist kein natives MIDI-Konzept. Es ist abgeleitet von der Mikrosekunden pro Quartal Note (von SET_TEMPO) und der Taktart. Siehe [diesen Blog-Beitrag] (http://www.lastrayofhope.com/2009/12/23/midi-delta-time-ticks-to-seconds/) für weitere Details, wie es berechnet wird. – Oddthinking

0

60 bpm ist 1 minute 1000 Millisekunden beträgt 1 sec 60 Sekunden 1 minute oder 60.000 Millisekunden

so Millisekunden konvertieren auf ein Taktereignis BPM: bpm (in Millisekunden) entspricht 60000 geteilt durch (BpmVa lue)

tick Ereignis setzen für */8 Maßnahmen (wie in 7/8): bpm (in Millisekunden) gleich 60000 dividiert durch (BpmValue) dividiert durch 2

Ich arbeite an einem C# Metronome jetzt. Wenn Sie es programmieren, werfen Sie es auf Integer um, um es abzurunden. Bruchteile einer Millisekunde sollten kein Problem sein. obwohl, wenn Präzision Ihr Deal ist, stellen Sie sicher, dass Sie Ihr Ergebnis in einem Fließkomma lesen.

Frage: ermöglicht C# Timer Objekt Gleitkommawert zugeordnet Millisekunden?

Kommentare oder Vorschläge zur C# Implementierung werden sehr geschätzt. Wenn meine Mathematik fehlerhaft ist, lass es mich auch wissen. Vielen Dank!

+1

Vorsicht bei der Verwendung von C# -Timern mit einer Auflösung von nur etwa 15 ms. Siehe http://stackoverflow.com/questions/3744032/why-are-net-timers-limited-to-15-ms-resolution – pilotcam

+1

Ich schätze wirklich Ihre Kommnt, als ich nicht erkannte. aber um sogar 50 Mil zu gehen, müsste das Tempo 1120 Schläge pro Minute sein lol – Adam

+1

Ich sehe deinen Punkt jetzt, dass ich den Artikel gelesen habe. Würden die Werte in kleinere Integer-Typen umgewandelt werden, um die Geschwindigkeit der Auflösung zu verbessern? noob hier, also gehen Sie einfach – Adam