README.md

Aurora Piano

Полифонический синтезатор для Aurora OS (Sailfish OS).
C++ бэкенд (QAudioOutput pull-based) + QML интерфейс (Sailfish Silica).

Архитектура

24-голосный синтезатор с обработкой в реальном времени.
Аудио-движок: QIODevice → QAudioOutput, буфер 4096 байт (92 мс).

Генерация сэмпла:

Voice → Unison → Mix /24 → SVF Filter → Reverb → Distortion → Delay → Chorus → Flanger → Volume → Record

Управление

Main Page

Секция Элементы
Presets 8 сцен (Pad, Bass, Lead, Organ, Pluck, Strings, Brass, FX Noise)
Waveform Sin, Saw, Square, Triangle, SuperSaw (7 detuned saws), Noise, FM
ADSR Attack (0–2s), Decay (0–2s), Sustain (0–100%), Release (0–3s)
Oscilloscope Визуализация формы волны (Canvas, 256 точек, 33 мс обновление)
Filter Cutoff (0–100%), Resonance (0–100%) — ZDF SVF, unconditionally stable
LFO Rate (0–20 Hz), Depth (0–100%), Target (Pitch/Amp/Filter), Waveform (Sin/Triangle/Saw/Square)
Volume / Reverb Громкость, реверберация (delay line 100 мс, feedback 0.5)
Octave −3…+3, кнопки − / +
Sustain Hold (педаль, включает release при выкл)
Scale Key (12 тональностей) + Mode (Major/Minor/Pentatonic/Blues) — подсветка нот на клавиатуре
FX Dist Drive (tanh waveshaping), Delay (0–500ms, feedback), Chorus (mod delay 9±4.5ms), Flanger (mod delay 0.2–4ms, feedback 0.5)
Tuning A4 = 400–880 Hz
Unison 3-голосный детюн (0–30 центов), утолщение звука
Portamento Glide (слайд высоты между нотами)
Arpeggiator ON/OFF, Rate (0.1–20 Hz), Pattern (Up/Down/Up-Down)
Record Запись WAV (Documents/piano_recording.wav)
Keyboard 2.5 октавы (белые: C3–B5, чёрные: 20 шт), pitch-bend вертикальным свайпом

Staff Page (PullDown Menu → Staff View)

  • Скрипичный + басовый ключи
  • Отображение активных нот на нотном стане
  • Ledger lines для нот вне стана
  • Тап по стану → играет нота (draggable glissando)

C++ синтезатор

Параметры голоса (Voice)

Поле Описание
midiNote raw MIDI (без октавного сдвига)
phase фаза осциллятора (0–1)
fmPhase фаза FM-модулятора
frequency базовая частота
currentFreq текущая частота (portamento)
targetFreq целевая частота
pitchBend изгиб (−1…+1)
stage 0=attack, 1=decay, 2=sustain, 3=release, 4=done
level текущий уровень огибающей
active занят ли голос

Стадии ADSR

Attack: level += 1/(attack * 22050 + 1)  → stage 1 при level≥0.99
Decay:  level -= 1/(decay * 22050 + 1)   → stage 2 при sustainLevel
Sustain: level = sustainLevel             → stage 3 по noteOff
Release: level -= 1/(release * 22050 + 1) → stage 4 при level<0.001

Формы волн

# Название Описание
0 Sin sin(2π·p)
1 Saw 2(p − floor(p+0.5))
2 Square p < 0.5 ? 1 : -1
3 Triangle 1 − 2p
4 SuperSaw 7 detuned saws (±0, 4, 8, 12 центов)
5 Noise rand() * 2 − 1
6 FM sin(2π(p + mod·0.5)), mod=sin(2π·fmPhase)

Фильтр (ZDF State-Variable Filter)

f = 0.01 + 0.99 * cutoff²
g = tan(π · f)         // ограничено f ≤ 0.49
R = 1 − resonance · 0.98
hp = (input − LP − R·BP) / (1 + g·(g + R))
BP = BP + g · hp
LP = LP + g · bp

Безусловно устойчив (trapezoidal integration).

Эффекты

Distortion: tanh(sample · (1 + drive·30))
Delay: циклический буфер 44100 сэмплов, линейная интерполяция, feedback
Chorus: модулированная задержка 400±200 сэмплов (@ chorusRate), mix
Flanger: модулированная задержка 10±180 сэмплов (@ flangerRate), feedback 0.5

Сохранение пресетов

  • JSON в ~/.config/ru.yurasov.AuroraPiano/user_presets/*.json
  • Сохраняется: волна + ADSR + фильтр + LFO + эффекты + Unison + Portamento + Tuning

Зависимости

  • Qt 5 (Core, Qml, Quick, Multimedia)
  • Sailfish Silica
  • Aurora OS SDK 5.2.1.110 (сборка)

Сборка

Проект собирается через Aurora OS SDK. Авторитетная сборка — target x86_64 в Docker-движке SDK (запускать из корня проекта):

docker run --rm --user "$(id -u):$(id -g)" \
  -v "$PWD":/workspace -w /workspace aurora-build-tools-leo:5.2.1.110 \
  bash -lc 'mkdir -p build/aurora-x64 && cd build/aurora-x64 && \
            qmake /workspace/ru.yurasov.AuroraPiano.pro && make -j4'

Результат: build/aurora-x64/ru.yurasov.AuroraPiano (ELF x86-64).

Обычная сборка на хосте (qmake && make) не работает: src/main.cpp включает <QtQuick> и <auroraapp.h>, а заголовки QtQuick/QML и Aurora (CONFIG += auroraapp) доступны только внутри SDK-движка.

Файлы проекта

Файл Назначение
src/synthesizer.h Заголовок синтезатора (Q_PROPERTY, Voice, PresetDef)
src/synthesizer.cpp Реализация (audio I/O, voice mgmt, эффекты)
src/main.cpp Entry point, экспорт synth в QML
qml/pages/MainPage.qml Главный экран (все controls + клавиатура)
qml/pages/StaffPage.qml Нотный стан (отображение + touch-play)
qml/pages/AboutPage.qml О программе
ru.yurasov.AuroraPiano.pro qmake проект
Описание
24 голосный полифонический синтезатор для Авроры
Конвейеры
0 успешных
0 с ошибкой
Разработчики