Чтение информации о тексте песни из файла .kar

#c# #midi

#c# #midi

Вопрос:

Мне нужно читать только текст песни из файла .kar.

Проблема в том, что в документации по стандарту MIDI и .kar отсутствует документация по этому поводу.

Я попытался открыть файл с помощью шестнадцатеричного редактора, но многого не понял.

Итак, мои вопросы:

  1. Каков формат файлов .kar-файлов?
  2. Как я могу извлечь текст песни из файлов .kar? Мне не нужно воспроизводить аудио.

Ответ №1:

Файл KAR — это обычный MIDI-файл (в частности, файл типа 1 с несколькими инструментами), за исключением того, что способ хранения текстов песен немного отличается от обычных MIDI-файлов. Прошло некоторое время с тех пор, как я работал с KAR, но в IIRC тексты песен хранятся как события метатекста (тип 0x01) вместо событий текста (тип 0x05). Тем не менее, KAR также использует текстовые события для заголовка / исполнителя / etc, хотя они обычно имеют префикс с символом «@».

Как отметил @Vilx, вы можете анализировать KAR так же, как и обычный MIDI, поэтому, когда вы делаете это, вы можете просто сбросить все мета-события, и вы увидите, как они создаются.

Ответ №2:

У меня нет ответа, но я могу указать вам направление, в котором я бы выбрал сам.

Формат MIDI-файла довольно хорошо стандартизирован и документирован. Википедия не дает на него ссылки, но я помню, как нашел его в сети добрых 10 лет назад (еще до появления Google!), Поэтому я не ожидаю, что у вас возникнут проблемы с его поиском сегодня.

Формат является «фрагментированным», что означает, что информация о караоке, скорее всего, хранится в специальном фрагменте. Остальное — обратный инжиниринг. Возьмите файл караоке (.kar, как я понимаю, это файл .mid с фрагментами текста), отбросьте известные фрагменты, и вы скоро найдете фрагменты текста. Содержащаяся там информация не должна быть слишком сложной для расшифровки.

Добавлено: также говорится, что KMid поддерживает их, поэтому его исходный код может пролить некоторый свет.

Ответ №3:

Вы можете использовать эту бесплатную библиотеку для .NET: NAudio