Skip to Content
LyricWave澜音
Getting started

Introduction

LyricWave (澜音) is an Apple Music enhancement project for Android, maintained by Laoch832. This fork focuses on AI lyric translation, persistent caching, source updates, and a verified build and release process.

Download · CI · Issues · Documentation · 简体中文

Overview

Manage features inside Apple Music → Settings → LyricWave module settings. Laoch832 maintains this fork's development, issue tracking, and releases.

AI translations are saved after TTML validation, independently of whether a native player pointer remains alive. Later visits reuse the cache when the current source lyrics and translation settings still match. Changed lyrics or timings invalidate the old translation. Tablet playback, custom lyrics, fonts, lyric effects, Liquid Glass, and ZIP plugins remain available.

Acknowledgments and origins

Thank you to Zennmn (Zen), the original author of AM++, and to its contributors for the lyric processing, host integration, player layouts, and settings foundation. This fork builds on their work and retains the contribution history and copyright notices.

The original author's support link and the credits for other projects are collected in Acknowledgments and project origins. See THIRD_PARTY_NOTICES.md for licensing and source provenance.

Features

HDR lyrics offer a 100%–800% luminance ratio and a maximum-brightness mode. Genuine HDR requires Android 14+ and an HDR display. WeChat Moments sharing preserves a clickable Apple Music link and opens NetEase Cloud Music’s native share panel; enable only Apple Music and NetEase in LSPosed, never WeChat. See setup and compatibility.

  • AI translation of eligible selected foreign-language lyrics into Simplified Chinese through your own OpenAI-compatible endpoint.
  • Automatic persistent translation caching and source TTML SHA-256 checks, including lyric and timing changes.
  • Custom TTML import, editing, online fetching, search, and ZIP backup and restore.
  • Custom fonts, bidirectional lyric blur, CJK effects, and a tablet dual-pane player.
  • Liquid Glass navigation, mini-player effects, and collapsible phone navigation.
  • Regional song information and independently installed ZIP plugins.

Translation behavior

Enable custom lyrics and AI translation, then configure your endpoint and model. Online completion is independent; selected native, online, and imported lyrics can be translated. Existing translations, Chinese lyrics, and lyrics without line or word timing are preserved.

The cache retains the 100 most recently used songs. It is independent of manually imported lyrics and does not store API keys. Endpoint, model, or effective thinking changes invalidate translations; rotating only the API key does not. Updates are checked against the currently selected source lyrics, without separate server polling. Failed or cancelled requests keep the original lyrics and can retry on the next visit.

The API requests & translation cache page supports explicit translation, cached subtitle previews, persistent real request records, HTTP outcomes, and provider-reported usage. Cache hits do not increase API request counts. See the AI translation guide.

Download and installation

Requires Android 8.0+, a supported Apple Music build, and LSPosed or a compatible framework supporting libxposed API 102. Exact host builds are listed in host profiles.

  1. Download the APK from this project's Releases.
  2. Enable the module and select Apple Music (com.apple.android.music) in its scope; additionally select NetEase Cloud Music (com.netease.cloudmusic) for Moments link sharing; do not select WeChat.
  3. Force stop and reopen Apple Music.
  4. Open Apple Music → Settings → LyricWave module settings.

This fork uses its own fixed signing key. Back up settings and custom lyrics, then uninstall the upstream module before migrating. Later releases signed with this fork's key support in-place updates.

Usage

Configure AI translation in the module settings. Import or fetch custom TTML lyrics using the current song's Apple Music ID. Import TTF/OTF fonts and adjust player or glass features in their respective settings. Restart Apple Music where the UI requests it.

See the TTML guide, plugin SDK reference, and documentation index.

Cloud builds and releases

Commits and pull requests run source checks, unit tests, lint, and APK builds. Trusted main-branch builds also produce APKs signed with the fixed key. To publish, increase both version fields, then push the matching version tag or manually run CI with publish enabled.

Publication verifies the personal Laoch832 account, source commit, application version, checksum, and certificate. Existing release versions cannot be overwritten by this workflow. See the build and release guide for artifacts, retention, signing, and maintenance.

Building from source

Use JDK 21, Android SDK Platform 37.0, Build Tools 37.0.0, and the included wrapper.

chmod +x gradlew
python3 scripts/build-plugin-example.py
./gradlew test :app:lintDebug :app:lintVitalRelease :app:assembleDebug :app:assembleRelease -PpluginFixture="$PWD/build/plugin-example/basic-plugin.zip"

On Windows, use gradlew.bat and the appropriate fixture path. Without signing configuration, the release output is app/build/outputs/apk/release/app-release-unsigned.apk. Use keystore.properties.example for local signing; published builds use the configured fixed signing process.

Contributing, privacy, and licenses

Report problems in this fork's Issues, including device, Android and Apple Music versions, and reproduction steps. Never include API keys. Changes are developed and verified here before proposing an upstream PR.

The module declares INTERNET and a local signature permission for the Moments link bridge, imports files through the system picker, and stores settings, lyrics, and fonts in Apple Music's private directory. It has no separate launcher icon or analytics service.

Licensed under GNU GPL v3.0. Original copyrights and third-party notices remain available in Acknowledgments and THIRD_PARTY_NOTICES.md.


View authoritative source on GitHub

On this page