Open-source project
timschneeb/RootlessJamesDSP avatar
timschneeb/RootlessJamesDSP

RootlessJamesDSP for system-wide Android audio processing

An implementation of the system-wide JamesDSP audio processing engine for non-rooted Android devices

1,711 stars99 forksCGPL-3.0

At a glance

What is it?
RootlessJamesDSP applies the JamesDSP engine to audio from other apps on non-rooted Android devices by capturing internal audio. It supports advanced processing outside Android's built-in effect APIs, but capture restrictions, conflicts, latency, and Android 15 notification behavior narrow where it works.
Who is it for?
RootlessJamesDSP is suitable for Android users who want system-wide JamesDSP processing without root and can accept its capture restrictions, possible conflicts with other effect apps, and increased latency. It is a poor fit for playback that cannot be captured, audio routed through the native AAudio C++ API, or users who need every app and notification to work without Android 15 workarounds.
Can I use it commercially?
Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
Is it still maintained?
Yes. The repository last received commits 53 days ago.
What is it written in?
Mainly C, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.

Editorial analysis

Why RootlessJamesDSP exists on non-rooted Android

RootlessJamesDSP addresses a specific Android limitation: ordinary applications can use built-in audio effects, but they cannot directly modify another application's audio stream or implement arbitrary processing such as JamesDSP without access normally associated with root or privileged system access. The project targets listeners who want the JamesDSP audio processing engine to affect system-wide playback on a non-rooted phone or tablet. Its intended users are not limited to media played by one application. The README lists YouTube, YouTube Music, Amazon Music, Deezer, Poweramp, Substreamer, Twitch, Apple Music, and Vinyl Music Player among confirmed working apps.

The app is more than a thin preset interface around Android's `AudioEffect` classes. The project distinguishes its approach from regular rootless effect apps, which are restricted to the effects Android already exposes. RootlessJamesDSP instead uses internal audio capture as the route into playback from other apps, then applies the custom `libjamesdsp` engine. That is the central technical proposition: accept dependence on Android's internal capture path to gain processing capabilities that the normal app-level effect API does not offer.

This design also explains why the project should not be treated as universally transparent. The captured stream must be accessible, the Android build must cooperate with the app's access methods, and another audio effect must not already own the same processing route. The README asks users to read its limitations before adopting the app, which is appropriate because those constraints can determine whether the application is useful at all.

RootlessJamesDSP's internal capture and DSP path

According to the repository layout and README, RootlessJamesDSP is primarily a C project packaged as an Android application. It includes application code, native-facing implementation directories such as `hidden-api-impl`, `hidden-api-refined`, and `hidden-api-stubs`, and Gradle build files. The README states that the app uses `libjamesdsp`, written by James Fung, to perform the actual DSP work.

The practical data path begins when RootlessJamesDSP obtains internal audio from other applications. It then feeds that captured audio through the JamesDSP processing engine rather than relying on Android's fixed `AudioEffect` catalog. The README describes this as a collection of technical methods rather than a single ordinary playback API. Based on the repository's native and hidden-API-related modules, the implementation includes integration work for Android internals, but the README does not specify the full lifecycle of buffers, threads, or audio sessions.

That distinction matters for evaluation. A built-in equalizer can be attached only where Android permits it and can offer only effects represented by the platform. RootlessJamesDSP seeks a wider processing surface because its engine is not limited to that fixed list. In exchange, the audio must remain available through Android internal capture for the life of the listening session. An app that blocks capture prevents RootlessJamesDSP from receiving the stream, regardless of the filters configured inside JamesDSP.

Installing RootlessJamesDSP and confirming the first usable app

The README does not provide source-build commands, a required Android SDK version, or a step-by-step Gradle build. It directs users to the free Google Play release and an F-Droid package. Install one of those releases on the non-rooted Android device, open RootlessJamesDSP, and confirm that the target media app is not among the documented capture restrictions.

For the first real use, choose a supported streaming or local player such as YouTube, Amazon Music, Deezer, Poweramp, or Apple Music. Start ordinary playback in that app, then apply a JamesDSP setting in RootlessJamesDSP and listen for the intended change. The README does not document a particular preset file, configuration directory, command, or diagnostic flag, so it would be misleading to supply one. The observable acceptance check is whether captured playback returns through the DSP path without an audio conflict.

On Android 15 and later, the README identifies a separate platform issue. Screen-sharing privacy behavior can cause notifications, and probably other content, to be hidden. If that occurs, the documented setting is `Disable screen share protetion` in Android developer options. The spelling is presented that way in the README and should be located by its function rather than copied as a program flag.

Before treating the setup as complete, also listen for latency. RootlessJamesDSP warns that its capture and processing path increases audio latency, so immediate effect confirmation and comfortable real-time playback are separate checks.

Spotify patches and the boundary of unsupported playback

Spotify is listed as unsupported because it blocks internal audio capture. The README instead documents Spotify ReVanced as working when patched with `Remove screen capture restriction`. The documented procedure begins by installing ReVanced Manager, selecting the unpatched Spotify app, enabling that patch, completing the patching process, and installing the patched APK. This changes the app so that its audio can enter a capture route RootlessJamesDSP can process.

The same patch may apply to custom APKs. ReVanced Manager's settings must show universal patches, after which an APK can be selected with the `Storage` action, the patch can be enabled, and the output can be installed. The README warns that the original app may need to be uninstalled first because installation can otherwise fail with a signature conflict.

This is not a general bypass mechanism. The README explicitly says the patch cannot remove capture restrictions for apps that use the native AAudio C++ API for playback. A patched app may also crash or behave incorrectly if it performs signature checks or other anti-tampering checks. In that case, the README says additional patches would need to be created by hand. It does not document such patches, so adopters cannot assume that every blocked application can be made compatible.

Latency, API conflicts, and Android version constraints

Three limitations can be decisive. First, applications that block internal audio capture remain unprocessed. The README names Spotify, Google Chrome, and SoundCloud as unsupported, while Spotify is the explicit exception with a patch. Google Chrome and SoundCloud have no corresponding workaround in the README.

Second, RootlessJamesDSP cannot coexist with some other audio effect applications. Wavelet is given as an example, as are other apps that use the `DynamicsProcessing` Android API. This is a concrete ownership conflict rather than a vague possibility that two equalizers will compete. Users with such an app installed may need to remove or disable it before RootlessJamesDSP can operate as intended.

Third, the added processing path introduces increased audio latency. The README does not quantify that increase or identify the devices and settings on which it is most noticeable. That omission prevents a precise latency claim, but it does not erase the stated constraint. Users who watch video while playing commentary, play instruments, monitor live input, or otherwise require tightly synchronized audio may find this route unsuitable.

The Android 15 issue is separate from DSP compatibility. Enabling `Disable screen share protetion` addresses hidden notifications and probably other suppressed content according to the README. It does not remove capture restrictions or reduce the documented latency.

RootlessJamesDSP versus Android AudioEffect apps

The closest alternative is a regular rootless audio effect app that attaches through Android's built-in `AudioEffect` APIs. The README says those apps share the same basic platform constraint. They can use effects that Android makes available without special permissions, but they cannot directly access and modify the full audio stream produced by other apps in the way needed for arbitrary custom processing.

RootlessJamesDSP takes a different route by capturing internal audio and running it through `libjamesdsp`. The alternative approach is narrower but may avoid some of the workarounds associated with internal capture. The README does not give a side-by-side latency measurement or a list of effects available in another product, so it would be unsupported to claim that the built-in API route always has lower latency or better compatibility. The defensible comparison is architectural: Android `AudioEffect` apps stay within the platform's exposed effects, while RootlessJamesDSP accepts capture-related limits to support the wider JamesDSP engine.

For adoption, the deciding question is capability versus compatibility. If advanced JamesDSP processing matters and the required apps expose internal audio, RootlessJamesDSP addresses a gap that ordinary rootless effect apps do not. If every target app must work, capture blocking is disqualifying.

Maintenance, GPL-3.0, and upgrade implications

The repository is not archived, and its last push was on 2026-08-31. The latest listed releases are v1.6.13 from 2024-12-23, v1.6.12 from 2024-12-14, and v1.6.11 from 2024-12-13. This history shows post-release repository activity, but it does not document a release cadence or a stated support policy for particular Android versions. Upgrading should therefore be checked against the release notes and the app's compatibility lists rather than assumed safe.

RootlessJamesDSP is licensed under GPL-3.0 and incorporates `libjamesdsp` as its DSP engine. The README does not explain the license terms of the ReVanced patches, patched Spotify APK, or any custom APK. Distributing modified applications also raises signature and anti-tampering concerns that the README raises from a technical installation perspective. This is not legal advice, and the repository does not provide a legal interpretation of those dependencies. Users and integrators need to examine the relevant license files separately.

The strongest upgrade signal is compatibility with the apps that matter to them. A newer release may change native Android integration without removing the basic capture constraints. The README's supported-app list, Android 15 setting, and conflict warning should be checked after each upgrade.

Editorial conclusion

RootlessJamesDSP is suitable for Android users who want system-wide JamesDSP processing without root and can accept its capture restrictions, possible conflicts with other effect apps, and increased latency. It is a poor fit for playback that cannot be captured, audio routed through the native AAudio C++ API, or users who need every app and notification to work without Android 15 workarounds. Before adoption, verify that the target apps appear in the compatible categories, check whether another app already uses the `DynamicsProcessing` API, and confirm that the additional latency is acceptable on the intended device. The clearest boundary is RootlessJamesDSP's dependence on Android internal audio capture: apps that deliberately block that route remain outside its processing path unless a compatible patch can remove the restriction.

Frequently asked questions

Does RootlessJamesDSP work on a non-rooted Android device?

Yes. RootlessJamesDSP is specifically designed as a system-wide JamesDSP implementation for non-rooted Android devices. It relies on Android internal audio capture rather than root access.

Why does RootlessJamesDSP not process every Android app?

Apps that block internal audio capture remain unprocessed. Spotify requires the documented ReVanced patch, while Google Chrome and SoundCloud are listed as unsupported. Apps using the native AAudio C++ API cannot have that restriction removed by the documented patch.

Can RootlessJamesDSP run with Wavelet or another dynamics-processing app?

Not in all cases. The README says RootlessJamesDSP may conflict with some audio effect apps, including Wavelet and other apps that use the `DynamicsProcessing` Android API.

Official sources

  1. Issues
  2. License: GPL-3.0
  3. README
  4. Releases
  5. timschneeb/RootlessJamesDSP on GitHub
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/timschneeb-rootlessjamesdsp.svg)](https://hysenlabs.com/projects/timschneeb-rootlessjamesdsp)

Was this useful?