Я не раз обращался к теме музыкальных редакторов системы «трекер». Казалось бы, сколько можно, горшочек, не вари. Но этих программ насчитывается сотни, и несмотря на сходство до степени смешения, созданы они с разными намерениями, посвящены решению различных задач, а к их появлению привели исторические причины разной степени занимательности. В то же время, эта нишевая тема, развивавшаяся десятилетиями, почти не имела выхода за пределы специализированных сообществ в формате обзорных публикаций для массового читателя. А значит, можно и нужно продолжать её раскрывать.

Сегодня уделю пристальное внимание явлению «кросс-трекеров» — программ для современных ПК и операционных систем типа Windows и Linux, позволяющих создавать музыку для различных старых компьютеров, игровых приставок и прочих подобных устройств, а точнее, для их музыкальных синтезаторов. Зачем, почему, что происходит, кто здесь — как обычно, сейчас разберёмся во всех этих животрепещущих вопросах.

Трекеры и чиптюны

Первая программа-трекер, определившая черты этого нового типа музыкального редактора, появилась на компьютере Commodore Amiga в 1987 году. То был The Ultimate Soundtracker, он же просто Soundtracker, созданный Карстеном Обарски из Германии. Его появление открыло новый подход к программированию и сочинению музыки на компьютере, который пришёлся по душе людям технического склада ума, в особенности компьютерным энтузиастам со склонностью к музицированию.

Soundmonitor v1.0 образца 1986 года для Commodore 64
Soundmonitor v1.0 образца 1986 года для Commodore 64

Определяющим признаком «трекера» стал специфический интерфейс, больше напоминающий hex-редактор или монитор-отладчик, чем что-то, имеющее отношение к музыке. Собственно, Карстен Обарски вдохновлялся программой Soundmonitor для Commodore 64, который и являлся подобием hex-редактора в мониторе: ряд вертикальных колонок, заполненных hex-числами. Автором этого творения, к слову, был небезызвестный Крис Хюльсбек, родом также из Германии.

Оригинальный The Ultimate Soundtracker 1987 года для Amiga
Оригинальный The Ultimate Soundtracker 1987 года для Amiga

Интерфейс Soundtracker сделал критически важный шаг от физиков к лирикам: добавил к совсем непонятным hex-ам чуть более понятные ноты, записываемые в традиционной буквенной нотации, буквами C, D, E, F, G, A, B. При этом обозначения нот вводятся не одноимёнными клавишами, а совсем другими, расположенными на клавиатуре компьютера геометрически схожим с клавишами пианино образом. Так родился классический формат музыкального трекера.

«Музыкальная» раскладка клавиш на клавиатуре ПК
«Музыкальная» раскладка клавиш на клавиатуре ПК

Несмотря на не самый интуитивно-понятный интерфейс и платность программы, она завоевала успех. В лучших традициях компьютерного пиратства 1980-х, очень скоро её взломали и заодно оснастили различными улучшениями. Так появился первый продвинутый хак, NoiseTracker, затем очень популярный Protracker, и далее десятки других трекеров — сначала для Amiga, а потом и практически для любых других компьютеров. Большая их часть была бесплатным, свободно распространяемым ПО, что также стало одной из типичных черт программ этого класса.

CyberTracker для компьютера Commodore 64
CyberTracker для компьютера Commodore 64

Хотя трекеры изначально появились на Amiga и предназначались для сочинения музыки на основе сэмплов, то есть оцифрованных фрагментов звучания реальных инструментов, они особенно пришлись ко двору на машинах, оснащённых простыми звуковыми синтезаторами, «звуковыми чипами», типа более старого 8-битного Commodore 64. Дело в том, что трекер позволяет тонко контролировать каждую мелочь в композиции, каждую ноту. А именно это очень важно, чтобы эффективно раскрывать скромный потенциал простых звуковых чипов и добиваться выдающихся результатов. Собственно, именно в этих целях и создавался предтеча трекеров, упомянутый выше Soundmonitor.

Про «чиптюн» и различные значения этого зонтичного термина я рассказывал уже не раз. Но несмотря на многозначность, его рождение непосредственно связано с историей трекеров. Оригинальный термин отсылал к так называемой Chip RAM, основному ОЗУ на Amiga, с которым работал местный звуковой чип Paula, а значит, там должны были располагаться используемые в музыкальном треке сэмплы. Позже этот же термин стал обозначать ряд других вещей, и в том числе, музыку для простых звуковых чипов, в особенности созданную с помощью трекеров, а также и просто любую схожую по характеру звучания музыку.

Я неспроста уточнил географические истоки происхождения трекеров. Исторически так сложилось, что большинство подобных программ было разработано в европейских странах. Например, в Японии, на родине родственной чиптюну так называемой «видеоигровой музыки» (VGM), трекеры совершенно не котируются. Там предпочитают MML, язык записи нотного текста в формате, аналогичном оператору PLAY в Бейсике. А в США, хоть трекерных музыкантов и хватает, но сами трекеры почему-то не делают, а местные решения прошлых лет традиционно базировались на MIDI.

И хотя трекеры не единственный способ создания чиптюна, но очень важный. С одной стороны, они являются максимально демократичным, легкодоступным инструментом для написания музыки, не требующим для этого ничего, кроме наличия компьютера и трекера, а с другой — стали средством весьма эффективного задействования возможностей этого самого компьютера, не требующим познаний в области низкоуровневого программирования.

Кросс-разработка

Другое важное в контексте сегодняшней темы явление — «кросс-разработка», то есть разработка программ для одной компьютерной платформы при помощи какой-нибудь другой.

Процесс кросс-разработки подразумевает, что исходный код программы редактируется и транслируется, а также, возможно, и отлаживается, не на той платформе, для которой создаётся программа, а на более продвинутой и удобной в использовании — обычно на современном для своего времени мощном ПК. Результат сборки запускается на целевой машине с помощью устройств, позволяющих передать туда собранный код, или в программном эмуляторе.

Рабочая станция Intel MDS-80, также известная как «Blue Box»
Рабочая станция Intel MDS-80, также известная как «Blue Box»

Явление появилось в конце 1970-х годов, когда началась разработка первых игр для игровой консоли Atari 2600. Очевидно, что на самой консоли разрабатывать их было невозможно, так как у неё нет ни клавиатуры, ни текстового дисплея. При этом платформа достаточно сложна, чтобы было невозможно написать игровую программу сразу в машинном коде, как это происходило раньше с электронными игрушками попроще. Поэтому код создавался разработчиками на бумажке, набирался специально обученными людьми, и транслировался в бинарный код на большой машине типа DEC PDP-11/20. В начале 1980-х процесс разработки был перенесён на уже персональный «Blue Box», систему Intel MDS 80, которая с помощью специального оборудования позволяла запускать код на приставке и выполнять внутрисхемную отладку.

Мэтью Смит и его инструменты для разработки
Мэтью Смит и его инструменты для разработки

Подобный подход с тех пор только развивался и активно использовался профессиональными разработчиками. И не только на игровых консолях, где это был единственный вариант, но и на домашних компьютерах, хотя они позволяли разрабатывать программы на них самих же. Так, компания Ocean при разработке игр для ZX Spectrum в 1983 году использовала сразу два Спектрума, соединённых друг с другом: на одном был загружен ассемблер, на другом запускался собранный код — это экономило время на перезагрузку ассемблера в очень вероятном случае сбоя в тестируемом коде. А ранний хит платформы, Manic Miner создавался Мэтью Смитом на компьютере TRS-80.

К середине 1980-х нормой разработки для ZX Spectrum и аналогичных ему домашних 8-битных машин было применение хотя бы 8-битного же компьютера Tatung Einstein TC-01, оснащённого качественной полноценной клавиатурой и дисководом. В частности, так разрабатывались игры в компании Software Creations (эту систему недавно воссоздал один из сотрудников компании). Но чаще это были мощные 32-битные машины на базе процессоров 680x0, в том числе те же Amiga и Atari ST. В начале 1990-х на смену всему зоопарку возможных решений практически повсеместно пришли обычные IBM PC под управлением MS-DOS.

Хотя к наступлению 90-х годов 8-битные платформы безнадёжно устарели, остались их энтузиасты. Любительская разработка на этих машинах также сдвинулась в сторону применения кросс-средств, что позволило добиваться невиданных прежде результатов. А ближе к 2000-ым набрало обороты и такое явление, как любительская разработка для игровых консолей. И конечно, она тоже могла осуществляться лишь подобным образом.

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

Кросс-трекеры

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

Поздняя версия Compact Editor для ZX Spectrum 128K
Поздняя версия Compact Editor для ZX Spectrum 128K

История сохранила для нас интереснейший пример раннего кросс-трекера, применявшегося для коммерческой разработки. Это Compact Editor, созданный Альберто Гонзалесом (Испания) в начале 1990-х годов для личного применения в своей работе наёмного видеоигрового композитора. С помощью собственного редактора им была создана музыка в играх для NES, Master System, Game Boy, и даже Game Boy Advance.

Удивительно, но данная программа работает на ZX Spectrum 128K. Она представляет собой типичный по интерфейсу простой трёхканальный трекер, вдохновлённый NoiseTracker для Amiga. Ноты озвучиваются местным звуковым чипом. Альберто набирал основу композиции в этом редакторе, после чего экспортировал бинарный файл с нотным текстом и переносил на ПК. Там другая программа преобразовывала его в ассемблерный листинг, в котором Альберто добавлял аранжировку, добавлял ударные и инструменты, и таким образом вручную дорабатывал под возможности конкретной целевой платформы.

Современные кросс-трекеры, конечно, не такие лютые, и делают всё автоматически. Работают они на современных ПК и операционных системах — Windows, Linux, MacOS. Как мы увидим чуть ниже, их довольно много. Традиционно каждый из них ориентирован на конкретный звуковой чип (синтезатор) и платформу, но в последнее время наметилась тенденция к универсальным, многоплатформенным решениям. При этом наличия реального звукового чипа не требуется, он эмулируется программно.

Подобные программы позволяют не просто создавать очень аутентично звучащую музыку, но и впоследствии проигрывать её на фактических старых устройствах, а также внедрять её в программы для таковых. Таким образом это не просто творческий инструмент, но конкретно инструмент кросс-разработки, и он часто применяется именно в таком качестве, для создания музыки в новых ретро-играх, демках и прочих натуральных ретро-компьютерных продуктах.

Конечно, нативные трекеры, коих также существует великое множество, по-прежнему доступны, и ими можно воспользоваться на реальном железе или в эмуляторах. Но с колокольни современного пользователя это довольно-таки неудобно, а порой просто болезненно. А для устройств типа игровых консолей они и вовсе не доступны, по крайней мере, были раньше — в недавнее время энтузиасты создали нативные трекеры для многих приставок, о чём я рассказывал в одной из недавних публикаций. Кросс-трекеры позволяют делать всё то же самое, но со всеми удобствами: крупный интерфейс, удобная настраиваемая раскладка клавиатуры, управление мышью, отсутствие проблем с переносом файлов, и многое другое.

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

В дальнейшем обзоре конкретных трекеров я буду группировать их в основном по платформам, так как почти для каждой из них есть больше одного трекера (например, два). Но в некоторых случаях больше подходит группировка по чипу, так как он используется на многих платформах, и один редактор может быть полезен для энтузиастов разных платформ.

Для Famicom/NES

Исторически одним из первых кросс-трекеров стал трекер для классической 8-битной игровой приставки от Nintendo — Famicom, она же NES, она же «Денди».

Появился он в 1999 году. Имя ему — NerdTracker 2 (сокращённо NT2). Несмотря на двойку в названии, первой версии программы не существует, это просто стилизация под название популярного в те годы Fast Tracker II. Как можно будет увидеть дальше, двойка в названии — частое явление в мире кросс-трекеров, причём в разных проектах за её появлением стоят разные причины.

NerdTracker 2 для MS-DOS
NerdTracker 2 для MS-DOS

NerdTracker работает только в MS-DOS, и поначалу даже не работал в Windows 95 в режиме совместимости с DOS. Интерфейс выполнен в текстовом режиме. По словам автора, он вдохновлён другим интересным трекером тех лет, Reality Adlib Tracker.

Трекер поддерживает все возможности стандартного APU, включая воспроизведение DPCM-сэмплов. Для работы требуется Pentium 233 МГц и выше, чтобы программно эмулировать звуковой чип. Эмуляция не очень точная, из-за чего возможно написать музыку, которая будет очень плохо звучать на железе — в реальном чипе запись регистра MSB частоты тона сбрасывает фазу, и при плавном слайде происходит щелчок.

Проект не вполне завершён, в нём отсутствуют довольно важные для удобства работы возможности типа поддержки мыши, Copy/Paste, или элементарных файловых диалогов. Но всё самое минимально необходимое есть, и несмотря на некоторую незавершённость, в этом трекере вполне можно писать довольно крутую музыку. Также присутствует исходный код проигрывателя на ассемблере, что позволило использовать музыку, созданную в NT2, в ранних любительских проектах.

SDL-порт NerdTracker 2 для Windows
SDL-порт NerdTracker 2 для Windows

Впрочем, большой популярности этот трекер не получил. Вероятно, изначальной причиной стала его ориентация на устаревшую ОС. И хотя в 2010 году появился SDL-порт, с помощью которого стало вновь возможно прикоснуться к данному артефакту древности, не применяя DosBox, на фоне народившихся к тому времени лучших альтернатив проект так и остался невостребованным.

Собственно, народившаяся лучшая альтернатива, ставшая одним из главных столпов кросс-трекерного чиптюна, влияние которой распространилось далеко за пределы начальной платформы — это великий и ужасный FamiTracker.

FamiTracker
FamiTracker

Первая версия FamiTracker появилась в 2005 году. Это трекер для нормальной человеческой ОС Windows, с человеческим же лицом, то есть стандартным интерфейсом, с поддержкой мыши, копирования, и весьма богатыми возможностями. Интерфейс оказался настолько дружелюбным, что его имитировали разработчики других проектов, а иногда и просто напрямую заимствовали на уровне исходного кода.

Помимо стандартного синтезатора APU в трекере были постепенно поддержаны все основные дополнительные звуковые чипы, доступные для Famicom: MMC5, VRC6, VRC7, N106, FDS, а на излёте, в последней официальной версии — Sunsoft 5B.

Удобный интерфейс и богатые возможности сделали FamiTracker очень популярным среди любителей сочинять чиптюн на досуге, для собственного развлечения. А добавленная со временем система плагинов, позволяющих экспортировать данные, также сделала его ценнейшим инструментом разработчика для Famicom/NES, и с тех пор подавляющее большинство музыки в игровых проектах создаётся с его помощью.

FamiTracker Qt сам по себе является форком FamiTracker CX
FamiTracker Qt сам по себе является форком FamiTracker CX

В 2015 году автор проекта, jsr, пропал с радаров, и судьба его осталась неизвестной. Проект перестал развиваться официально, но так как его исходный код был открыт, появилось множество форков. Одним из них стал FamiTracker Qt, изменяющий реализацию интерфейса с MFC на Qt, что отвязало проект от Windows и сделало его портируемым. Далее появились форки с расширенными возможностями. Я не буду углубляться в детали, лишь перечислю несколько: FamiTracker CX, FamiTracker Qt, 0CC-FamiTracker, j0CC-FamiTracker, Dn-Famitracker, и др.

Шакальный скриншот NESTracker
Шакальный скриншот NESTracker

В 2009 году появился новый проект кросс-трекера для NES, с говорящим названием NESTracker. Написан он был под платформу NET. Вышла всего одна версия, дальнейшего развития проект не имел. К сожалению, трекер не особо хочет работать на многих конфигурациях компьютеров, в том числе у меня он показывает какую-то ошибку, связанную с инициализацией звука. Документацией он также не снабжался, и всё, что удаётся найти по нему — шакальный скриншот и упоминание, что был реализован экспорт NSF.

MuseTracker, также известный как PornoTracker
MuseTracker, также известный как PornoTracker

Следующий, и, видимо, последний специализированный кросс-трекер для NES, появился в 2010 году. Разработал его thefox, автор демо High Hopes. Собственно, изначально проект и был создан для подготовки музыки к этой демонстрации. В ту пору он назывался PornoTracker, но в последней публичной версии 2012 года по многочисленным просьбам пользователей был переименован в MuseTracker. Содержание при этом не изменилось, это один и тот же проект, просто между версиями сменилось название.

Несмотря на применение фреймворка SDL, MuseTracker был изначально завязан на Windows. При этом он обладает полностью самодельным, нестандартным для Windows интерфейсом, чем, конечно, сильно проигрывает более дружелюбному и интуитивно понятному интерфейсу FamiTracker, и, вероятно, поэтому не завоевал популярности у пользователей.

Хотя в трекере поддерживается только стандартный синтезатор APU, присутствует довольно необычная особенность — поддержка PCM-канала для воспроизведения оцифрованных инструментов с частотой дискретизации 7.8 кГц специальным кодом. Предусмотрена возможность экспорта данных и код проигрывателя мелодий под названием MUSE для встраивания в игры, хотя и распространяемый в весьма специфическом полубинарном формате.

Бонусом хочу отметить ещё один музыкальный кросс-редактор для Famicom/NES, не обладающий интерфейсом трекера — FamiStudio. Появился он в 2019 году, и изначально являлся простой альтернативой FamiTracker’у для тех, кому привычнее современный «piano roll». В настоящее время это довольно продвинутый и удобный редактор, напоминающий незабвенный FL Studio, снабжённый экспортом и кодом для проигрывания музыки в играх. Проект продолжает развиваться до сих пор и доступен для Windows, Linux, iOS и Android.

Для Game Boy

Несмотря на огромную популярность другой главной восьмибитной платформы Nintendo, портативного Game Boy, среди музыкантов-любителей, она оказалась небогата на кросс-трекеры. Клубным музыкантам для выступлений они не подходят, им нужна портативность и нативные программы типа nanoloop и LSDj. Создание же homebrew-проектов на этой платформе набрало обороты только в недавнее время.

Paragon 5 Game Boy Tracker
Paragon 5 Game Boy Tracker

Тем не менее, первый кросс-трекер для оригинального Game Boy был создан в 1999 году и стал одним из самых ранних кросс-трекеров в целом. Он известен под разными названиями — Paragon 5 Game Boy Tracker, Beyond Tracker или даже просто GB Tracker.

Разработан этот проект компанией Paragon 5 (не путать со знаменитой Paragon Software) и применялся для создания музыки в ряде коммерческих игр для Game Boy Color — например, Shantae и Project S-11, а одним из пользователей этой системы был небезызвестный Джейк Кауфман, автор чиптюн-музыки во многих ретро-играх 2000-х годов. Широкой публике программа стала доступна ещё в 2001 году, но тогда была опубликована без процедур для воспроизведения музыки на реальном Game Boy. Процедуры были обнародованы с полной утратой коммерческой актуальности платформы, в 2014 году.

Трекер работает на Windows, но имеет самодельный текстовый интерфейс, визуально явно вдохновлённый популярным Impulse Tracker, только ориентированный на особенности синтезатора Game Boy. В остальном сходства с IT нет: эффекты в паттернах имеют другую нумерацию, их набор довольно минималистичный: арпеджио, вибрато, слайд вверх и вниз, громкость, скорость. Также довольно минималистично реализованы и инструменты, без программных огибающих, как в том же FamITracker.

Насколько мне известно, использование этого трекера так и осталось ограничено рамками коммерческих игр, а в любительских разработках он не применялся.

Интерфейс Trackerboy
Интерфейс Trackerboy

Следующий кросс-трекер Trackerboy, ориентированный на классический Game Boy, появился в 2019 году. Проект отличается кросс-платформенностью, но авторские сборки доступны в версиях только для 64-битных систем: Windows 10, Linux и MacOS. Исходный код открыт.

В интерфейсе Trackerboy визуально довольно явственно читается наследие FamiTracker, только с переставленными местами элементами. Впрочем, код сильно отличается, и судя по комментариям автора, он только вдохновлялся FamiTracker’ом, но разрабатывал свой проект самостоятельно.

К сожалению, у Trackerboy отсутствует критически важный компонент: экспорт в формате, пригодном для использования на реальном Game Boy или хотя бы в проигрывателях файлов GBS и VGM. Экспортер присутствовал в планах автора на будущие версии, но развитие проекта остановилось в 2023 году, и вроде бы пока не нашлось желающих исправить эту вопиющую недоработку.

Интерфейс hUGETracker
Интерфейс hUGETracker

Другой относительно свежий проект, hUGETracker, увидел свет в 2020 году, и стабильно развивается до сих пор. Он основан на интерфейсе очень популярного трекера OpenMPT, с которым хорошо знакомо множество пользователей, и это является большим плюсом в плане его дружественности некоторым группам населения. Несмотря на скорое появление других современных решений, таких как Furnace, этот трекер нашёл свою нишу в ориентации на разработчиков homebrew-проектов: он содержит драйвер hUGEDriver, позволяющий проигрывать музыку с небольшой нагрузкой на процессор и оптимальным расходом памяти. Благодаря этому он уже пригодился в ряде новодельных игр.

Предыдущие трекеры были ориентированы на 8-битные версии Game Boy, классическую чёрно-белую и цветную, обладающие одинаковым синтезатором звука APU. Их 32-битный последователь, Game Boy Advance, тоже оказался небогат на кросс-трекеры, но теперь уже по другой причине: его вычислительной мощности хватало на воспроизведение стандартных MOD-файлов, и специальные трекеры просто не требовались. Впрочем, один всё-таки появился.

Интерфейс BoyScout
Интерфейс BoyScout

Речь идёт о проекте BoyScout, также ставшим одним из ранних кросс-трекеров. Он появился в 2001 году. Понадобился он для того, чтобы задействовать звуковые каналы старого звукового синтезатора APU от 8-битных моделей, присутствующего в составе архитектуры GBA для обеспечения обратной совместимости (эта консоль умеет запускать и 8-битные игры).

Трекер работает на Windows и имеет свой оригинальный, ни на что не похожий интерфейс. Также отличается и реализация классической структуры композиции. Тут тоже есть список позиций, паттерны и инструменты, но реализованы они довольно своеобразным образом. В частности, паттерны здесь одноканальные, а их формат отличается для каждого из каналов APU. Эффектов типа слайда и вибрато здесь нет, а есть прямое управление параметрами аппаратной огибающей.

Фактически BoyScout является трекером для классического Game Boy и не использует никакие продвинутые возможности, доступные на Advance. Однако, процедуры воспроизведения на реальной консоли реализованы только в версии для Game Boy Advance, и поставляются в комплекте с программой в виде исходника на C. Теоретически их можно реализовать и для классических моделей.

Для ZX Spectrum и не только

Наш народно любимый ZX Spectrum вполне ожидаемо оказался богат на кросс-трекеры. Хотя не вполне ожидаемо только три из них имеют постсоветское происхождение. Делятся эти проекты на две категории: трекеры для звукового чипа AY-3-8910, в быту также известного как «музыкальный сопроцессор», и для классического сурового бипера. Для начала рассмотрим трекеры для чипа AY-3-8910, который я далее буду называть просто AY.

Самый знаменитый из них — Vortex Tracker II (сокращается как VT2), разработанный Сергеем Бульбой из Хабаровска. Разработка началась в 2000 году, но первая версия появилась лишь после перезапуска проекта, в процессе которого он и получил двойку в названии, и была представлена на суд публики в 2002 году.

Vortex Tracker II версии 1.2
Vortex Tracker II версии 1.2

Этот трекер работает на ОС Windows и использует стандартный пользовательский интерфейс, довольно-таки удобный — пожалуй, выскажу не самую объективную оценку, что это один из самых удачных трекерных интерфейсов. По архитектуре же это фактически копия самого популярного трекера для реального ZX Spectrum, ProTracker 3 (PT3). Здесь точно такая же структура композиции и возможности, за исключением послабления в некоторых ограничениях.

Трекер может загружать музыкальные файлы всех распространённых форматов музыки для AY, адаптируя их по мере возможности к формату PT3. Сохраняются модули только в формате PT3, который воспроизводится на реальном компьютере соответствующим проигрывателем, который также был доработан и улучшен автором. В качестве промежуточного формата используется обычный человеко-читаемый текст, что оказалось очень удачным решением, позволяющим легко интегрировать трекер с разнообразными парсерами и конверторами музыкальных данных. Например, с конвертором треков из формата OpenMPT.

Так как Сергей известен как один из ранних энтузиастов максимально точной и качественной эмуляции звукового чипа AY, трекер ожидаемо также имеет хорошее звучание и гибкие настройки. Поддерживается и режим двух звуковых чипов, играющих параллельно, что обеспечивает 6-канальную полифонию. Такая музыка может воспроизводиться на реальном компьютере с помощью устройства под названием Turbo Sound.

Уже многие годы VT2 сохраняет популярность и остаётся практически стандартом де-факто, причём не только в рамках платформы ZX Spectrum, но и для ряда других компьютеров и игровых консолей, оснащённых таким же звуковым чипом: MSX, Amstrad CPC, Atari ST и многие другие.

Сам Сергей давно прекратил активную поддержку проекта, но он дорабатывается другими энтузиастами. Несколько осложняет процесс тот факт, что трекер написан на Delphi. Существует несколько форков, последняя версия самого свежего из них датируется 2023 годом.

Интерфейс Mason AY II
Интерфейс Mason AY II

Трекер Mason AY II для Windows, появившийся в 2006 году, попытался стать альтернативой VT2, но по каким-то не очень понятным причинам не завоевал популярности. Возможно, дело в красивом, но нестандартном графическом интерфейсе, а может быть и в несколько ограниченных возможностях по сравнению с VT2. Однако, у этого проекта есть свои интересные особенности. Например, поддержка экзотического устройства Wild Sound, совместимого с AY, но дополняющим дополнительные звуковые возможности. Двойка в названии отсылает к предыдущей попытке реализации автором этого проекта в формате нативной программы для ZX Spectrum в 1995 году.

Интерфейс Arkos Tracker
Интерфейс Arkos Tracker

Довольно популярный за рубежом Arkos Tracker 2 для Windows, Linux и Mac вышел в 2017 году. Он создан членами демо-группы Targhan, ориентированной на главного конкурента платформы ZX Spectrum — компьютер Amstrad CPC. Впрочем, так как оба компьютера используют звуковой чип AY, трекер набрал популярность и у пользователей как ZX Spectrum, так и прочих платформ с этим чипом.

Двойка в названии Arkos Tracker означает буквально вторую версию, полностью переписанную с нуля. Была и первая версия, реализованная на платформе NET, о которой я мало что знаю, кроме того, что, в свою очередь, она базировалась на мощном нативном трекере STarKos для компьютера Amstrad CPC, вышедшем в 2004 году.

Благодаря такой развитой генеалогии, трекер получился весьма продвинутым. Из уникального: он поддерживает не только стандартный одиночный AY-чип, и даже не два, а любое произвольное их количество. Также есть поддержка сэмплов, проигрываемых параллельно с синтезированными каналами. Проигрыватель имеет реализацию не только для компьютеров на базе Z80, но и 68000 (Atari ST) и даже 6502 (Atari 8-bit) и 6809 (Vectrex). В том числе есть даже порт для советского УКНЦ с архитектурой микропроцессора PDP-11.

Интерфейс WYZTracker
Интерфейс WYZTracker

WYZTracker для Windows, реализованный на платформе NET, появился в 2015 году, а, возможно, и раньше. Этот проект двинулся в ином направлении: максимального упрощения. Он обладает весьма скромными возможностями, поддерживает только основные родственные платформы (MSX и CPC), а его интерфейс довольно неказист. Зато за счёт очень экономного расхода ресурсов, в частности, памяти, он пришёлся ко двору у разработчиков игр для ZX Spectrum 48K.

Интерфейс CHIPNSFX
Интерфейс CHIPNSFX

Трекер CHIPNSFX для Windows, история которого началась в 2017 году, двинулся в том же направлении, что и WYZTracker, и успешно конкурирует с ним на его же поле. Здесь также очень простой интерфейс и минимум возможностей. Зато очень компактный формат музыкальных данных и код проигрывателя, что важно в играх для оригинальной 48K модели.

Редактор Beepola
Редактор Beepola

Особняком в этом разделе стоит трекер Beepola для Windows, появившийся в 2010 году. В отличие от вышеперечисленных программ, он ориентирован не на звуковой чип AY, а на бипер. В трекере поддерживается несколько разных программных синтезаторов, как извлечённых из классических игр, так и новых разработок на момент появления трекера. Созданную музыку можно экспортировать в различных форматах, в том числе в виде исходников с кодом проигрывателей на ассемблере Z80. Интерфейс трекера является примером оправданного минимализма, который сделал его очень простым в освоении и существенно поспособствовал росту популярности «новодельной» биперной музыки.

Для Sega и не только

В эту группу я определил программы, так или иначе связанные с игровыми консолями производства компании Sega. Во-первых, это трекеры для звукового чипа SN76489, также известного как PSG, применявшегося в 8-битных Sega Master System и Game Gear, а также на ряде других платформ. Во-вторых, это трекеры для звукового чипа FM-синтезатора YM2612 семейства OPN2 и родственных ему — у компании Yamaha есть ряд разных звуковых чипов, сильно пересекающихся по возможностям и условно-совместимых между собой.

В 16-битной приставке Sega одновременно применяются и PSG, и OPN2 синтезаторы, а ориентированные на эту консоль трекеры могут поддерживать один или оба чипа. Также в японской версии Master System применялся модуль расширения с более простым FM-синтезатором OPLL (YM2413), и для него тоже есть свои трекеры.

Интерфейс Mod2PSG2
Интерфейс Mod2PSG2

Трекер Mod2PSG2 для Windows появился в 2007 году. Он ориентирован на Master System и Game Gear и поддерживает только PSG-чип. Обладает весьма своеобразным нестандартным интерфейсом и удивительно неудобным редактором инструментов. Однако, это был важный шаг для разработчиков homebrew-проектов для 8-битных платформ Sega. Двойка в названии обозначает просто вторую версию. Судьба первой неизвестна, вероятно, она никогда не была доступна широкой публике.

MVSTracker для Windows был создан примерно в 2005 году и изначально ориентировался на аркадную платформу Neo-Geo. В 2006 году была создана модификация MVSTracker MD от другого автора 2006 году, адаптирующая его для Sega Genesis.

Интерфейс MVSTracker MD
Интерфейс MVSTracker MD

В оригинальной форме трекер поддерживал чип YM2610, известный как OPNB, обладающий четырьмя каналами FM-синтезатора, совместимыми с каналами чипа YM2612, применяемого в 16-битных консолях Sega. Помимо FM-части он поддерживал и шесть каналов ADPCM-A, воспроизводящих сжатый цифровой звук. В версии MD присутствует только четыре FM-канала и ничего более, то есть поддержка возможностей платформы очень сильно ограничена.

История применения оригинальной версии, как и сама она, теряется в веках, но существует информация, что проигрыватель для Z80 некорректно работал на реальном железе из-за отсутствия корректных задержек при обращении к регистрам чипа. Сейчас доступна только версия MD, и по ней можно сказать, что трекер обладает крайне базовыми возможностями. Этот недостаток привёл к появлению следующих двух проектов.

Интерфейс TFM Music Maker v1.52
Интерфейс TFM Music Maker v1.52

Трекеры TFM Music Maker и VGM Music Maker для Windows были созданы в 2007 и 2012 годах, собственно, автором этого текста. По сути это одна и та же программа, с которой в процессе развития случилась переориентация, схожая с MVSTracker. Изначально она предназначалась для устройства TurboSound FM для ZX Spectrum, содержащего два звуковых чипа YM2203 (OPN), дающих в сумме 6 каналов FM-синтезатора, совместимого с Sega Genesis.

Интерфейс VGM Music Maker v1.1
Интерфейс VGM Music Maker v1.1

Позже на базе оригинальной версии был создан трекер, ориентированный уже на Genesis, с поддержкой не только FM-каналов, но и PSG, и сэмплов для ЦАП-режима одного из каналов YM2612. Принципиальных различий в интерфейсе этих программ нет. Полноценный звуковой проигрыватель для реального железа для VGM MM создан не был, вместо него использовался сторонний проигрыватель файлов VGM-формата, которые экспортировались из трекера.

Перечисленные проекты на некоторое время закрыли потребность в инструментах создания музыкального сопровождения в любительских играх на платформах Sega. Но они были далеки от совершенства, и ныне их вытеснил трекер-комбайн Furnace, о котором я расскажу немного позже. Пока же кратко отмечу несколько проектов «промежуточного звена», ориентированных на специфические нужды.

Интерфейс SnevenTracker
Интерфейс SnevenTracker

SnevenTracker для SN76489 был создан в 2016 году на базе кода FamiTracker. Он на некоторое время закрыл вопрос альтернативы Mod2PSG2 с очень удобным интерфейсом и гораздо более продвинутыми возможностями. Я также создал форк с поддержкой стереофонической панорамы на Game Gear и более развитым управлением режимами шумового канала, позволяющими полноценно раскрывать его потенциал.

Интерфейс LLTracker
Интерфейс LLTracker

LLTracker для чипа YM2413 был создан в 2021 году, опять же мной, также на базе FamiTracker. По сути я убрал всё, кроме поддержки совместимого с OPLL чипа VRC7, которому заменил стандартные пресеты. Это было проделано для экспериментов с музыкой для этого чипа в рамках хорошо знакомого удобного интерфейса.

Наконец, довольно необычный проект SnoozeTracker 2017 года является реализацией кросс-трекера для SN76489 на игровом движке Unity. Не знаю, кому и зачем могло понадобиться такое чудо, но почему бы и нет. По крайней мере, это любопытно. К тому же, этот трекер поддерживает воспроизведение сэмплов, до четырёх штук одновременно, что сильно расширяет возможности этого весьма примитивного звукового чипа.

Для платформ Atari

Хотя компания Atari за годы присутствия на рынке создала довольно большое количеств самых разнообразных платформ, включая компьютеры, игровые консоли и портативные устройства, а явление homebrew-игр в частности начало набирать популярность именно на игровой консоли Atari 2600, существует на удивление мало кросс-трекеров. Но, конечно, они есть.

Raster Music Tracker
Raster Music Tracker

Первый проект, который хочется упомянуть — чешский Raster Music Tracker (RMT), ориентированный на 8-битную линейку компьютеров Atari, оснащённую звуковым чипом POKEY. Это один из ранних кросс-трекеров для Windows, появившийся в 2003 году. История проекта прервалась в 2011 году с гибелью его автора, но впоследствии поддержка была продолжена энтузиастами. По сей день RMT остаётся лучшим трекером для POKEY, и я бы сказал, что наряду с FamiTracker и Vortex Tracker II, одним из самых удобных кросс-трекеров в целом.

Интерфейс трекера смешивает стандартные элементы управления Windows и текстовый режим, в котором реализованы редакторы нотного текста, списка позиций и прочих параметров. Трекер имеет развитую систему инструментов, позволяющую раскрывать потенциал этого довольно сложного звукового чипа, поддерживает два чипа для стереофонического звучания, и, конечно, имеет экспорт данных и проигрыватель для использования музыки на реальном компьютере.

Интерфейс TIATracker
Интерфейс TIATracker

TIATracker, появившийся в 2016 году, и предназначенный для игровой консоли Atari 2600 и её звукового синтезатора, содержащегося в чипе TIA, представляет собой другую крайность в области удобства: он имеет весьма неочевидный и неудобный, хотя и симпатичный интерфейс. Однако, отсутствие альтернатив и сложность применения местного звукового чипа в музыкальных целях позволяют закрыть глаза на некоторые неудобства. Что я и сделал, когда использовал его в практических целях, о чём есть статья на Хабре.

Проект был опубликован в версии для Windows, но так как он имеет открытый исходный код и базируется на Qt и SDL, теоретически его можно использовать и на других платформах. Конечно же, присутствует и весьма компактный проигрыватель музыки для реальной консоли.

Enotracker
Enotracker

Также существовал довольно многообещающий проект enotracker, представляющий собой кросс-альтернативу для популярного нативного трекера Theta Music Composer для компьютеров Atari со звуковым чипом POKEY, в том числе с двумя и четырьмя чипами сразу — доработка, выполнявшаяся энтузиастами. Вышла только альфа-версия в 2014 году. К сожалению, редактировать трек в ней нельзя. Проект был заброшен автором, и несмотря на открытый исходный код, желающих его продолжить так и не нашлось. Вероятно потому, что он написан на не самом популярном языке D.

Для Super Nintendo

Любительская разработка для игровой консоли Super Nintendo до сих пор не сильно развита, так как эта платформа довольно сложна в освоении и одновременно требовательна к качеству контента. Для решения вопроса озвучки здесь часто используются конвертеры из обычных трекерных форматов типа XM и IT, и обычно этого хватает. Но парочка специализированных кросс-трекеров тоже есть.

Интерфейс трекера SNESGSS
Интерфейс трекера SNESGSS

Трекер SNES Game Sound System для Windows, также известный как SNESGSS, разработал снова я. Да, я сделал немало программ такого типа для самых разных платформ, поэтому и пишу про них — кому же это делать, если не мне? Проект был создан в 2017 году, чтобы заменить предыдущее моё же решение с конвертером музыки из XM, которое с усложнением игровых проектов начало доставлять неудобства.

Целью создания проекта было обеспечение лучшего контроля над итоговым звучанием, подготовки более качественных сэмплов, а также эффективного использования звукового ОЗУ системы. Дело в том, что в 64 килобайта памяти должны помещаться и все необходимые сэмплы для музыки, и сэмплы для звуковых эффектов. При этом музыка в играх меняется в зависимости от текущего уровня, а одни и те же звуковые эффекты нужны в разных уровнях. В моём решении сэмплы всех композиций и эффектов загружаются однократно, а далее меняются только музыкальные данные. Эффекты при этом по сути представляют собой короткие музыкальные композиции, и могут задействовать комбинации различных сэмплов.

Данное решение осознанно создавалось минималистичным, с простым стандартным интерфейсом, без особых продвинутых возможностей, чтобы решить задачу как можно скорее, не затягивая разработку проекта на десятилетие, что часто случается с подобными вещами. Так и вышло, но пользовательский опыт несколько пострадал. К тому же, в этом трекере я впервые опробовал идею с уходом от классической структуры трекерной композиции: вместо списка позиций используется один общий нотный текст и повторы блоков, что также пришлось по вкусу не всем пользователям.

Интерфейс SnesTracker
Интерфейс SnesTracker

Другой трекер для Super Nintendo, носящий весьма оригинальное название SnesTracker, находится в аду разработки уже длительное время, с 2015 года, и до сих пор не вышел из состояния пре-релиза. Последняя превью-версия опубилкована в 2022 году. Трекер портабельный, работает на Windows и MacOS. Обладает своим собственным минималистичным текстовым интерфейсом. Так как проект не завершён, в нём всё ещё отсутствуют многие возможности, но что-то делать уже можно.

Для Commodore 64 и SID

Не только ZX Spectrum и Atari едиными живы кросс-трекеры для домашних компьютеров. И конечно, для Commodore 64, знаменитого прежде всего своим звуковым чипом SID, было создано некоторое их количество. Что интересно, все они кросс-платформенные и доступны для Windows, Linux и MacOS.

Интерфейс GoatTracke
Интерфейс GoatTracke

Главным среди них является GoatTracker, также часто встречающийся под названием GoatTracker2. Его разработка началась в 2003 году или даже ранее. В отличие от прочих трекеров, здесь двойка означает просто версию 2.xx, появившуюся в 2007 году, а так это та же самая программа.

Трекер имеет весьма выдающиеся возможности, позволяющие раскрывать потенциал весьма непростого звукового чипа SID, и обладает хорошей программной эмуляцией его звучания. Однако, за возможности пришлось платить удобством: этот трекер похож на hex-редактор, как никакой другой. И действительно: инструменты здесь создаются в виде нескольких последовательностей hex-чисел, и для понимания их устройства нужно очень глубоко изучать документацию и на трекер, и на звуковой чип. Сам интерфейс также отличается исключительным неудобством.

Ситуацию с интерфейсом пытались улучшить различные форки проекта. Самый актуальный на данный момент — GTUltra, разрабатывавшийся в 2022-23 годах. К сожалению, он публиковался только в виде исходного кода для последующей самостоятельной сборки под этот ваш любимый Linux, и поэтому оценить его преимущества не так-то просто.

Интерфейс CheeseCutter
Интерфейс CheeseCutter

Трекер CheeseCutter 2009 года также попытался исправить ситуацию и создать альтернативу страшному и ужасному goattracker, и у него это получилось: он имеет почти такой же текстовый интерфейс, полный hex-чисел. Это тоже хороший трекер со сравнимыми мощными возможностями, но его освоение также требует больших усилий.

Интерфейс SID Factory II
Интерфейс SID Factory II

Окончательно закрыть вопрос отсутствия удобного интерфейса в 2020 году попытался автор проекта SID Factory II. Да, опять двойка, на этот раз потому, что проект является реинкарнацией одноимённого трекера для реального Commodore 64. Это опять хороший мощный трекер, и снова такой же текстовый интерфейс с hex-ами, причём, судя по всему, на этот раз он сделан таким сознательно, для простоты перехода пользователей с goatracker и CheeseCutter. Что поделать. Таков путь.

Для Adlib и OPL2/3

Такому специфическому явлению, как трекеры для Adlib-совместимых звуковых карт для старых ПК, я планирую посвятить отдельный рассказ в будущем. Пока упомяну лишь парочку из них в контексте кросс-трекеров.

Оригинальные трекеры предназначены для операционной системы MS-DOS и являются вполне традиционными «нативными» трекерами, работающими на своей целевой платформе напрямую с железом. А именно, со звуковым чипом OPL2, который во времена создания этих трекеров был непременным атрибутом звуковых карт типа Adlib, Sound Blaster, и совместимых с ними.

Со временем пара популярных трекеров такого рода обзавелась свежими версиями уже для современных ПК и актуальных операционных систем. Чип синтезатора OPL2 к тому времени давным-давно исчез из состава звуковых карт, и ему на замену была встроена программная эмуляция, что формально перевело эти версии программ в категорию кросс-трекеров, и обеспечило им попадание в этот обзор.

Windows-версия Reality Adlib Tracker
Windows-версия Reality Adlib Tracker

Reality Adlib Tracker (RAD) изначально вышел в 1995 году. Тогда трекер работал только с OPL2, а порт 2017 года для Windows и Mac обзавёлся минимальной поддержкой дополнительных возможностей OPL3. В остальном это всё тот же старый добрый RAD, которым теперь можно пользоваться, не залезая в DosBox.

Windows-версия Adlib Tracker II
Windows-версия Adlib Tracker II

Adlib Tracker II, существующий с 2000 года, также изначально поддерживал только OPL2, но постепенно обрастал новыми возможностями, и в настоящий момент дорос до одного из самых мощных трекеров для OPL3. С 2013 года версии трекера доступны для Windows и Linux.

Некоторые другие

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

Интерфейс SAA1099Tracker
Интерфейс SAA1099Tracker

Проект SAA1099Tracker ориентирован на звуковой чип SAA1099, применяющийся в компьютере SAM Coupé, а также в некоторых других устройствах, и даже в самых ранних звуковых картах для IBM PC, включая самый первый Sound Blaster. Появился этот трекер в 2012 году, а его необычной особенностью, помимо достаточно необычной целевой платформы, является работа в веб-браузере. Можно пройти по ссылке и послушать готовую музыку, или написать свою.

Интерфейс трекера baby-k
Интерфейс трекера baby-k

Для предшественника Commodore 64, компьютера VIC-20, обладающего собственным уникальным примитивным звуковым чипом, примерно с 2021 года существует музыкальный формат и проигрыватель baby-k. К ним прилагается одноимённый кросс-трекер, работающий в браузерной среде VIXXEN20, которая имитирует устройства VIC-20, но позволяет работать с ними кодом на JavaScript. Несмотря на браузерность, интерфейс трекера не сильно дружественен пользователю, нужно читать инструкцию.

Интерфейс BambooTracker
Интерфейс BambooTracker

Последнее, что хочется упомянуть — BambooTracker для звукового чипа YM2608, который применялся в японском компьютере NEC PC-8801/9801 и некоторых аркадных игровых автоматах. Этот чип принадлежит к семейству Yamaha OPN (OPNA), то есть совместим с FM-синтезатором Sega Genesis. Создан проект в 2018 году на базе форка FamiTracker Qt, что подарило ему удобный и при этом кроссплатформенный интерфейс.

Универсальные трекеры

Как вы уже наверняка заметили, на протяжении многих лет почти каждый следующий автор кросс-трекера для решения стоящих перед ним задач заново изобретал велосипед — заново писал свой собственный редактор, со своими уникальными особенностями, пользовательским интерфейсом и горячими клавишами. А если вы музыкант-универсал, интересующийся разными звуковыми чипами, вам требовалось освоить с десяток интерфейсов. Весьма непродуктивно.

К счастью, к 2010-ым годам в некоторые светлые головы, включая мою собственную, закралась мысль: но ведь по сути трекеры отличаются, что называется, бэкендом, а пользовательский интерфейс, то есть редактор входных данных, вполне мог бы быть и один и тот же. Уж для нотного текста так точно, а редактирование инструментов может немного отличаться согласно возможностям чипов. Так появились универсальные трекеры, также известные как «мультитрекеры».

Интерфейс Deflemask
Интерфейс Deflemask

Первой ласточкой стал кросс-платформенный трекер DefleMask в 2011 году. Стартовая версия поддерживала только редкий чип YMU759, применявшийся в мобильных телефонах с полифоническим звонком. Но вскоре к нему добавилась поддержка Sega Genesis с её двумя чипами SN76489 и YM2612, потом консоли PC Engine, Game Boy, NES, и некоторых других. На долгие годы это сделало проект самым популярным кросс-трекером, несмотря на некоторый недостаток — это единственная платная программа среди всех перечисленных в статье.

1tracker в сборке под Windows
1tracker в сборке под Windows

Другой первой ласточкой, появившейся в 2012 году, стал мой собственный кросс-платформенный 1tracker, о котором я когда-то подробно рассказывал на Хабре. Поддержка звуковых устройств в нём в основном ограничивается различными биперными движками для ZX Spectrum 48K, коих поддержано более 50 штук, но также есть и базовая поддержка некоторых других платформ и чипов, включая SN76489 и YM2413 (OPLL).

Помимо экспериментов с форматом трекерного редактора, отходящим от классической структуры со списком позиций, 1tracker открыл и другое направление развития мультитрекеров. Если в DefleMask новые платформы можно было добавлять только редактированием его собственного исходного кода, в 1tracker эта возможность, с некоторыми ограничениями, реализована с помощью внешних скриптов, которые могут писать сами пользователи согласно своим особым потребностям.

Интерфейс bintracker
Интерфейс bintracker

В том же направлении двинулся и проект bintracker 2019 года. Но здесь возможность переконфигурации была реализована в рамках собственной скриптовой платформы MDAL и применения эмулятора MAME для воспроизведения звука. Наряду с 1tracker этот проект занял позицию экспериментального инструмента — это не особо популярные программы, позволившие энтузиастам пощупать новые горизонты в своих нишах.

В 2021 году назревшую потребность в хорошем и бесплатном мультитрекере попытался закрыть форк FamiTracker под названием E-FamiTracker. К знакомому удобному интерфейсу и поддержке звуковых чипов NES и Famicom добавились вымышленный чип 5E01, реальный AY8930. Началось добавление чипов SAA1099 и SID, но на этом проект остановился.

Интерфейс трекера Furnace
Интерфейс трекера Furnace

Но это было к лучшему, ибо в том же 2021 году на смену ему пришёл Furnace — убер-проект, практически закрывший тему кросс-трекеров. По сути это клон DefleMask, но лишённый коммерческой составляющей и взамен снабжённый силой комьюнити и открытого исходного кода. Он совместим с файловым форматом DefleMask, но помимо всех его возможностей поддерживает несметные полчища других платформ, форматов и звуковых чипов, от традиционных до самых экзотических. В настоящее время это очевидный выбор любого ретро-ориентированного музыканта.

Заключение

Как бы я ни старался, а трекеры всё не кончаются, и даже этот весьма поверхностный обзор всего одной их категории потянул на одну объёмную статью. Но тема раскрыта ещё далеко не полностью, и, вероятно, в будущем я снова вернусь к ней, чтобы осветить вам иные грани этого довольно занимательного явления.

© 2025 ООО «МТ ФИНАНС»