2010-12-30 2 views
1

приветствий,Как разобрать музыку в массив частот и длительностях нот

Я работаю над проектом программирования на низкого уровня, и я хочу, чтобы играть музыку с компьютером динамиком.

Я уже способен использовать динамик (с timer2) и песня представлена ​​следующим образом:

note_t *music; 

где note_t представляет записку и это соединение по:

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

Теперь, что было бы лучшим способом получить частоты и длительность нот из музыкального файла?

Заранее благодарен!

EDIT

Чтобы прояснить некоторые сомнения, что я хочу знать, это лучший формат, чтобы получить необходимую информацию для создания композиции со структурой указанных выше.

+4

Это зависит от формата музыкального файла. – aschepler

+4

Это крайне нетривиально. – Falmarri

+4

Это безответственно, как указано. –

ответ

1

anatolyg ответ хороший. Я просто хочу показать, насколько сложной может быть такая задача: взгляните на MIDI для вдохновения.

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

MIDI-файлы могут быть использованы в качестве «виртуальной музыки листа» для музыкального программного обеспечения, хранения заметок и много дополнительной информации, описывающей нюансы воспроизведения (например, скорости, высоты тона, модуляции и т.д. на). Он был построен для хранения целых музыкальных произведений с использованием множества инструментов и полифонии.

+0

Я использовал конвертер MIDI to txt (http://en.nemidi.com/conversor/mid2txt.html) - он создает txt с кучей информации, включая MIDI-ноты и длительность. Затем я преобразовал ноты в соответствующие частоты. Проблема в том, что результирующая песня была намного быстрее, чем оригинальный MIDI. –

+0

Увеличьте продолжительность каждой частоты. Скажем, умножьте каждую продолжительность на 0,7, чтобы сделать каждую продолжительность медленнее. Это, однако, проб и ошибок. Но, это наименьшее, что вы можете сделать. Или вы можете замедлить время выполнения сна() или аналогичную функцию. –

+1

@Neigyl: Я бы начал с подготовленного MIDI с известными длинами нот для калибровки моего программного обеспечения - никаких проб и ошибок там нет. – Scorchio

2

В зависимости от вашей конкретной цели вы можете использовать один из форматов рингтонов или придумать свои собственные.

Пример простого формата рингтона: RTTTL.

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

  • Нет связанных вопросов^_^