Skip to content

apfxtech/FlipperATM

Repository files navigation

FlipperATM

ATM — это плеер музыки для Flipper Zero на базе ATM-синтезатора (движок из Arduventure/Arduboy).

Приложение читает текстовые файлы *.atm из assets/, компилирует их во внутренний бинарный ATM-формат и воспроизводит через ATM.play().

Что такое ATM

ATM (ATMsynth) — трекерный формат с 4 каналами и байт-кодом команд.

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

Треки лежат в ext/apps_assets/ATM/*.atm.

Формат .atm файла

Минимальная структура:

ATM1
NAME My Song Title
ENTRY 0 1 2 3

TRACK # 0
... команды ...
ENDTRACK

TRACK # 1
... команды ...
ENDTRACK

END

Правила:

  • ATM1 — сигнатура формата.
  • NAME ... — опциональное имя композиции (строка до конца линии), отображается вверху экрана плеера.
  • ENTRY a b c d — стартовый трек для 4 каналов.
  • Каждый TRACK ... ENDTRACK — последовательность команд одного трека.
  • END — конец файла.
  • Комментарии начинаются с #.
  • Разделители аргументов: пробелы, переносы строк, ,.

Номера треков после TRACK сейчас используются как комментарий для человека (парсер строит индекс по порядку блоков).

Поддерживаемые команды

Ноты и тайминг

  • NOTE n
    • Включить ноту 0..63.
  • DELAY t
    • Задержка в тиках (t >= 1).

Переходы/структура

  • STOP
    • Остановить текущий канал.
  • RETURN
    • Возврат из трека.
  • GOTO track
    • Безусловный переход на трек.
  • REPEAT count track
    • Повтор/цикл как в оригинальном ATM.
  • GOTO_ADVANCED ch0 ch1 ch2 ch3
    • Расширенный переход (команда 0x9E).

Темп/громкость/модуляции

  • SET_TEMPO v
  • ADD_TEMPO dv
  • SET_VOLUME v
  • VOLUME_SLIDE_ON step
  • VOLUME_SLIDE_OFF
  • SET_NOTE_CUT v
  • NOTE_CUT_OFF
  • SET_TRANSPOSITION v
  • TRANSPOSITION_OFF
  • SET_VIBRATO depth cfg

Низкоуровневый ввод

  • DB value
    • Вставить байт напрямую (value в dec/hex, например 31 или 0x1F).
  • Также можно писать просто число отдельным токеном — оно будет вставлено как сырой байт.

Пример

ATM1
ENTRY 0 1 2 3

TRACK # 0
SET_TEMPO 36
SET_VOLUME 48
VOLUME_SLIDE_ON -2
REPEAT 3 1
STOP
ENDTRACK

TRACK # 1
NOTE 14
DELAY 8
NOTE 17
DELAY 8
RETURN
ENDTRACK

TRACK # 2
SET_VOLUME 0
STOP
ENDTRACK

TRACK # 3
SET_VOLUME 0
STOP
ENDTRACK

END

Ограничения текущего парсера

  • Поддерживаются только команды из списка выше.
  • Если нужен редкий opcode ATM, используйте DB.
  • При ошибке парсинга файл не воспроизводится (Load error в UI).

Управление в приложении

  • В браузере: выбрать *.atm файл.
  • В плеере:
    • OK — пауза/продолжить
    • Down — стоп
    • Back — назад к списку файлов

TODO

рефакторинг графики исправить кнопки добавить больше аудио исправить gpt readme