ATM player
Find a file
2026-02-11 23:02:16 +03:00
.github/workflows (ATM): first build 2026-02-06 22:13:15 +03:00
assets (TEST): new audio 2026-02-11 23:02:16 +03:00
icon (TEST): new audio 2026-02-11 23:02:16 +03:00
lib (TEST): new audio 2026-02-11 23:02:16 +03:00
package/screenshots (REPO): Appstore 2026-02-07 20:29:37 +03:00
application.fam (TEST): new audio 2026-02-11 23:02:16 +03:00
APPSTORE.md (ZIP): fix build 2026-02-07 21:50:43 +03:00
ATMlib.cpp (TEST): new audio 2026-02-11 23:02:16 +03:00
CHANGELOG.md (GUI): add play/pause, master vol, keymap 2026-02-07 20:00:53 +03:00
icon.png (ATM): clean 2026-02-06 22:42:42 +03:00
LICENSE Initial commit 2026-02-06 22:02:44 +03:00
main.cpp (TEST): new audio 2026-02-11 23:02:16 +03:00
manifest.yml (REPO): Appstore 2026-02-07 20:29:37 +03:00
README.md (GUI): add volume 2026-02-07 19:24:36 +03:00

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