Skip to content

Repository files navigation

ChipMood

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

Русский · English

Лицензия: Unlicense Платформа: Android Работает офлайн Движок: Rust chip-synth

Экран съёмки Плеер

Демо со звуком

Что умеет

ChipMood сочиняет музыку прямо на устройстве по фотографии. Наводишь камеру на что угодно, жмёшь один раз. Приложение определяет настроение по цветам снимка, собирает целый трек из библиотеки реальных игровых фраз и играет его на собственном чип-синтезаторе (импульс, треугольник, пила, шум). Задача: чтобы звучало так, будто написал и сыграл живой человек, но с сырой «чиповой душой» классического chiptune.

  • Фото в музыку одним нажатием. Лёгкий анализ цвета (яркость, теплота, насыщенность) задаёт настроение: happy, tense, sad, calm.
  • Только хиты. Каждое нажатие генерирует кучу вариантов трека. Встроенный «критик» оценивает каждый и играет только лучший, неудачные ты не слышишь.
  • Полностью офлайн. Без облака, аккаунта и кредитов. Весь звук даёт собственный синтезатор на Rust, сэмплы не используются.
  • Ремикс через любой ИИ-чат. Кнопка Copy собирает компактный промпт с реальными «хит-фразами». Вставляешь ответ обратно кнопкой Paste, и трек аранжируется и синтезируется на устройстве.
  • Живой микшер и экспорт. Мьют каналов на лету под эквалайзером, экспорт в MP3 320 kbps с фото-обложкой внутри файла.

Как это работает

  1. Фото в настроение. Анализ цвета через dart:ui раскладывает снимок по квадранту valence/arousal.
  2. Поиск (RAG). Библиотека реальных, нормализованных по тональности «кирпичиков» запрашивается по настроению: фразы (лид, гармония, контрапункт, бас, барабаны), аккорды, формы, грувы, бас-линии, сбивки, голосования.
  3. Сочинение (RagComposer). Полностью на устройстве: выбирает связный материал, транспонирует в тональность и выстраивает сквозную форму (вступление, развитие, брейкдаун, поднятый финальный припев, концовка). Опционально со своим ключом OpenRouter план пишет LLM по той же библиотеке.
  4. Аранжировка (ProceduralArranger + MelodyEngine). Компактный план превращается в плотную 8-голосную Composition с «человеческой» агогикой.
  5. Выбор лучшего дубля (HitCritic). Символьный критик оценивает кандидатов по повторяемости хука, поющемуся контуру, консонансу лида и баса, устойчивости грува, «дыханию» фраз и динамике припева. Играется победитель.
  6. Синтез (движок на Rust). Band-limited осцилляторы (PolyBLEP), синтез барабанов, резонансный фильтр на голос, драйв, бит-краш, тремоло, по-нотные трекерные эффекты (арп, слайд, вибрато, ретриг, дилей).
  7. Мастеринг и вывод. Glue-компрессор, левелер, лимитер и лёгкий реверб. Воспроизведение как 16-bit PCM, экспорт в MP3 с обложкой.

Датасеты в основе библиотеки

Намайнены скриптами в ml/ в компактный JSON в assets/rag/:

  • NES-MDB и General-MIDI (мульти-трек). Chiptune и широкая мелодика.
  • POP909. Реальные поп-прогрессии аккордов и контрапункт.
  • EMOPIA. Фортепианные клипы с точными метками настроения (4 квадранта).
  • VGMIDI. Аранжировки игровых саундтреков.
  • YM2413-MDB. FM игровая музыка 80-х с эмо-метками.
  • Трекерные модули Unreal / UT99. Сквозные формы и демосцен-лиды (свой парсер S3M/IT, не распространяются).

Нейросетевой эксперимент (честно)

Сначала попробовали обучить нейросеть сочинять chiptune целиком (ml/train.py, ml/model.py, ml/generate.py, чек-пойнт ckpt.pt). Вышло плохо: бессвязный, бесструктурный вывод. Для вменяемой модели символьной музыки нужно несравнимо больше данных, вычислений и времени. Поэтому перешли к подходу retrieval-augmented плюс правила, и звучит он несравнимо лучше. Нейропуть остался в коде опционально, но не по умолчанию.

Собрать самому

Нужны Flutter SDK, тулчейн Rust (rustup) и Android NDK. Rust-крейт собирается автоматически хуками flutter_rust_bridge.

flutter pub get
flutter run                      # на подключённом устройстве
flutter build apk --release      # релизный APK
flutter test                                       # Dart-тесты
cargo test --lib --manifest-path rust/Cargo.toml   # тесты движка

LLM-композитор опционален: введи свой ключ OpenRouter в Настройках (в приложении ключа нет) или flutter build apk --dart-define=OPENROUTER_API_KEY=....

Данные и авторские права

Звук ChipMood идёт от собственного синтезатора, сэмплы не используются. Библиотека референсов содержит только нормализованные, преобразованные ноты. Защищённый авторским правом исходный материал (модули Unreal/UT99, сырые датасеты, чек-пойнты) не включён и лежит в .gitignore. Чтобы перезапустить майнеры, принеси свои копии.

Благодарности

ChipMood стоит на работе многих людей, спасибо:

  • Марковская модель мелодии. Цепь Маркова 2-го порядка по ступеням лада адаптирована из oscarsandford/chiptune-generation.
  • Настроение из музыки. Отображение valence/arousal вдохновлено serkansulun/midi-emotion.
  • Orpheus Music Transformer Александра Сигалова. Опциональный путь дообучения в ml/orpheus/ построен на asigalov61/Orpheus-Music-Transformer (Apache-2.0).
  • Датасеты: NES-MDB, POP909, EMOPIA, VGMIDI, YM2413-MDB.
  • Саундтрек Unreal / UT99 использован только для изучения и не распространяется.

Лицензия

Public domain, лицензия The Unlicense (см. LICENSE). Делай что угодно. Сторонние датасеты, использованные для генерации данных, имеют свои условия.

About

Turn a photo into an original 16-bit chiptune, composed and synthesized entirely on-device. Flutter + Rust, fully offline.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages