AhSilence README

The project's README from github.com/AhmadHassan-BTed/AhSilence. As one markdown file: README.md.

AhSilence Banner

AhSilence

Silence the ambient hum. Find your perfect quiet.

Kotlin API Level Architecture DSP License


Overview

AhSilence is a native Android active noise cancellation (ANC) engine built with Jetpack Compose and Kotlin. It bridges the gap between complex digital signal processing (DSP) and human comfort by analyzing the environment for persistent, low-frequency hums (such as AC units or electrical drones) and emitting phase-inverted audio waves that mathematically neutralize acoustic disturbances.

The application runs a zero-allocation, GC-free hot loop, ensuring seamless destructive interference without frame drops or OS throttling.

Key Features

Component Implementation User Benefit
FFT Engine Custom Cooley-Tukey Radix-2 algorithm on real-time PCM buffers Automatically detects the dominant background drone
Phase Calibrator Continuous 360° trigonometric dial bound to memory blocks Manual wave alignment to compensate for hardware/BT latency
OS Shield Android Foreground Service with persistent notification Keeps cancellation active while screen is locked
Stateless UI StateFlow + Compose hoisted parameters Zero battery drain from unnecessary recompositions

Architecture

AhSilence follows Clean Architecture with strict unidirectional data flow and complete isolation of the Android framework from core business logic.

graph TD
    subgraph Presentation Layer
        UI[Jetpack Compose UI]
        VM[ControlViewModel]
    end

    subgraph Domain Layer
        STATE((AcousticState))
        PORT{AudioEngine Port}
    end

    subgraph Data Layer
        SERVICE[ActiveHumService]
        DSP[NativeAudioDSP]
        FFT[FastFourier]
    end

    UI -->|Observes State| VM
    UI -->|OS Intent| SERVICE
    VM -->|Updates| STATE
    VM -->|Injects Phase/Gain| PORT
    SERVICE -->|Foreground Shield| DSP
    DSP -->|Implements| PORT
    DSP -->|PCM Buffer Math| FFT

    classDef domain fill:#1E1E1E,stroke:#7F52FF,stroke-width:2px;
    class STATE,PORT domain;

Data Flow

sequenceDiagram
    participant M as Microphone
    participant E as NativeAudioDSP
    participant F as FastFourier (FFT)
    participant U as Dashboard UI
    participant S as Speaker (AudioTrack)

    Note over M,E: 7-Second Ambient Scan
    M->>E: Capture Raw PCM Buffer
    E->>F: Compute Radix-2 FFT
    F-->>E: Extract Dominant Frequency (Hz)
    E-->>U: Push AcousticState Update

    Note over U,S: User Calibration
    U->>E: Inject Phase Offset (°) & Amplitude

    Note over E,S: Continuous Emission Loop
    loop GC-Free Hot Loop
        E->>E: Synthesize Inverted Sine Wave
        E->>S: Push Buffer (AudioTrack.WRITE_BLOCKING)
        S->>M: Destructive Acoustic Interference
    end

Project Structure

app/src/main/java/com/bted/ahsilence/
├── core/                                # Cross-cutting concerns
│   ├── constants/AudioConstants.kt      # Centralised magic numbers
│   ├── di/AudioEngineLocator.kt         # Lightweight service locator
│   └── logging/AppLogger.kt            # Structured logging facade
│
├── domain/                              # Pure Kotlin — zero Android imports
│   ├── model/AcousticState.kt           # Immutable single source of truth
│   └── port/AudioEngine.kt             # DSP engine contract
│
├── data/                                # Android framework implementations
│   ├── engine/FastFourier.kt            # Radix-2 FFT math engine
│   ├── engine/NativeAudioDSP.kt        # AudioRecord / AudioTrack pipeline
│   └── service/ActiveHumService.kt     # Foreground service (OS Shield)
│
├── presentation/                        # State management
│   └── ControlViewModel.kt             # Jetpack Compose bridge
│
├── ui/                                  # Visual layer
│   ├── screen/DashboardScreen.kt        # Main dashboard (Pro / Simple mode)
│   ├── component/                       # Reusable UI elements
│   │   ├── CalibratorRing.kt           # 360° phase dial
│   │   └── GainSlider.kt               # Vertical amplitude fader
│   └── theme/                           # OLED Black / Neon Amber design system
│       ├── Color.kt
│       ├── Theme.kt
│       └── Type.kt
│
└── MainActivity.kt                      # Entry point

Getting Started

Prerequisites

Build

# Clone
git clone https://github.com/ahmadhassan-bted/ahsilence.git
cd ahsilence

# Build debug APK
./gradlew clean assembleDebug

# Run unit tests
./gradlew test

# Lint check
./gradlew lint

Install

# Install on connected device
./gradlew installDebug

Tech Stack

Layer Technology
Language Kotlin 2.0.21
UI Jetpack Compose (Material 3)
State StateFlow + ViewModel
Audio Capture AudioRecord (PCM 16-bit, 44.1kHz)
Audio Playback AudioTrack (streaming mode)
FFT Custom Cooley-Tukey Radix-2
Background Foreground Service (mediaPlayback)
Build Gradle (Kotlin DSL) + Version Catalog
Min SDK API 26 (Android 8.0)

Contributing

See CONTRIBUTING.md for branch naming, commit conventions, and the non-negotiable architectural rules (zero-allocation hot loops, domain isolation, UI purity).

Security

AhSilence is fully offline — zero network calls, zero data collection, zero telemetry. See SECURITY.md.

Roadmap

See ROADMAP.md for planned features including multi-frequency cancellation, adaptive algorithms, and Bluetooth latency compensation.

License

Copyright 2025 Ahmad Hassan

Licensed under the Apache License, Version 2.0.
See LICENSE for details.

AhSilence (AhmadHassan-BTed/AhSilence)

kotlin
Searching Database…

What is this?AhSilence is a native Android app that performs active noise cancellation: it analyzes persistent low-frequency hums like AC units or electrical drones and emits phase-inverted sound waves to cancel them out in real time.
Is this an app I install, or a library for developers?It is a standalone Android application built with Kotlin and Jetpack Compose, not a library you embed in other apps.
How do I get it running?Clone the repo and build it in Android Studio Ladybug (2024.2.1+) with JDK 21+ using the provided Gradle setup, then install the resulting APK on your phone.
What hardware or tools do I need to try it?You need Android Studio Ladybug, JDK 21+, and a physical Android device running at least Android 8.0 (API 26) with a working microphone.
Can I test it on an emulator?No, you need a real phone — emulators can't do the low-latency hardware microphone FFT processing the app relies on.
Does it work on any Android phone?It targets Android 8.0 (API 26) and above, running as a native Kotlin/Jetpack Compose app.
Does the app send any audio or data off my phone?No, everything runs locally: AhSilence makes zero network calls and collects no data or telemetry.
How does the app actually detect the hum it's cancelling?It runs a custom Cooley-Tukey Radix-2 FFT algorithm over real-time PCM audio buffers to automatically detect the dominant background drone.
Will cancellation keep working if I lock my phone?Yes, it runs as an Android Foreground Service with a persistent notification so it stays active even when the screen is locked.
Does running this drain my battery fast?The UI uses StateFlow with hoisted Compose parameters to avoid unnecessary recompositions, and the audio loop is zero-allocation and GC-free, so it's designed to minimize battery and performance overhead.
What's planned for future versions?The roadmap includes multi-frequency cancellation, adaptive algorithms, and Bluetooth latency compensation.
Size
5.9 MB
Stars
1.2K
Updated
CommitSep 15
Age
3mo
Commits · 90 Days