Mixing of sound samples.
More...
#include "stdafx.h"
#include <mutex>
#include <atomic>
#include "core/math_func.hpp"
#include "framerate_type.h"
#include "mixer.h"
#include "settings_type.h"
#include "safeguards.h"
Go to the source code of this file.
|
template<typename T > |
static int | RateConversion (T *b, int frac_pos) |
| Perform the rate conversion between the input and output.
|
|
template<typename T > |
static void | mix_int16 (MixerChannel *sc, int16_t *buffer, uint samples, uint8_t effect_vol) |
|
static void | MxCloseChannel (uint8_t channel_index) |
|
void | MxCloseAllChannels () |
| Close all mixer channels.
|
|
void | MxMixSamples (void *buffer, uint samples) |
|
MixerChannel * | MxAllocateChannel () |
|
void | MxSetChannelRawSrc (MixerChannel *mc, const std::shared_ptr< std::vector< uint8_t > > &mem, uint rate, bool is16bit) |
|
void | MxSetChannelVolume (MixerChannel *mc, uint volume, float pan) |
| Set volume and pan parameters for a sound.
|
|
void | MxActivateChannel (MixerChannel *mc) |
|
uint32_t | MxSetMusicSource (MxStreamCallback music_callback) |
| Set source of PCM music.
|
|
bool | MxInitialize (uint rate) |
|
void | SetEffectVolume (uint8_t volume) |
|
Mixing of sound samples.
Definition in file mixer.cpp.
◆ MixerChannelMask
Type representing a bitmask of mixer channels.
Definition at line 37 of file mixer.cpp.
◆ mix_int16()
template<typename T >
static void mix_int16 |
( |
MixerChannel * |
sc, |
|
|
int16_t * |
buffer, |
|
|
uint |
samples, |
|
|
uint8_t |
effect_vol |
|
) |
| |
|
static |
◆ MxActivateChannel()
◆ MxAllocateChannel()
◆ MxCloseAllChannels()
void MxCloseAllChannels |
( |
| ) |
|
Close all mixer channels.
This signals to the mixer that each channel should be closed even if it has not played all remaining samples. This is safe (and designed) to be called from the main thread.
Definition at line 119 of file mixer.cpp.
Referenced by ChangeSoundSet().
◆ MxCloseChannel()
static void MxCloseChannel |
( |
uint8_t |
channel_index | ) |
|
|
static |
◆ MxInitialize()
bool MxInitialize |
( |
uint |
rate | ) |
|
◆ MxMixSamples()
void MxMixSamples |
( |
void * |
buffer, |
|
|
uint |
samples |
|
) |
| |
◆ MxSetChannelRawSrc()
void MxSetChannelRawSrc |
( |
MixerChannel * |
mc, |
|
|
const std::shared_ptr< std::vector< uint8_t > > & |
mem, |
|
|
uint |
rate, |
|
|
bool |
is16bit |
|
) |
| |
◆ MxSetChannelVolume()
void MxSetChannelVolume |
( |
MixerChannel * |
mc, |
|
|
uint |
volume, |
|
|
float |
pan |
|
) |
| |
Set volume and pan parameters for a sound.
- Parameters
-
mc | MixerChannel to set |
volume | Volume level for sound, range is 0..16384 |
pan | Pan position for sound, range is 0..1 |
Definition at line 213 of file mixer.cpp.
◆ MxSetMusicSource()
◆ RateConversion()
template<typename T >
static int RateConversion |
( |
T * |
b, |
|
|
int |
frac_pos |
|
) |
| |
|
static |
Perform the rate conversion between the input and output.
- Parameters
-
b | the buffer to read the data from |
frac_pos | the position from the begin of the buffer till the next element |
- Template Parameters
-
T | the size of the buffer (8 or 16 bits) |
- Returns
- the converted value.
Definition at line 64 of file mixer.cpp.
◆ SetEffectVolume()
void SetEffectVolume |
( |
uint8_t |
volume | ) |
|
◆ _active_channels
◆ _channels
◆ _effect_vol
std::atomic<uint8_t> _effect_vol |
|
static |
◆ _max_size
uint32_t _max_size = UINT_MAX |
|
static |
◆ _music_stream
◆ _music_stream_mutex
std::mutex _music_stream_mutex |
|
static |
◆ _play_rate
uint32_t _play_rate = 11025 |
|
static |
◆ _stop_channels
◆ MAX_VOLUME
const int MAX_VOLUME = 32767 |
|
static |
The theoretical maximum volume for a single sound sample.
Multiple sound samples should not exceed this limit as it will sound too loud. It also stops overflowing when too many sounds are played at the same time, which causes an even worse sound quality.
Definition at line 54 of file mixer.cpp.