Разбор формата файла SID
Я хочу написать парсер для файлов.sid (музыка для чипов C64), чтобы извлечь некоторые шаблоны в заметки. Я ищу формат и нашел это: http://cpansearch.perl.org/src/LALA/Audio-SID-3.11/SID_file_format.txt
Я могу прочитать заголовок, как в этом документе, но я не понимаю, как извлечь отдельные заметки и вывести их.
Я ищу готовые конвертеры и нашел эти:
- http://www.vgmpf.com/Wiki/index.php?title=SID_to_MIDI_(Windows) и - очень старый, не работает
- ... - очень очень старый, выходной пустой файл
- ... - просто обсуждение на форуме
То есть я нашел еще кое-что, но Stackru говорит, что я не могу опубликовать более двух ссылок.
Пожалуйста помоги. Извините за мой плохой английский. Спасибо за ваше внимание!
3 ответа
Помимо заголовка, содержащего различные метаданные, остальная часть файла.sid состоит из кода (подпрограмма проигрывателя) и данных (инструменты и данные примечаний).
Формат данных заметки зависит от кода проигрывателя, и существует множество различных проигрывателей, любой из которых может иметь несколько версий с различными вариантами кода и форматов данных. Есть даже много мелодий, в которых есть код и форматы данных, разработанные специально для этой одной мелодии.
Это означает, что единственный способ определить формат данных заметки - это изучить код проигрывателя (в мониторе машинного кода или отдельном инструменте дизассемблера), чтобы увидеть, что он делает и как организованы данные, что может быть довольно предприятие, даже если вы уже знакомы с машинным кодом 6510 и чипом SID.
Если я правильно читаю, если вас интересуют только заметки (то есть высота звука), вы сможете обойтись, просто посмотрев, что записывается в $d400/$d401 для канала 1 и так далее.
Проверьте https://github.com/M3wP/XSID
Вы найдете двоичные файлы в каталоге дистрибутива:https://github.com/M3wP/XSID/tree/master/Distribution .
Этот работает, я пробовал. Информацию о нотах можно найти в файле output-midi. Проверьте код, чтобы узнать, как он работает в деталях.
Вам понадобится Delphi (в настоящее время используется XE8) и Microsoft Visual Studio для компиляции всех двоичных файлов проекта для Windows. Visual Studio требуется только для DLL.