blob: 052d17852b758493ce3b805a4ec42d313127c496 [file] [log] [blame]
#ifdef WITH_RIVE_AUDIO
#include "rive/audio/audio_sound.hpp"
#include "rive/audio/audio_engine.hpp"
#include "rive/audio/audio_reader.hpp"
#include "rive/audio/audio_source.hpp"
using namespace rive;
AudioSound::AudioSound(AudioEngine* engine, rcp<AudioSource> source, Artboard* artboard) :
m_decoder({}),
m_buffer({}),
m_sound({}),
m_source(std::move(source)),
m_isDisposed(false),
m_engine(engine),
m_artboard(artboard)
{}
void AudioSound::dispose()
{
if (m_isDisposed)
{
return;
}
m_isDisposed = true;
ma_sound_uninit(&m_sound);
ma_decoder_uninit(&m_decoder.decoder);
ma_audio_buffer_uninit(&m_buffer);
}
float AudioSound::volume() { return ma_sound_get_volume(&m_sound); }
void AudioSound::volume(float value) { ma_sound_set_volume(&m_sound, value); }
bool AudioSound::completed() const
{
if (m_isDisposed)
{
return true;
}
return (bool)ma_sound_at_end(&m_sound);
}
AudioSound::~AudioSound() { dispose(); }
void AudioSound::stop(uint64_t fadeTimeInFrames)
{
if (m_isDisposed)
{
return;
}
if (fadeTimeInFrames == 0)
{
ma_sound_stop(&m_sound);
}
else
{
ma_sound_stop_with_fade_in_pcm_frames(&m_sound, fadeTimeInFrames);
}
}
bool AudioSound::seek(uint64_t timeInFrames)
{
if (m_isDisposed)
{
return false;
}
return ma_sound_seek_to_pcm_frame(&m_sound, (ma_uint64)timeInFrames) == MA_SUCCESS;
}
#endif