Star 历史趋势
数据来源: GitHub API · 生成自 Stargazers.cn
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

ComponentImplementationUser Benefit
FFT EngineCustom Cooley-Tukey Radix-2 algorithm on real-time PCM buffersAutomatically detects the dominant background drone
Phase CalibratorContinuous 360° trigonometric dial bound to memory blocksManual wave alignment to compensate for hardware/BT latency
OS ShieldAndroid Foreground Service with persistent notificationKeeps cancellation active while screen is locked
Stateless UIStateFlow + Compose hoisted parametersZero 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

  • Android Studio Ladybug (2024.2.1+)
  • JDK 21+
  • Physical Android device — emulators do not support low-latency hardware microphone FFT testing

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

LayerTechnology
LanguageKotlin 2.0.21
UIJetpack Compose (Material 3)
StateStateFlow + ViewModel
Audio CaptureAudioRecord (PCM 16-bit, 44.1kHz)
Audio PlaybackAudioTrack (streaming mode)
FFTCustom Cooley-Tukey Radix-2
BackgroundForeground Service (mediaPlayback)
BuildGradle (Kotlin DSL) + Version Catalog
Min SDKAPI 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.

关于 About

An open-source Android Active Noise Cancellation (ANC) engine. Leveraging low-latency DSP to neutralize environmental hums and help you reclaim your quiet.
acousticsactive-noise-cancellationandroidaudio-processingclean-architecturedigital-signal-processingdspfftjetpack-composekotlin

语言 Languages

Kotlin65.2%
C++32.0%
CMake2.7%

提交活跃度 Commit Activity

代码提交热力图
过去 52 周的开发活跃度
12
Total Commits
峰值: 11次/周
Less
More

核心贡献者 Contributors