Воспроизведение TSFM треков
Начиная с версии 3270 в ZXTune появилась поддержка формата MTC.
— модуль содержит произвольное количество треков, воспроизводимых параллельно
— трек может иметь несколько альтернативных источников данных, из которых выбирается один
— для каждой сущности (модуль, трек, источник) можно сохранить дополнительные опции, влияющие на воспроизведение
— итоговый модуль имеет длительность наибольшего из треков и наследует его метаинформацию (название, автор, комментарий), если эта метаинформация для трека не указана
1) тулзу для работы с новым форматом (в архиве сборка под windows)
2) примеры треков с исходниками
3) скрипт для создания примеров из исходников (для демонстрации работы программы)
Бонусом можно послушать трек ProofOfConcept от самого Yerzmyey — микс из цифрового трека и обычного ау.
С точки зрения данных, .mtc файл представляет собой IFF-контейнер из чанков, сгруппированных согласно структуре модуля.
Каждый чанк состоит из заголовка и данных. Заголовок занимает 8 байт и состоит из двух полей- идентификатора, состоящего из 4 символов и 4-байтовой длины данных, следующих за заголовком, в big endian формате. Чанк всегда выровнен по границе в 2 байта относительно начала данных.
Чанки могут располагаться последовательно, а могут быть вложенными друг в друга, образуя древовидную структуру данных. Ниже представлена структура типичного .mtc модуля в виде идентификаторов чанков, выровненных согласно вложенности.
Строки хранятся без завершающего нуля.
Например, процесс создания одного модуля из примеров:
Можно посмотреть содержимое результата:
Видно, что для модуля указаны название и автор, а внутри содержится 3 трека. Дополнительная метаинформация (версия программы, создавшей файл, а также имена файлов) была добавлена программой mtctool.
Более сложный случай (не из примеров):
Создается контейнер tsfm.mtc с определенным названием и автором, содержащий два трека. Для первого, представляющего собой TurboSound трек, указываются дополнительные опции- частота чипа (1.75МГц), его тип (YM) и раскладка каналов (ACB). Для второго же трека указывается два источника данных- в оригинальном формате tfe и скомпилированный tfc. Плеер выберет один из них на свое усмотрение. Например, для воспроизведения на реальном ZX Spectrum подойдет только tfc вариант.
Имена свойств, интерпретируемых ZXTune, можно получить с помощью zxtune123, вызвав его с командами --list-attributes и --list-options. Свойства могут быть трех типов- число, строка и данные:
Как можно заметить, контейнер можно использовать для хранения одного трека и его настроек или дополнительной метаинформации, которая не предусмотрена в оригинальном формате.
Для того чтобы вытащить оригинальные данные из контейнера, можно воспользоваться режимом --extract:
Спасибо moroz1999 , kyv и LessNick за помощь в тестировании и отзывы.
Что это?
MTC (Multi Track Container) — контейнерный формат, позволяющий объединить различные треки для их последующего прослушивания как единого целого. Был придуман специально для вышеозвученной задачи, в частности, для комфортного распространения и прослушивания TSFM (TurboSound+TurboFM) треков. Несмотря на то, что на данный момент таких треков очень мало (мне удалось найти 6), задача видится гораздо более широкой и перспективной.Характеристики «изобретения»
— .mtc контейнер содержит в себе только один модуль— модуль содержит произвольное количество треков, воспроизводимых параллельно
— трек может иметь несколько альтернативных источников данных, из которых выбирается один
— для каждой сущности (модуль, трек, источник) можно сохранить дополнительные опции, влияющие на воспроизведение
— итоговый модуль имеет длительность наибольшего из треков и наследует его метаинформацию (название, автор, комментарий), если эта метаинформация для трека не указана
А послушать есть чё?
Чтоб не тянуть кота за подробности, можно скачать небольшой архив, в котором можно найти:1) тулзу для работы с новым форматом (в архиве сборка под windows)
2) примеры треков с исходниками
3) скрипт для создания примеров из исходников (для демонстрации работы программы)
Бонусом можно послушать трек ProofOfConcept от самого Yerzmyey — микс из цифрового трека и обычного ау.
Технические подробности
С точки зрения данных, .mtc файл представляет собой IFF-контейнер из чанков, сгруппированных согласно структуре модуля.
Каждый чанк состоит из заголовка и данных. Заголовок занимает 8 байт и состоит из двух полей- идентификатора, состоящего из 4 символов и 4-байтовой длины данных, следующих за заголовком, в big endian формате. Чанк всегда выровнен по границе в 2 байта относительно начала данных.
Чанки могут располагаться последовательно, а могут быть вложенными друг в друга, образуя древовидную структуру данных. Ниже представлена структура типичного .mtc модуля в виде идентификаторов чанков, выровненных согласно вложенности.
MTC1 - единственный корневой чанк в файле
<опциональные метаданные модуля>
TRCK - трек
<опциональные метаданные трека>
DATA - данные для трека
<опциональные метаданные для данных>
<предыдущие два элемента могут повторяться, описывая несколько альтернативных источников данных для трека
<другие треки>
Чанки метаданных:
NAME - название сущности (модуля/трека/потока данных)
AUTH - автор сущности
ANNO - комментарии
PROP - произвольное свойство в формате <имя>=<значение>
Строки хранятся без завершающего нуля.
Например, процесс создания одного модуля из примеров:
mtctool --create samples/CyberMotion.mtc \
--title CyberMotion \
--author Karbofos \
--track samples/CyberMotion/cm.tfc \
--track samples/CyberMotion/cyberm~1.mt3 \
--track samples/CyberMotion/cyberm~2.m
Можно посмотреть содержимое результата:
mtctool --list samples/CyberMotion.mtc
Program=mtctool r3270 Apr 21 2015 windows-x86 i686
Title: CyberMotion
Author: Karbofos
Track 0
Data of size 10797
Filename=cm.tfc
Track 1
Data of size 1101
Filename=cyberm~1.mt3
Track 2
Data of size 1628
Filename=cyberm~2.m
Видно, что для модуля указаны название и автор, а внутри содержится 3 трека. Дополнительная метаинформация (версия программы, создавшей файл, а также имена файлов) была добавлена программой mtctool.
Более сложный случай (не из примеров):
mtctool --create tsfm.mtc \
--title "Complex TSFM track" \
--author "Some cool musician" \
--track \
--property zxtune.core.aym.clockrate 1750000 \
--property zxtune.core.aym.type 1 \
--property zxtune.core.aym.layout 1 \
ts_track.pt3 \
--track tfm_track.tfe tfm_track.tfc
Создается контейнер tsfm.mtc с определенным названием и автором, содержащий два трека. Для первого, представляющего собой TurboSound трек, указываются дополнительные опции- частота чипа (1.75МГц), его тип (YM) и раскладка каналов (ACB). Для второго же трека указывается два источника данных- в оригинальном формате tfe и скомпилированный tfc. Плеер выберет один из них на свое усмотрение. Например, для воспроизведения на реальном ZX Spectrum подойдет только tfc вариант.
Имена свойств, интерпретируемых ZXTune, можно получить с помощью zxtune123, вызвав его с командами --list-attributes и --list-options. Свойства могут быть трех типов- число, строка и данные:
--property integer_property 100
--property string_property hello
--property data_property #00112233445566aabbccddee
--property another_string_property '1000' #одинарные кавычки обязательны для принудительной трактовки параметра как строки
Как можно заметить, контейнер можно использовать для хранения одного трека и его настроек или дополнительной метаинформации, которая не предусмотрена в оригинальном формате.
Для того чтобы вытащить оригинальные данные из контейнера, можно воспользоваться режимом --extract:
mtctool --extract samples\CyberMotion.mtc
Save 10797 bytes to cm.tfc
Save 1101 bytes to cyberm~1.mt3
Save 1628 bytes to cyberm~2.m
Спасибо moroz1999 , kyv и LessNick за помощь в тестировании и отзывы.
27 комментариев
О! как раз думал о треке ksa из эпилога с цифровыми ударниками, да и треки Scratchera с цифровыми семплами из Trashe и Condommed было бы клёво собрать в таком формате. Эх, мечты, мечты…
— Из какого демо эпилог от ksa? Помню была какая-то, но название не вспомню.
— Поковырял Trashe/Condommed — цифровой музыки не нашел, только обычную. Если семплы выводятся через аук, то обычный .ay формат решит эту задачу. MTC- он для сведения сочетаний, отличных от ay+beeper или ay+ay
Тоже с цифросемплами.
dl.dropboxusercontent.com/u/2393036/zxtune/tsfm/ProofOfConcept.mtc
Сравни: soundcloud.com/yerzmyey/yerzmyey-proof-of-concept
У Йежа играет намного мягче.
Заодно заметил багу:
при перемотке трека ползунком происходит сначала заедание «ды-ды-ды-ды-ды», потом начинает играть невпопад — разъезжаются каналы, скачет скорость воспроизведения.
Насчет «Y» — это йожык повыъебывался, ибо «y» в польском — это всегда и без исключений «ы». Но в данном случае, очевидно, что используется, как в английском — «й».
Напоминает историю как чувак по имени Семён без задней мысли транслитерировал имя в ник (semen) и долго не мог понять почему его подкалывают:) Патамушта не учел специфику аудитории.
А чо там с перемоткой?