51 lines
2.0 KiB
C
51 lines
2.0 KiB
C
#ifndef AUDIO_ANALYSIS_H
|
|
#define AUDIO_ANALYSIS_H
|
|
|
|
#include <stdbool.h>
|
|
#include <stdint.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/* FFT calculee sur 2048 points : le spectre d'un signal reel est symetrique, donc
|
|
* seule la moitie (0 a Fe/2) est utile -> exactement 1024 points affichables,
|
|
* correspondant a la capacite du widget Graph cote IHM. */
|
|
#define AUDIO_ANALYSIS_SAMPLE_RATE_HZ 48000U
|
|
#define AUDIO_ANALYSIS_FFT_SIZE 2048U
|
|
#define AUDIO_ANALYSIS_NUM_BINS (AUDIO_ANALYSIS_FFT_SIZE / 2U) /* 1024 : 0 a Fe/2 */
|
|
|
|
/* A appeler une fois au demarrage, comme AudioEffects_Init(). */
|
|
void AudioAnalysis_Init(void);
|
|
|
|
/* A appeler depuis le chemin audio temps reel (ex: push_to_fifo), un echantillon
|
|
* a la fois. Ne fait rien (cout quasi nul) tant que l'analyse n'est pas activee. */
|
|
void AudioAnalysis_PushSample(float sample);
|
|
|
|
/* A appeler depuis la tache IHM (jamais depuis le contexte audio) : si un bloc de
|
|
* AUDIO_ANALYSIS_FFT_SIZE echantillons est pret, calcule son spectre (fenetrage +
|
|
* FFT + magnitude en dB). Retourne true si un nouveau spectre vient d'etre calcule. */
|
|
bool AudioAnalysis_Update(void);
|
|
|
|
/* Spectre courant, AUDIO_ANALYSIS_NUM_BINS valeurs en dB (echelle approximative,
|
|
* pour affichage uniquement), du bin 0 (continu) au bin NUM_BINS-1 (~Fe/2). Le
|
|
* pas entre deux bins vaut AUDIO_ANALYSIS_SAMPLE_RATE_HZ / AUDIO_ANALYSIS_FFT_SIZE
|
|
* (23.4375 Hz ici). Valide apres un AudioAnalysis_Update() ayant retourne true ;
|
|
* inchange sinon (dernier spectre calcule). */
|
|
const float *AudioAnalysis_GetMagnitudesDb(void);
|
|
|
|
/* Frequence (en Hz) du bin de plus forte magnitude dans le dernier spectre calcule
|
|
* (frequence dominante / pic). Valide dans les memes conditions que
|
|
* AudioAnalysis_GetMagnitudesDb(). */
|
|
float AudioAnalysis_GetPeakFrequencyHz(void);
|
|
|
|
/* Active/desactive la capture et le calcul (pilote par le toggle de l'ecran Oscillo). */
|
|
void AudioAnalysis_SetEnabled(bool enabled);
|
|
bool AudioAnalysis_IsEnabled(void);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* AUDIO_ANALYSIS_H */
|