11// SPDX-License-Identifier: Apache-2.0
22
33#include < iostream>
4+ #include < miniaudio.h>
45
56#include " audioengine.h"
67
78using namespace libscratchcpp ;
89
910AudioEngine AudioEngine::instance;
1011
12+ IAudioEngine *IAudioEngine::instance ()
13+ {
14+ return &AudioEngine::instance;
15+ }
16+
1117ma_engine *AudioEngine::engine ()
1218{
1319 if (!instance.m_initialized )
1420 instance.init ();
1521
16- return instance.m_initialized ? & instance.m_engine : nullptr ;
22+ return instance.m_initialized ? instance.m_engine : nullptr ;
1723}
1824
1925bool AudioEngine::initialized ()
@@ -24,20 +30,36 @@ bool AudioEngine::initialized()
2430 return instance.m_initialized ;
2531}
2632
33+ float AudioEngine::volume () const
34+ {
35+ return m_volume;
36+ }
37+
38+ void AudioEngine::setVolume (float volume)
39+ {
40+ m_volume = volume;
41+
42+ if (m_initialized)
43+ ma_engine_set_volume (m_engine, volume);
44+ }
45+
2746AudioEngine::AudioEngine ()
2847{
2948}
3049
3150AudioEngine::~AudioEngine ()
3251{
33- if (m_initialized)
34- ma_engine_uninit (&m_engine);
52+ if (m_initialized && m_engine) {
53+ ma_engine_uninit (m_engine);
54+ delete m_engine;
55+ }
3556}
3657
3758void AudioEngine::init ()
3859{
3960 ma_result result;
40- result = ma_engine_init (NULL , &m_engine);
61+ m_engine = new ma_engine;
62+ result = ma_engine_init (NULL , m_engine);
4163
4264 if (result != MA_SUCCESS) {
4365 std::cerr << " Failed to initialize audio engine." << std::endl;
0 commit comments