Files
CelloEffects/Appli/Core/Inc/audio_analysis.h
T
2026-10-18 14:06:40 +02:00

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 */