Сторонние проекты на базе ZXTune

Всем привет!

Для всех тех, кому нравится идея и функционал ZXTune, но кого воротит от убогого дизайна официальных приложений или тошнит от меня лично, предлагаю список альтернативных программ, которые используют исходный код проекта (да, он таки opensource) и позволяют делать примерно то же самое, но по другому (не покидая любимого плеера/браузера/нужное подчеркнуть). Короче, кто о чем, а вшивый о бане.


Интеграция с движком DizzyAge
Самая первая попытка заюзать код в стороннем проекте. В конечном итоге вылилось в .dll и некоторые доработки в движке. Первый блин не то чтобы комом, но были выявлены многие ошибки (в том числе и архитектурные). Тем не менее, все оказалось гораздо проще, чем ожидалось.
Пока что выпущена только одна игра на этой версии движка.

Плагин для foobar2000 от djdron
Пожалуй, самый первый опыт ковыряния моего кода другим человеком. Километровые треды переписки в почте, исправления найденных косяков, доработка под специфичные, но адекватные требования, отстаивание непривычных, но эффективных дизайнерских решений, вот это вот все.
Примерно в это же время djdron также сделал плагин для winamp, но, в силу крайней убогости последнего с точки зрения организации плагинов, почил в бозе.

Плагин для bass.dll от ZXED
Проект от еще одного заинтересованного пользователя. Поскольку официального ZXTune SDK нет, поддержка также осуществлялась через переписку по почте. На базе этого плагина появилась поддержка в AIMP а также легкая попаболь при виде числа скачиваний.

Плагин для XMPlay от ZXED
На волне энтузиазма тот же пользователь запилил плагин для другого плеера. К сожалению, автор не захотел применить все мои рекомендации по поводу best practice разработки плагинов…

Плагин для XMPlay от djdron
… а вот djdron таки сдался применил и получил более стабильный и экономичный плагин гораздо меньшего размера. Разницу «до» и «после» применения можно оценить по разным версиям вышеупомянутого плагина для foobar2000.

BZRPlayer
Судя по тому, что автор никак не консультировался по поводу кода (и так и не выложил его, хотя обещал), собрал все возможные грабли. ССЗБ:)

SpectreZX от Juergen Wothke
Полный крышеснос и взрыв мозга! С помощью проекта emscripten, черной магии, молотка и какой-то матери чувак сконвертировал код ZXTune (а также некоторых других библиотек, рекомендую посмотреть его профиль на github) с С/С++ на javascript. Не все форматы играются правильно, не обошлось без длительной и интенсивной переписки, куча пометок «в будущем надо бы переделать», но результат впечатляет. Управление плейлистом и дополнительная информация скрывается под кнопкой 'What's this?' Свои треки можно слушать, перетаскивая на изображение zx-spectrum. Для работы требуется современный браузер с поддержкой WebAudio API.

ZX-ART от moroz1999
Для обеспечения кроссбраузерности и надежности moroz1999 использовал самый кондовый метод- предварительный рендеринг всей музыки в mp3/ogg и ее прослушивание в браузере через flash/html5. И вот этот самый рендеринг делается через (внезапно!) CLI версию плеера (еще раз к вопросу «GUI наше все, консоль нинада»). Так что все претензии по неправильному воспроизведению с примерами можете слать лично мне и не тревожить больше никого:)

Собственно, вот и весь список на данный момент. Если кто знает еще какие проекты- дополняйте в комментах.

P.S. Пользуясь случаем, сообщаю о появлении официальной версии плеера под MacOS X. Качайте, запускайте, слушайте.

78 комментариев

avatar
Экспорт psg нужен, потому что работа с командной строкой — моветон.

Заодно: зачем программа(по крайней мере не новая версия) хранит файлы неизвестно где, в Documents?
avatar
Заодно: зачем программа(по крайней мере не новая версия) хранит файлы неизвестно где, в Documents?
Так «неизвестно где» или все же «в Documents»? А где должна?
avatar
Пользовался прежней версией, r3190
получаю трешак в:
«C:\Users\dk\AppData\Local\ZXTune\Playlists»
avatar
И что тебя смущает в хранении программного барахла в том месте, которое для этого предназначено?
avatar
Хуже. Если делать portable, имхо удобнее playlist хранить рядом с прогой.
avatar
А если не делать portable, то получишь playlist еще в более глубокой жопе под названием AppData\Roaming, созданной специально для говнопрограмм, которые безальтернативно срут там где запущены.
avatar
хм. мои не срут где поопало, как правило(: а что с конверсией в psg? тяжело?
avatar
а что с конверсией в psg? тяжело?
Трудозатраты больше чем профит. Если ты не в силах один раз написать bat файл для конверсии через CLI и дальше конвертировать все мышкой через drag'n'drop, то значит тебе это не надо. А больше никто и не просил особо.
avatar
TOJICTO

к тому же в ВК просили вроде бы.
avatar
Там много всякой херни просили. Ты тоже, но результат так и ниасилил. Так что в сад.
avatar
а, ну ясно. За неимением аргументов начинаешь хамить.
Кстати, любитель четких ТЗ, можешь похоронить свое сделанное, я нашел лучшее. Адью.
avatar
Искренне за тебя рад. Очень надеюсь, что автор этого лучшего эффективнее меня умеет переводить нечеткое словоблудие в четкое ТЗ.
avatar
Словоблудие твое наблюдаю я. никакой конкретики.
avatar
Кстати, а что ты нашел для конверсии/проигрывания?
avatar
Есть такой амстрадовский формат.ayc, который ведущий девелопер еле осилил. Что мне очень нужно — конверсию из .sndh/.snd в psg или в .ym(в идеале).
avatar
SpectreZX — кандидат на прямую инсталляцию на zxart лет эдак через 5.
avatar
Ну не знай. Жрет многовато и проца и памяти. На мобилах тоже статус этого апи непонятен.
avatar
Отсюда и 5 лет, сейчас браузеры к этому объективно не готовы :)
avatar
Версия ZXTune под Ios планируется?
avatar
Нет.
1) нет устройств (эмулятор не ок)
2) нет желания изучать ObjC (который нахрен еще где нужен)
3) нет времени… (самый тяжелый фактор)

Но если кто возьмется, готов помочь по мере сил со всем, что касается библиотеки.
avatar
Эмуль — ок, а Obj-C уже и не нужен, для гуя достаточно няшного Swift'а. А остпльное и на c/c++ прекрасно скомпилится. 3-й фактор только делегированием, наверное ;)
avatar
займешься?
avatar
Сразу как третий фактор у меня наладится. Но если честно — я так и не въехал как zxtune пользоваться как библиотекой.
Правда давно это было — может с тех пор проще стало (или, вдруг, сам поумнел :)

А так-то мне бы и для других нужд пригодился.
avatar
Библиотеку можно сделать с любым интерфейсом, подходящим под задачи.
Например, для DizzyAge была одна либа (ее интерфейс потом народ юзал в плагинах к плеерам, но со статической линковкой — дикий бред), а для андроид версии была другая. Но там, по чесноку, только тонкая прослойка отличается, внутри все то же самое по большому счету.
avatar
Obj-C уже и не нужен, для гуя достаточно няшного Swift'а
Ну и в чем приниципиальная разница между этими языками с точки зрения необходимости изучать и применения этих знаний за пределами ябловселенной?

А остпльное и на c/c++
Ну это понятно. Тут все упирается в поддержку native interface у этого самого свифта или как там его. Но насколько я знаю, приложения iOS анально огорожены на предмет загрузки стороннего кода в динамических библиотеках.
avatar
Swift и Rust очень близки, если знаешь/интересовался одним — второй как родной. И всё это проще и приятней чем obj-c. Ну и в теории swift уже выпущен под opensource. Но это если тебе есть до них дело.

Про динамическую линковку не в курсе, вроде бы должно быть всё разрешено, там порядком пересмотрели все ограничения с анальноотгороженных времён :)
avatar
И да, анализируя интерес юзеров к версии под декстопный мак (а ведь тоже многие просили), делаю вывод о ненужности этого дела для пользователей. А значит и не стоит тратить силы, лично мне ведь это не надо.
avatar
Ну, сравнивать уровень интереса не стоит, всё-таки пользователей iOS на порядки больше, чем пользователей MacOS X.
avatar
Напрямую, конечно, не стоит. Но проэкстраполировать можно:)
avatar
И экстрпаолировать тоже не надо — на iOS народ проще и охотнее покупает программы. Потенциальных юзеров можно достаточно набрать, если внимание привлечь и на 8бит-ностальгии сыграть =)

Но, возможно это не то, чем тебе интересно было бы занять.ся
avatar
А сколько из этих пользователей владеют JB устройствами? Ибо официально попасть в маркет — no chance.
avatar
Почему это no chance? Есть довольно много аналогичных плейеров, которые тянут музыку с внешних ресурсов и каталогов, знаю как минимум один для AY (не спектрумовский) и для SID.

И JB сейчас не особо нужен для установки разработческих приложений — с тех пор как разрешили делать сборки для отладки на своих устройствах всем, даже тем кто не платит 99$ в год за разработческую подписку.
avatar
А как насчет GPL приложений? Они уже разрешены в сторе?
avatar
VLC в итоге появился, но я точно не знаю что там подкрутили. Вроде условия в аппсторе :)
avatar
Давно (наверное до Dizzy Age) был развесистый GUI-фронтенд для CLI-конвертора, которым я нарезал музло по паттернам с разными частотами сопроцессора и проч :) пользовался им я (на MacOSX) и наверное Nik-O (в спец-сборке для Windows через Cocotron). Я тебя тоже как раз замучил по доп. параметрам cli: скважность, произвольная частота сопроцессора, вывод в wav с разрезкой по паттернам, указание частоты прерываний с точностью до мс :)

Всё музло в AY-pod отрендерено в ZXtune.
avatar
Ну вот, пожалуйста. Кто-то и с CLI продукт сделает, а кто-то с GUI нигуя сделать не может. Как в той поговорке про танцора:)

ЗЫ. Что такое AY-pod?
avatar
AYpod (Antique toY podcast) — это подкаст о спектрум-музыке. 8й выпуск.
Хостился на rpod.ru (но почил в Бозе вместе с последним).
avatar

Нашёл, работает =)
Вроде-как февраль 2010 года:
avatar
А консольная версия где-то есть ещё?

А то попробовал вот сейчас версию для мака: ZXTune жрёт 110% и при этом заикается как не в себя =(
avatar
Ну и QT, конечно, кроссплатформенный красавец =)
avatar
Дёшево и сердито:)
Надеюсь когда-нибудь перейти на qt5, там вроде не все так печально…
avatar
Да я так, внешний вид для плейера только во времена винампа что-то значил =)
avatar
zxtunes123, я, конечно, нашёл =) но не понял как под darwin собирать =)
avatar
Дошло как собирать =)

Но почти в самом конце (надеюсь)компиляция прервалась:
ld: library not found for -lboost_thread
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [../../bin/darwin/release/zxtune123] Error 1
avatar
avatar
О! спасибо большое! (И, кстати, загрузка процессора не более 2-3%.)
Но на самом деле хотелось бы разобраться чего же ему не хватает для компиляции =)

У меня пара вопросов: есть ли стандарт или соглашение о том как сохранять TS-PSG или TS-RAW? Или просто сохранять как два файла — по одному на чип (но как тогда объяснить плейеру, что это два связанных файла и их нужно проигрывать одновременно?).

И, насчёт RAW-формата, что zxtune123 ожидает на входе? Шестнадцатибайтные последовательности значений регистров по фреймам (от 0 к 15) или четырнаддцатибайтные?
avatar
А то что-то ни 16байнтый ни 14байтные последовательности не играются =(
avatar
Но на самом деле хотелось бы разобраться чего же ему не хватает для компиляции =)
Нужен boost.

У меня пара вопросов: есть ли стандарт или соглашение о том как сохранять TS-PSG или TS-RAW? Или просто сохранять как два файла — по одному на чип (но как тогда объяснить плейеру, что это два связанных файла и их нужно проигрывать одновременно?).
Что такое TS-RAW? И зачем использовать PSG? Накрайняк, можно два PSG запихать в TS-контейнер, тогда будут играться одновременно.

И, насчёт RAW-формата, что zxtune123 ожидает на входе? Шестнадцатибайтные последовательности значений регистров по фреймам (от 0 к 15) или четырнаддцатибайтные?
Ничего такого он не ожидает.
avatar
1) boost установлен. скажи где и на какой версии xcode/cli-tools ты компилишь, что у тебя всё хорошо? =) у меня самые последние версии (недавно систему переставил).
2) что такое TS-контейнер? где есть описание формата этого контейнера?

TS-RAW — это RAW для TS, и под RAW я понимаю просто пофреймовый дамп всех регистров без компрессии, вопрос: что под RAW понимает zxtune123 и ты?

Есть какой-то plain-формат который понимает zxtune123 — просто регистры без всяких манипуляций и компрессии?
(PSG1 и PSG2 предполагают что-то вроде сжатия исходных данных.)

Мне нужна простая адресация любого регистра в плоском файле для быстрой манипуляции значениями, а также простой способ заставить это всё играть без предварительной перекодировки — был уверен что zxtune123 раньше дампы регистров засасывал без проблем.
avatar
1) boost установлен. скажи где и на какой версии xcode/cli-tools ты компилишь, что у тебя всё хорошо? =) у меня самые последние версии (недавно систему переставил).
Вроде самая свежая версия xcode. boost собирал сам свой.

2) что такое TS-контейнер? где есть описание формата этого контейнера?
Два склеенных файла и футер в формате:
— 4 байта идентификатора типа первого модуля (обычно не используется)
— 2 байта длина первого модуля
— 4 байта… второго модуля
— 2 байта длина второго модуля
— 4 байта сигнатура '02TS'

TS-RAW — это RAW для TS, и под RAW я понимаю просто пофреймовый дамп всех регистров без компрессии, вопрос: что под RAW понимает zxtune123 и ты?
То же самое. zxtune123 только на выход и только для одного чипа.

Есть какой-то plain-формат который понимает zxtune123 — просто регистры без всяких манипуляций и компрессии?
Совсем без манипуляций нет. Ближайший аналог того что тебе надо- это несжатый формат .ym.

был уверен что zxtune123 раньше дампы регистров засасывал без проблем.
Никогда такого не было. Ибо отличить «сырой дамп регистров» и просто какие-то мусорные данные не представляется возможным. Для этого придумали заголовки и сигнатуры.
avatar
Ok, спасибо за инфу по TS, это уже ближе к делу.
YM — не подходит, это что-то совсем не то.

Правильно ли я понял что: музоны, которые распознались как TS при конверсии в PSG будут также сохранены в контейнере TS c соответствующим футером?
При конверсии в RAW можно указать с какого чипа снимаются данные?
Никогда такого не было. Ибо отличить «сырой дамп регистров» и просто какие-то мусорные данные не представляется возможным. Для этого придумали заголовки и сигнатуры.
А зачем его отличать? Достаточно прямого указания «проиграть эти файлы как дампы регистров» на вот этих вот 2-х (или 3-х) чипах — и пусть себе играет =) Делов-то. Это не тот формат для которого нужен детектор.

Это сильно бы облегчило тестирование прототипов музыкальных движков ещё не реализованных в асме z80. И вообще исключило бы возню с эмулятором на этом и последующих этапах.

Если на твой взгляд светская беседа затянулась — скажи куда тебе фич-реквесты слать =)

Я бы и сам попытался зафигачить это всё (разумеется не забывая про распил RAW на паттерны =), но эта ж радость у меня даже не собирается =(
avatar
YM — не подходит, это что-то совсем не то.
То самое. Там просто матрица данных транспонирована- сначала идут все фреймы регистра 0, потом- регистра 1 и т.п. Это для улучшения сжатия сделано.

Правильно ли я понял что: музоны, которые распознались как TS при конверсии в PSG будут также сохранены в контейнере TS c соответствующим футером? При конверсии в RAW можно указать с какого чипа снимаются данные?
Нет. Конверсия в PSG/RAW доступна только для AY форматов с одним чипом.

А зачем его отличать? Достаточно прямого указания «проиграть эти файлы как дампы регистров» на вот этих вот 2-х (или 3-х) чипах — и пусть себе играет =) Делов-то. Это не тот формат для которого нужен детектор.
Лично мне такой функционал ни разу не потребовался. PSG вполне покрывает функционал тестирования, ибо сохранить в него можно из многих источников, а сконвертировав в текстовый дамп, посмотреть разницу.
avatar
Значит я описание какого-то другого YM читал — там что-то про исходный бинарник плейера было и другие странные штуки. Можешь пнуть в направлении описания? (Или всё описание как раз: все значения R0 затем все R1 и т.п.? (До какого регистра? только 14 или все 16?).

То есть алгоритм на текущий момент следующий: генерю два YM-файла (у них есть сигнатура?) и оборачиваю в TS-контейнер — и можно слушать?
avatar
Похоже что с PSG это всё-же проще: YM это LHA-архив, а не plain-файл.
avatar
Похоже что с PSG это всё-же проще: YM это LHA-архив, а не plain-файл.
Сжатие там опциональное. Просто подавляющее большинство распространяемых файлов его использют.
avatar
Значит я описание какого-то другого YM читал — там что-то про исходный бинарник плейера было и другие странные штуки.
Это ты про AY формат читал.

Можешь пнуть в направлении описания? (Или всё описание как раз: все значения R0 затем все R1 и т.п.? (До какого регистра? только 14 или все 16?).
Google же: leonard.oxg.free.fr/ymformat.html

То есть алгоритм на текущий момент следующий: генерю два YM-файла (у них есть сигнатура?) и оборачиваю в TS-контейнер — и можно слушать?
Да. Непонятно только нахрена оно тебе…
avatar
Могу подробнее голосом объяснить, если интересно =)
Кстати, хотел у тебя совета спросить как лучше эту затею реализовать.
Скайп у тебя тот же?
avatar
Я скайпом уже давно не пользуюсь. Пиши лучше письмом на почту.
avatar
Я скайпом уже давно не пользуюсь. Пиши лучше письмом на почту.


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

Если есть возможность принимать голосовые звонки через что-нибудь (Viber/Facetime/Hangouts) — буду рад голосом пообщаться в заранее согласованное время.

Если нет — скажи куда тебе писать на почту, попробую накатать простыню =)
avatar
«Люди, пишите письма. Телефонные звонки к делу не пришьешь»:)
avatar
Но протокол совещания — без проблем! =)
avatar
Накатал две простыни и скрестил пальцы =)
avatar
С .ts контейнером выходит косяк: длина .psg без компрессии — больше 65535 и в 2 байта длины не влезает, в итоге .ts распознаётся как два отдельных модуля, которые играются последовательно =)
avatar
А, нет. Всё ещё проще: если в .ts-контейнере два .psg то плейер их играет последовательно.
avatar
Странно. Можешь прислать файл для разбирательства?

Значит юзай mtc, ссылку я тебе давал. Ему пофиг что с чем смешивать:)
avatar
Выслал.
.MTC несравнимо сложнее, или hype.retroscene.org/blog/185.html инструмент mtctool может спокойно смешать два и более .psg?
avatar
Да, может. Главное — внимательно посмотри примеры вызова тулзы чтоб у тебя было два трека по одному файлу, а не один трёх с двумя файлами.
avatar
Исходники где-то есть? =) А то по ссылке бинарник только для Win. А у меня уже практически весь тулчейн на Mac =)
avatar
Есть, конечно. Вечером соберу тебе версию по мак.
avatar
Спасибо! =)
avatar
Спасибоньки! Тулчейн заработал =)
avatar
Быстрый доп. вопрос: чего в параметрах не хватает?:

zxtune123 --convert mode=psg filename=[Title].[Type] INEEDREST.ts 
Output filename template is not specified.
avatar
Быстрый доп. вопрос: чего в параметрах не хватает?:
Запятой после psg вместо пробела. Ибо вся эта строка — параметры конверсии.
avatar
Завтра кину ссылку на собранный zxtune133.

Очень странно. Можешь стектрейс жрущих потоков собрать?
avatar
Да, странно =) Хотел повторить, но теперь загрузка от 10 до 20%, правда заикаться продолжает.
avatar
Надо в гуй добавить настройку числа буферов
avatar
Всем привет)
Vitamin не упомянул ещё один плагин под плеер Qmmp.
Для тех, кого не сильно устраивает интерфейс zxtune.
sourceforge.net/p/qmmp-dev/tickets/840/
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.