21 #include "hx3d/audio/audio.hpp" 22 #include "hx3d/audio/effect.hpp" 24 #include "hx3d/utils/log.hpp" 26 #include <SDL2/SDL_mixer.h> 33 AudioDevice::AudioDevice() {
35 Log.
Info(
"Audio device initialization.");
37 int flags = Mix_Init(~0);
40 if (flags & MIX_INIT_FLAC)
41 types +=
"\t- FLAC\n";
42 if (flags & MIX_INIT_MOD)
44 if (flags & MIX_INIT_MP3)
46 if (flags & MIX_INIT_OGG)
49 types +=
"\t- None\n";
51 Log.
Info(
"Supported audio types: \n%s", types.c_str());
55 Mix_OpenAudio(44100, AUDIO_S16SYS, 1, _bufferSize);
56 Mix_QuerySpec(&_audioRate, &_audioFormat, &_audioChannels);
58 _bits = _audioFormat & 0xFF;
59 _sampleSize = (_bits / 8.f) + _audioChannels;
62 "Audio device information: \n\ 63 \t - %d Hz / %d bits / %s / %d bytes buffer. \n\ 64 \t - Sample size: %d\n",
65 _audioRate, _bits, _audioChannels > 1 ?
"Stereo" :
"Mono", _bufferSize,
69 AudioDevice::~AudioDevice() {
76 [](
int channel,
void* stream,
int len,
void* udata){
80 [](
int channel,
void* udata){
87 Mix_UnregisterAllEffects(channel);
static int PostChannel
Post Channel Identifier.
void clearEffects(const int channel)
Clear all the effects for a channel.
Audio effect manipulation.
virtual void onFunction(const int channel, const void *stream, const int length)
Audio effect function.
static hx3d::LogImpl Log
Current log implementation.
unsigned int getFrequencyRate()
Get the audio device frequency rate.
unsigned int getSampleSize()
Get the audio device sample size.
void registerEffect(const int channel, Effect &effect)
Register an effect on a channel.
virtual void onDone(const int channel)
Audio effect done function.
void Info(const std::string fmt,...)
Write an info message.