Files
2026-10-18 14:06:40 +02:00

47 lines
1.8 KiB
C

#ifndef AUDIO_LOOPER_H
#define AUDIO_LOOPER_H
#include <stdbool.h>
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
/* Effet "repeatButton" de l'ecran Overview : tant que le bouton est maintenu, l'audio
* (apres la chaine d'effets) est enregistre ; au relachement, l'enregistrement est
* rejoue plus vite, ce qui rend aussi la voix/le son plus aigu (pas de correction de
* pitch independante : c'est un simple changement de vitesse de lecture, comme une
* bande accéléree). */
#define AUDIO_LOOPER_SAMPLE_RATE_HZ 48000U
#define AUDIO_LOOPER_MAX_SECONDS 5U
#define AUDIO_LOOPER_MAX_SAMPLES (AUDIO_LOOPER_SAMPLE_RATE_HZ * AUDIO_LOOPER_MAX_SECONDS)
/* Ratio de vitesse de lecture (>1 = plus rapide et plus aigu). 2.0 = une octave au-dessus,
* duree divisee par deux. */
#define AUDIO_LOOPER_PLAYBACK_RATIO 2.0f
/* A appeler une fois au demarrage, comme AudioEffects_Init(). */
void AudioLooper_Init(void);
/* A appeler depuis la tache IHM sur front montant du bouton (appui). Demarre une
* nouvelle capture (ecrase la precedente). */
void AudioLooper_StartRecording(void);
/* A appeler depuis la tache IHM sur front descendant du bouton (relachement). Termine
* la capture et declenche la lecture acceleree de ce qui a ete enregistre. */
void AudioLooper_StopRecordingAndPlay(void);
/* A appeler depuis le chemin audio temps reel, un echantillon a la fois, juste apres
* la chaine d'effets (AudioEffects_Process). Hors enregistrement/lecture, retourne
* sample_in inchange. Pendant l'enregistrement, retourne sample_in inchange (l'ecoute
* live continue normalement pendant la capture). Pendant la lecture, retourne
* l'echantillon rejoue a la place de sample_in, jusqu'a la fin du buffer enregistre. */
float AudioLooper_Process(float sample_in);
#ifdef __cplusplus
}
#endif
#endif /* AUDIO_LOOPER_H */