Skip to content

File syn_audio_mixer.c

FileList > audio > syn_audio_mixer.c

Go to the source code of this file

Implementation of Zero-Heap Multi-Channel Audio Mixer.

  • #include "syn_audio_mixer.h"
  • #include <string.h>

Public Functions

Type Name
SYN_Status syn_audio_mixer_init (SYN_Audio_Mixer * mixer)
Initialize an Audio Mixer instance.
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)
Assign a PCM sample buffer to a mixer channel for playback.
size_t syn_audio_mixer_render (SYN_Audio_Mixer * mixer, int16_t * out_pcm, size_t sample_count)
Render mixed PCM audio into an output sample buffer.
SYN_Status syn_audio_mixer_set_channel_volume (SYN_Audio_Mixer * mixer, uint8_t channel_idx, uint16_t volume_q15)
Adjust gain for a specific channel.
SYN_Status syn_audio_mixer_set_master_volume (SYN_Audio_Mixer * mixer, uint16_t volume_q15)
Adjust master gain across all channels.
SYN_Status syn_audio_mixer_stop (SYN_Audio_Mixer * mixer, uint8_t channel_idx)
Stop channel playback immediately.

Public Static Functions

Type Name
int16_t saturate_i32_to_i16 (int32_t val)
Clamp signed 32-bit value into signed 16-bit range.

Public Functions Documentation

function syn_audio_mixer_init

Initialize an Audio Mixer instance.

SYN_Status syn_audio_mixer_init (
    SYN_Audio_Mixer * mixer
) 

Parameters:

  • mixer Pointer to Audio Mixer instance.

Returns:

SYN_OK on success, or SYN_INVALID_PARAM.


function syn_audio_mixer_play

Assign a PCM sample buffer to a mixer channel for playback.

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
) 

Parameters:

  • mixer Pointer to Audio Mixer instance.
  • channel_idx Channel index (0 .. SYN_AUDIO_MIXER_MAX_CHANNELS - 1).
  • pcm_buf Pointer to 16-bit PCM sample array.
  • sample_count Sample count in pcm_buf.
  • volume_q15 Channel gain (Q15, 32768 = 1.0).
  • loop True to restart automatically upon reaching buffer end.

Returns:

SYN_OK on success, or SYN_INVALID_PARAM.


function syn_audio_mixer_render

Render mixed PCM audio into an output sample buffer.

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

Accumulates active channels, applies Q15 scaling, saturates to [-32768, 32767], and writes to out_pcm.

Parameters:

  • mixer Pointer to Audio Mixer instance.
  • out_pcm Output 16-bit PCM buffer pointer.
  • sample_count Output sample count to render.

Returns:

Number of samples actually generated (0 if no active channels or NULL).


function syn_audio_mixer_set_channel_volume

Adjust gain for a specific channel.

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

Parameters:

  • mixer Pointer to Audio Mixer instance.
  • channel_idx Channel index (0 .. SYN_AUDIO_MIXER_MAX_CHANNELS - 1).
  • volume_q15 New gain value (Q15).

Returns:

SYN_OK on success, or SYN_INVALID_PARAM / SYN_ERR_OUT_OF_BOUNDS.


function syn_audio_mixer_set_master_volume

Adjust master gain across all channels.

SYN_Status syn_audio_mixer_set_master_volume (
    SYN_Audio_Mixer * mixer,
    uint16_t volume_q15
) 

Parameters:

  • mixer Pointer to Audio Mixer instance.
  • volume_q15 New master gain value (Q15).

Returns:

SYN_OK on success, or SYN_INVALID_PARAM.


function syn_audio_mixer_stop

Stop channel playback immediately.

SYN_Status syn_audio_mixer_stop (
    SYN_Audio_Mixer * mixer,
    uint8_t channel_idx
) 

Parameters:

  • mixer Pointer to Audio Mixer instance.
  • channel_idx Channel index (0 .. SYN_AUDIO_MIXER_MAX_CHANNELS - 1).

Returns:

SYN_OK on success, or SYN_INVALID_PARAM / SYN_ERR_OUT_OF_BOUNDS.


Public Static Functions Documentation

function saturate_i32_to_i16

Clamp signed 32-bit value into signed 16-bit range.

static inline int16_t saturate_i32_to_i16 (
    int32_t val
) 

Parameters:

  • val Input 32-bit sample value.

Returns:

Clamped 16-bit sample value.



The documentation for this class was generated from the following file src/syntropic/audio/syn_audio_mixer.c