11// SPDX-License-Identifier: Apache-2.0
22
33#include < iostream>
4+ #include < cassert>
45
56#include " audioplayer.h"
67#include " audioengine.h"
@@ -26,7 +27,7 @@ AudioPlayer::~AudioPlayer()
2627
2728bool AudioPlayer::load (unsigned int size, const void *data, unsigned long sampleRate)
2829{
29- if (!AudioEngine::initialized ())
30+ if (!AudioEngine::initialized () || m_loaded )
3031 return false ;
3132
3233 ma_engine *engine = AudioEngine::engine ();
@@ -55,6 +56,33 @@ bool AudioPlayer::load(unsigned int size, const void *data, unsigned long sample
5556 return true ;
5657}
5758
59+ bool AudioPlayer::loadCopy (IAudioPlayer *player)
60+ {
61+ assert (player && dynamic_cast <AudioPlayer *>(player));
62+
63+ if (!AudioEngine::initialized () || !player)
64+ return false ;
65+
66+ ma_engine *engine = AudioEngine::engine ();
67+
68+ AudioPlayer *playerPtr = static_cast <AudioPlayer *>(player);
69+ ma_result initResult = ma_sound_init_from_data_source (engine, playerPtr->m_decoder , MA_SOUND_FLAG_DECODE, NULL , m_sound);
70+
71+ if (initResult != MA_SUCCESS) {
72+ std::cerr << " Failed to init sound copy." << std::endl;
73+ return false ;
74+ }
75+
76+ m_loaded = true ;
77+ ma_sound_set_volume (m_sound, m_volume);
78+ return true ;
79+ }
80+
81+ float AudioPlayer::volume () const
82+ {
83+ return m_volume;
84+ }
85+
5886void AudioPlayer::setVolume (float volume)
5987{
6088 m_volume = volume;
@@ -65,6 +93,11 @@ void AudioPlayer::setVolume(float volume)
6593 ma_sound_set_volume (m_sound, volume);
6694}
6795
96+ bool AudioPlayer::isLoaded () const
97+ {
98+ return m_loaded;
99+ }
100+
68101void AudioPlayer::start ()
69102{
70103 if (!m_loaded)
0 commit comments