Skip to content

File syn_audio_mixer.h

File List > audio > syn_audio_mixer.h

Go to the documentation of this file

#ifndef SYN_AUDIO_MIXER_H
#define SYN_AUDIO_MIXER_H

#include "../common/syn_defs.h"

#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>

#ifdef __cplusplus
extern "C" {
#endif

#ifndef SYN_AUDIO_MIXER_MAX_CHANNELS
#define SYN_AUDIO_MIXER_MAX_CHANNELS 4U 
#endif

#define SYN_AUDIO_GAIN_UNITY 32768U

typedef struct {
    const int16_t *buf;  
    size_t sample_count; 
    size_t pos;          
    uint16_t volume_q15; 
    bool active;         
    bool loop;           
} SYN_Audio_Mixer_Channel;

typedef struct {
    SYN_Audio_Mixer_Channel channels[SYN_AUDIO_MIXER_MAX_CHANNELS]; 
    uint16_t master_volume_q15;                                     
} SYN_Audio_Mixer;

SYN_Status syn_audio_mixer_init(SYN_Audio_Mixer *mixer);

SYN_Status syn_audio_mixer_play(SYN_Audio_Mixer *mixer, uint8_t channel_idx, const int16_t *pcm_buf,
                                size_t sample_count, uint16_t volume_q15, bool loop);

SYN_Status syn_audio_mixer_stop(SYN_Audio_Mixer *mixer, uint8_t channel_idx);

SYN_Status syn_audio_mixer_set_channel_volume(SYN_Audio_Mixer *mixer, uint8_t channel_idx,
                                              uint16_t volume_q15);

SYN_Status syn_audio_mixer_set_master_volume(SYN_Audio_Mixer *mixer, uint16_t volume_q15);

size_t syn_audio_mixer_render(SYN_Audio_Mixer *mixer, int16_t *out_pcm, size_t sample_count);

#ifdef __cplusplus
}
#endif

#endif /* SYN_AUDIO_MIXER_H */