Отдел MIDI файлов SMTPE - PullRequest
1 голос
/ 12 апреля 2020

Мой вопрос касается блока деления заголовка, когда последнее слово деления имеет формат SMPTE, т.е. значение лежит в диапазоне от 0x8000 до 0xFFFF.

Позволяет сказать, что значение деления равно 0xE728. Таким образом, в этом случае 15-й бит равен 1, что означает, что он имеет формат SMPTE. После того, как мы пришли к выводу, что это SMPTE, нужно ли нам избавиться от 1 на 15-м бите? Или мы просто храним 0xE7 в качестве формата SMPTE и 0x28 в качестве тиков на кадр?

Я действительно растерялся и не смог понять онлайн-форматы. Спасибо.

1 Ответ

1 голос
/ 12 апреля 2020

Спецификация Standard MIDI Files 1.0 гласит:

Если бит 15 в <division> равен единице, времена дельты в файле соответствуют подразделам секунды, в соответствии с временным кодом SMPTE и MIDI. Биты с 14 по 8 содержат одно из четырех значений -24, -25, -29 или -30, соответствующих четырем стандартным форматам временного кода SMPTE и MIDI (-29 соответствует 30 пропущенным кадрам), и представляют количество кадров в секунду. Эти отрицательные числа сохраняются в форме дополнения до двух.

Можно было бы скрыть бит 15. Но в форме дополнения до двух наиболее значимый бит указывает отрицательное число, поэтому вы можете просто интерпретировать весь байт (биты 15… 8) как 8-битное значение со знаком (например, signed char в C), и это будет иметь одно из четырех значений.

...