Skip to content
tryptzPublic

About

This application offers native Android music streaming capabilities, a local player, combined with a visually advanced AutoEq feature for precise audio equalization and an audiophile grade DSP Mixer engine in your pocket.

Topics

Resources

Stars

89 stars

Watchers

3 watching

Forks

Repository files navigation

Tryptify

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.

Downloads Latest release Platform Version Kotlin Compose Native Audio Languages

⬇ Download the latest APK  ·  Release notes
Android 13+ · formerly MonoTrypT, existing installs upgrade in place

Glass spectrum: a single glass line over the cover, the visualizer behind.
Glass spectrum: TRYPTIFY SCREENSHOTS
Ridgeline spectrum over the cover, with the ambient visualizer. Ridgeline spectrum over the cover, with the ambient visualizer. Waterfall spectrum on a streamed track. Waterfall spectrum on a streamed track. Home with source pills, the mini player and the glass nav bar. Home with source pills, the mini player and the glass nav bar.
Mixer buses with faders, meters, routing and LUFS. Mixer buses with faders, meters, routing and LUFS. FX Chain: a reverb with its decay graph and presets. FX Chain: a reverb with its decay graph and presets. Add Plugin: the processors by category. Add Plugin: the processors by category.
Speed and pitch by multiplier, semitones or BPM. Speed and pitch by multiplier, semitones or BPM. Lyrics, synced line by line. Lyrics, synced line by line. AutoEQ: headphone correction from measurements. AutoEQ: headphone correction from measurements.

What's in it

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.

How the sound flows

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"]
Loading

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.

The 36 processors

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.

Building

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 needed

Release 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.

About

This application offers native Android music streaming capabilities, a local player, combined with a visually advanced AutoEq feature for precise audio equalization and an audiophile grade DSP Mixer engine in your pocket.

Topics

Resources

Stars

89 stars

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages