A native Android hi-fi music player: a C++17 DSP console, headphone AutoEQ from real measurements, bit-perfect USB-DAC output, and a player you can watch.
⬇ Download the latest APK
·
Release notes
Android 13+ · formerly MonoTrypT, existing installs upgrade in place
| Every source in one player | Local FLAC, ALAC, WAV (16/24-bit and 32-bit float), MP3, AAC and Ogg/Opus through Media3 ExoPlayer 1.5.1, with a bundled FFmpeg renderer for codecs Android lacks. TIDAL up to 24-bit FLAC, Qobuz, and Deezer as FLAC or MP3 320, from the servers you add in Settings › Connections. Every result names its catalog; downloads are tagged FLAC with the cover embedded. |
| A spectrum you can read | A 4,096, 8,192 or 16,384-point FFT reduced to 256 display bins, drawn as a C++ waterfall in one pass: Lines, Ridgeline, Heat or Neon, or single-line Glass and Legacy. Live average, Live max, Average or Max analysis with adjustable averaging time and overlap. Frame-rate cap from 15 to 120 fps or every refresh, with optional vsync. |
| DSP mixing console | A C++17 engine inside ExoPlayer's audio pipeline: NEON SIMD, denormal flush-to-zero, lock-free parameter hand-off. 4–48 buses plus master, up to 16 of 36 processors each, sends between any buses (loops refused), per-plugin oversampling off/2×/4× capped at 192 kHz. A 9.1.6 upmix preset; EBU R128 momentary, short-term, integrated, loudness range and true peak. |
| Headphone AutoEQ | A 3 to 31-band parametric correction (10 by default), fitted greedily to the worst deviation from 20 Hz to 16 kHz, ±12 dB (±8 dB above 8 kHz). 4,000+ measurements from 12 squig.link sources and the bundled AutoEq catalog, against 10 targets including Harman Over-Ear 2018, Harman In-Ear 2019, Diffuse Field and Moondrop VDSF. Peaking or shelf ends, smoothing, automatic preamp, separate left/right calibration, and CSV/TXT import. |
| Bit-perfect USB DAC | A libusb UAC1/UAC2 driver claims the DAC's streaming interface and writes 16, 24 or 32-bit PCM to its isochronous endpoint, past Android's mixer, at any rate the DAC exposes. UAC2 asynchronous feedback paces it; a watchdog falls back to the system output if the stream stalls. Crossfades work across sample rates. |
| Speed, pitch, tempo | 0.25× to 3.0×, set as a multiplier, in semitones at exact 2^(n/12) ratios, or in BPM. Two pitch engines: a phase vocoder (signalsmith-stretch) for melodic material and WSOLA for drums. Tempo is measured once per track from a 200 Hz onset envelope, autocorrelated between 60 and 200 BPM with a 120 BPM prior; a turntable-style bar bends it. |
| MilkDrop visualizer | projectM 4.1.6 on OpenGL ES 3.0 with 9,795 presets in one packed archive, patched for a crash on missing textures. Every preset is run under AddressSanitizer on a headless GLES context before it ships, and one that crashes a phone's GPU driver is flagged from the exit record and skipped. Runs as the hero view or as an ambient layer. |
| Seven languages | English, 简体中文, 日本語, Français, Español, Türkçe and Deutsch, generated from one translation table, with Settings search in every language and Android 13's per-app language setting. |
| Everywhere else | A Glance home-screen widget, Android Auto, Discord presence, Last.fm and ListenBrainz scrobbling, offline downloads, and Supabase sync of settings, library and presets. |
flowchart LR
S["Local · TIDAL · Qobuz · Deezer"] --> X["ExoPlayer decode"]
X --> EQ["AutoEQ /<br/>parametric EQ"]
EQ --> M["DSP console<br/>4–48 buses × 16 processors"]
M --> MA["Master<br/>EBU R128 meters"]
MA -.-> V["projectM visualizer"]
MA --> O{"Output"}
O -->|default| A["Android audio"]
O -->|USB DAC| U["libusb UAC1 / UAC2<br/>bit-perfect"]
The DSP runs in a native C++17 library inside ExoPlayer's audio pipeline. Parameter changes reach the audio thread through lock-free atomics, so the UI can never block playback. NEON SIMD and denormal flush-to-zero keep each buffer cheap.
| Category | Processors |
|---|---|
| Utility | Gain · Stereo · Channel Mixer · Haas |
| EQ & Filter | Filter · 3-Band EQ · 10-Band EQ · Comb · Formant · Ladder · Nonlinear · Resonator · Disperser |
| Dynamics | Compressor · Limiter · Gate · Dynamics · Compactor · Transient Shaper · Trance Gate |
| Distortion | Distortion · Misstortion · Shaper · Bitcrush · Phase Distortion |
| Modulation | Chorus · Ensemble · Flanger · Phaser · Ring Mod · Tape Stop · Frequency Shifter · Pitch Shifter |
| Space | Delay · Reverb · Reverser |
Each has bypass, dry/wet and parameter smoothing. Out-of-range and non-finite values are rejected before they reach the audio thread.
Needs Android Studio, JDK 17, and the NDK and CMake from the SDK Manager. libusb and projectM are submodules; projectM has a nested one, so clone recursively.
git clone --recursive https://github.com/tryptz/Tryptify.git
./gradlew assembleDebug # build
./gradlew :app:testDebugUnitTest # unit tests
app/src/main/cpp/dsp/tests/run_host_tests.sh # native DSP tests, no device neededRelease builds read their signing config from keystore.properties (see keystore.properties.example). Translations live in app/l10n/strings.tsv. Contributors and coding agents start at AGENTS.md. What changed in each version: release notes and CHANGELOG.
Built by tryptz.









