Версия плеера для NeoGS, для проигрывания только .mp3 файлов и загрузки любых бинарников на ZX с внутренней SD карты.
В исходниках сам плеер и примеры его использования.
Вызов треков и сэмплов по номеру, проигрывание сэмпла по кластеру и размеру.
Модуль инициализации и "одноразовые" функции (парсинга, загрузки списка и т.п.) после отработки можно удалить из памяти.
Для создания списка файлов и папок проекта используется модуль в программе, по ссылке. Инструкция присутствует.
Образ SD, для работы примера, по ссылке.
Принцип работы.
Существует два музыкальных списка, треков (до 64 шт.) и сэмплов (1536 шт.). Если включён __PLAYREPEAT_ON, то треки могут проигрываться по кругу и при вызове сэмпла, по его окончанию, продолжится проигрывание трека (на эмуляторе, по крайней мере, это работает). При выключенном __PLAYREPEAT_OFF, проигрывание трека закончится по его окончанию, либо по прерыванию на сэмпл. Есть искусственная задержка для эмулятора, т.к. он не понимает 2048 байт нулей в чип, уcтанавливается командой __EMUL_UNREAL_SET.
Загрузка файла осуществляется по номеру кластера и размеру, также по номеру в списке. Данные получаются, по типу, ld hl,MyFile.clus и ld hl,MyFile.Size. Файл можно грузить полностью, либо непрерывно, по порциям #2000 байт, чтобы переключать страницы, если он большой. Контроль размера со стороны NeoGS.
Примечание:
Как оказалось, плеер может помимо .mp3, также воспроизводить .mid, .ogg, .aac, .wav, .wma файлы.
В эмуляторе, если файл .mp3 очищен от картинок (лишних тегов), то он может проигрываться с любого места.
Остальные не воспроизводятся, за исключением .acc и то с определённой секунды (у тестируемого получилось с 15 сек.).
Так, что отличные форматы от .mp3, можно использовать в качестве сэмплов, либо, если не подразумевается использовать сэмплы, а
только список треков, то не использовать __CPAUSEHARD, т.к. продолжение отличных от.mp3 - не гарантировано.
Дополнение из основных исходников:
F_EXT_VS1001
F_EXT_VS1011 DZ "MODMP3"
F_EXT_VS1003 DZ "MODMP3WAVWMAMID"
F_EXT_VS1053 DZ "MODMP3WAVWMAMIDOGG"
F_EXT_VS1063 DZ "MODMP3"
Напротив чипа, указаны файлы, которые может он проигрывать. Как в реале с начальными чипами неизвестно, кто проверит, может отписать.
! Как отрабатывает логика с продолжением проигрывания на реальном железе неизвестна, может быть всё иначе!!!
Наброски, что будет в версии 0.0.2.0.
* Инкапсулированы изменения из оригинального плеера r185, с поддержкой новых чипов.
Команды (проверено только в эмуляторе, на реальном NeoGS поведение неизвестно):
- __EMUL_UNREAL_SET - установка, что запуск на эмуляторе (т.к. конец файла не проигрывается, будет задержка)
- __PLAYREPEAT_OFF - запрет продолжения проигрывания
- __PLAYREPEAT_ON - разрешить проигрывание следующего или продолжить прерванный трек
- __CPLAY - начало проигрывания списка треков
- __CPAUSE - мягкая пауза, играет буфер несколько секунд
- __CPAUSEHARD - жёсткая пауза со сбросом чипа, прерывается сразу
* После пауз, при включении __CPLAY, продолжится играть трек из списка, даже, если играл сэмпл
* После __CPAUSEHARD проигрывание будет плюс, примерно, с того же места, т.к. кластеры, сектора и т.п.
- __CSTOP - прекращение воспроизведения, без возможности продолжения с места остановки
- __NEXT_TRACK - следующий трек в списке, без воспроизведения
- __PREV_TRACK - предыдущий трек в списке, без воспроизведения
- __PLAY_NUMBER_TRACK - выбрать трек из списка, без воспроизведения
- __PLAY_NUMBER_SAMPLE - выбрать сэмпл из списка, включается воспроизведение __CPLAY, если __PLAYREPEAT_OFF
- __VOL_UP - увеличить звук на единицу
- __VOL_DOWN - уменьшить звук на единицу
- __VOLUME_SET - установить громкость
- __MUTE - включить/выключить громкость
- __ROOT_DIR - получить корневой каталог
- __FIND_RECORD - поиск записи по имени, в указанном кластере DIR
- __LOAD_FILE_PORTION_IN_ZX - загрузка порции файла
- __SEND_TRACK_LIST_IN_GS - отправляет список композиций в NeoGS, для проигрывания по очереди (64шт.)
- __SEND_SAMPLE_LIST_IN_GS - отправляет список сэмплов в NeoGS (1536шт.)
- __SEND_DATABIN_LIST_IN_GS - отправляет список файлов-ресурсов в NeoGS (384шт.)
Функции к командам:
* fCMDRequestShort - функция вызова коротких команд, без параметров
* fCMDSendTrackListNumber - функция отправки номера трека, для перехода на него
* fCMDSendSampleListNumber - функция отправки номера сэмпла, для воспроизведения
* fCMDSendDataBinListNumber - функция отправки номера файла, для открытия потока
* fCMDReceiveFileFromSDNeoGS - подготовка к приёму файла по кластеру и размеру потока
* fLoadStreamFull - полное считывание файла (для коротких файлов)
* fLoadPortion - порционное считывание файла, например, для переключения страниц
Проблемы, примечания:
* Тестирование происходит на Unreal, существующие проблемы на эмуляторе
* Вся переработка на основании оригинального плеера, в работу SD и FAT изменения не вносились, кроме добавленных функций загрузки файлов
* При переключении композиции, стоп/старт - звук становится максимальным, эмулятор не реагирует после сброса "чипа" на установку громкости, по умолчанию
Также изменения громкости происходят после начала воспроизведения, команды проходят после 23 кадра (halt)
По просьбе проверили на реале, сказали, что проблем с громкостью нет
* Не работает громкость для левого и правого канала, только общая
* При проигрывании .WAV файла, в конце, происходит вечный цикл в ожидании "чипа", возможно из-за тегов в конце файла
Разработка:
hardware (NeoGS): Вадим Акимов (LVD), Чунин Роман (CHRV), Вячеслав Савенков (Savelij), Жабин Алексей (KOE), Василий Климов (JTN);
software (внутренний плеер): Вячеслав Савенков (Savelij).
Программа для генерации списка папок и файлов проекта
Образ диска для эмулятора Unreal, для тестирования исходников.


Ответить с цитированием
Размещение рекламы на форуме способствует его дальнейшему развитию 
