GitHub Actions Bot d6e673b00e Add debug APK
This commit introduces the `app-debug.apk` file.
2025-08-29 11:51:29 +02:00
2025-08-29 11:47:23 +02:00
2025-08-29 11:47:23 +02:00
2025-08-29 11:47:23 +02:00
2025-08-29 11:51:29 +02:00
2025-08-29 11:47:23 +02:00
2025-08-29 11:47:23 +02:00
2025-08-29 11:47:23 +02:00
2025-08-29 11:47:23 +02:00
2025-08-29 11:47:23 +02:00
2025-08-29 11:47:23 +02:00

Visualizer (Android)

A tiny Jetpack Compose demo that visualizes the device audio output using the Android Visualizer API.

It attaches to audio session 0 (global output mix) and renders:

  • Waveform view (time-domain samples)
  • FFT magnitude bars (frequency-domain snapshot)
  • Simple metrics (sample count, RMS, peak, first bytes)

The UI is written with Jetpack Compose and organized into small composables.

Features

  • VisualizerController wrapper around android.media.audiofx.Visualizer
  • Global output (session 0) capture for convenience
  • Waveform and FFT visualizations
  • Permission handling (RECORD_AUDIO)
  • Basic controls to Start/Stop capture

Requirements

  • Android 7.0 (API 24) or later
  • Microphone permission (RECORD_AUDIO)
  • Audio playing on the device (e.g., music app) to see the visualization

How it works

  • VisualizerController sets up the Visualizer with the maximum supported capture size and a reasonable capture rate (half of the device max).
  • It registers OnDataCaptureListener to receive waveform and FFT byte arrays.
  • The app processes those bytes in Compose to draw a waveform path and magnitude bars for FFT bins.

Key parts of the UI:

  • PermissionSection asks for RECORD_AUDIO when missing.
  • WaveformView draws the latest waveform as a continuous path.
  • FftBarsView computes magnitude per bin and draws vertical bars.
  • MetricsSection shows simple stats and a short hex-ish dump of the first bytes.
  • ControlButtons exposes Start/Stop buttons.

Build & Run

  1. Open the project in Android Studio (Giraffe or newer recommended) and let it sync.
  2. Select a connected device or emulator running API 24+.
  3. Run the app.

Or via command line:

./gradlew :app:assembleDebug

Then install the generated APK on a device.

Permissions

This app requests android.permission.RECORD_AUDIO at runtime.

Note: The Visualizer API reads audio data for visualization — it does not record or store audio.

Limitations & Notes

  • Some OEMs/devices restrict or alter access to the global output mix (session 0). On such devices the visualizer may return zeros or fail to initialize.
  • You need active audio playback from another app to see non-zero data.
  • Bluetooth/headphones/audio effects may influence sampling output.
  • The FFT values are raw magnitudes derived from interleaved real/imag bytes and are not calibrated to physical units.

KDocs

Public classes and composables are documented with KDoc in the source:

  • VisualizerController (class, start/stop)
  • MainActivity and VisualizerScreen
  • Composables: WaveformView, FftBarsView, PermissionSection, ControlButtons, MetricsSection
  • AudioSessionsTracker (placeholder)

You can browse KDocs directly in code. There is no generated site output configured for this sample.

Project Info

  • Min SDK: 24
  • Target/Compile SDK: 36
  • Kotlin/JVM target: 11
  • UI: Jetpack Compose Material 3

This is a learning/demo project — feel free to adapt it to your needs.

Description
No description provided
Readme 9 MiB
Languages
Kotlin 100%