2010-12-30 12 views
1

Grüße zu analysieren,Wie eine Musik in eine Reihe von Frequenzen und Dauern seiner Notizen

ich auf einem niedrigen Niveau Programmierprojekt gerade arbeite, und ich will eine Musik mit dem Computer Lautsprecher spielen.

Ich bin bereits in der Lage, die Lautsprecher der Verwendung (mit timer2) und ein Lied wird in der folgenden Art und Weise dargestellt werden:

note_t *music; 

wo note_t repräsentiert eine Note und die Verbindung von:

typedef struct { 
    int freq; /* note frequency */ 
    int dur; /* note duration in miliseconds */ 
} note_t; 

Nun, was wäre der beste Weg, um die Frequenzen und die Dauer der Noten aus einer Musikdatei zu erhalten?

Vielen Dank im Voraus!

EDIT

einige Zweifel Um zu klären, was ich will ist das beste Format kennen, um die notwendigen Informationen zu erhalten, ein Lied mit der Struktur erstellen oben angegeben.

+4

Das hängt vom Format der Musikdatei ab. – aschepler

+4

Dies ist extrem nicht trivial. – Falmarri

+4

Dies ist wie angegeben nicht zu beantworten. –

Antwort

1

anatolyg die Antwort ist gut. Ich möchte nur zeigen, wie komplex eine Aufgabe wie diese sein kann: Sehen Sie sich MIDI zur Inspiration an.

http://en.wikipedia.org/wiki/Musical_Instrument_Digital_Interface

MIDI-Dateien können als „virtuelle Noten“ für Musik-Software verwendet werden, die Hinweise und viele zusätzliche Informationen zu speichern, die Nuancen des Spielens zu beschreiben (zum Beispiel die Geschwindigkeit, Pitch Bend, Modulation und so auf). Es wurde gebaut, um ganze Musikstücke mit mehreren Instrumenten und Polyphonie zu speichern.

+0

Ich benutzte einen MIDI to TXT Converter (http://en.nemidi.com/conversor/mid2txt.html) - es erstellt einen TXT mit einer Menge von Informationen einschließlich der MIDI-Noten und deren Dauer. Dann habe ich die Noten auf die entsprechenden Frequenzen umgerechnet. Das Problem ist, dass der resultierende Song viel schneller war als das ursprüngliche MIDI. –

+0

Erhöhen Sie die Dauer jeder Frequenz. Sagen wir mal, multiplizieren Sie jede Dauer mit 0.7, um jede Dauer langsamer zu machen. Dies ist jedoch ein Versuch und Irrtum. Aber das ist das Mindeste, was Sie tun können. Oder Sie können Ihre Laufzeit durch sleep() oder ähnliche Funktionen verlangsamen. –

+1

@Neigyl: Ich würde mit einem vorbereiteten MIDI mit bekannten Notenlängen anfangen, um meine Software zu kalibrieren - kein Versuch und Irrtum. – Scorchio

2

Abhängig von Ihrem genauen Zweck können Sie eines der Klingeltonformate verwenden oder Ihr eigenes erfinden.

Ein Beispiel für ein einfaches Klingeltonformat ist RTTTL.

Verwandte Themen