woheller69 / audio-analyzer-for-android

A fork of audio-analyzer-for-android in Google code, with a lot of enhancement.
Apache License 2.0
197 stars 13 forks source link
Send a coffee to woheller69@t-online.de 
RadarWeather Gas Prices Smart Eggtimer
Bubble hEARtest GPS Cockpit
Audio Analyzer LavSeeker TimeLapseCam
Arity Cirrus solXpect
gptAssist dumpSeeker huggingAssist
FREE Browser

Audio Spectrum Analyzer for Android

A fork of Audio spectrum Analyzer for Android (See README.old for its original readme)

This software shows the frequency components' magnitude distribution (called spectrum) of the sound heard by your cell phone. Can be used to help tuning musical instrument or tone in singing, (tentative) measure environmental noise and sound revent education or experiments.

Get it on F-Droid

Features

Permissions

Privacy

Information we collect and you share

This app does not send any personal or non-personal information in any form over network.

Only with user's permission and explicit order, this app can store microphone data on the user's device.

Data processing

The permission to read microphone is required because that is the essential data this app needs to compute and display the spectrum and spectrogram.

The permission to read and write storage is for saving microphone data (in WAV PCM format) only and is optional. This is provided for convenience of user (e.g. user might want to use another app to process the recorded data). It is user's responsibility to remove the recorded data if they are no longer needed.

License

This software, Audio Spectrum Analyzer for Android, is released under the Apache License, Version 2.0.

Copyright thinkingcow, bewantbe, woheller69

Code structure

The whole program structure is roughly follows the MVC model:

AnalyzerActivity.java is the controler, as the main activity, it receives user inputs and system events, then sent corresponding commands to views or sampling and analyzing procedures.

AnalyzerViews.java is the view in MVC. It is used to manage (initialization, display, refresh) UI texts, buttons, dialogs and graphics. AnalyzerGraphic.java is a main sub-view which manage display of spectrum(SpectrumPlot.java) and spectrogram(SpectrogramPlot.java).

SamplingLoop.java is more or less the "model" part. It performs the sampling and FFT analysis, and inform the graphics update.

Processing of audio samples

The data process loop is located in run() in SamplingLoop.java (after commit c9e430b (Feb 06, 2017), but basicly this process didn't change since the initial commit), as well as the trigger of graphics refresh.

In every loop of while (isRunning), it reads a chunk of audio samples by

record.read(audioSamples, 0, readChunkSize);

, then "stream" it to STFT.java by

stft.feedData(audioSamples, numOfReadShort);

which calculates RMS and FFT whenever enough data is collected. The view is then informed through

activity.analyzerViews.update(spectrumDBcopy);

which ultimately calls invalidate() of the graphic view to request an update, then the AnalyzerGraphic.onDraw(Canvas c) will be called automatically.