@ -35,6 +35,8 @@ bool SoundManager::init() {
void SoundManager : : shutdown ( ) {
void SoundManager : : shutdown ( ) {
if ( ! m_initialized ) return ;
if ( ! m_initialized ) return ;
stopCurrentPcm ( ) ;
for ( auto it = m_sounds . begin ( ) ; it ! = m_sounds . end ( ) ; + + it ) {
for ( auto it = m_sounds . begin ( ) ; it ! = m_sounds . end ( ) ; + + it ) {
if ( it - > sound ) { ma_sound_uninit ( it - > sound ) ; delete it - > sound ; }
if ( it - > sound ) { ma_sound_uninit ( it - > sound ) ; delete it - > sound ; }
if ( it - > decoder ) { ma_decoder_uninit ( it - > decoder ) ; delete it - > decoder ; }
if ( it - > decoder ) { ma_decoder_uninit ( it - > decoder ) ; delete it - > decoder ; }
@ -43,6 +45,11 @@ void SoundManager::shutdown() {
DEBUG_INFO ( DEBUG_CATEGORY_DEBUG , " SoundManager: before ma_engine_uninit engine=%p " , ( void * ) m_engine ) ;
DEBUG_INFO ( DEBUG_CATEGORY_DEBUG , " SoundManager: before ma_engine_uninit engine=%p " , ( void * ) m_engine ) ;
if ( m_engine ) { ma_engine_uninit ( m_engine ) ; delete m_engine ; m_engine = nullptr ; }
if ( m_engine ) { ma_engine_uninit ( m_engine ) ; delete m_engine ; m_engine = nullptr ; }
if ( m_currentPcmSound ) { delete m_currentPcmSound ; m_currentPcmSound = nullptr ; }
if ( m_currentPcmBuffer ) {
ma_audio_buffer * buf = ( ma_audio_buffer * ) m_currentPcmBuffer ;
ma_audio_buffer_uninit ( buf ) ; delete buf ; m_currentPcmBuffer = nullptr ;
}
DEBUG_INFO ( DEBUG_CATEGORY_DEBUG , " SoundManager: after ma_engine_uninit " ) ;
DEBUG_INFO ( DEBUG_CATEGORY_DEBUG , " SoundManager: after ma_engine_uninit " ) ;
m_initialized = false ;
m_initialized = false ;
}
}
@ -145,7 +152,7 @@ void SoundManager::playRawPcm(const int16_t* pcm, int sampleCount, int sampleRat
DEBUG_WARN ( DEBUG_CATEGORY_DEBUG , " SoundManager::playRawPcm: not initialized " ) ;
DEBUG_WARN ( DEBUG_CATEGORY_DEBUG , " SoundManager::playRawPcm: not initialized " ) ;
return ;
return ;
}
}
stopCurrentPcm ( ) ;
if ( m_currentPcmSound ) ma_sound_stop ( m_currentPcmSound ) ;
DEBUG_DEBUG ( DEBUG_CATEGORY_DEBUG , " SoundManager::playRawPcm: %d samples %dHz %dch " , sampleCount , sampleRate , channels ) ;
DEBUG_DEBUG ( DEBUG_CATEGORY_DEBUG , " SoundManager::playRawPcm: %d samples %dHz %dch " , sampleCount , sampleRate , channels ) ;
ma_audio_buffer_config bufCfg = ma_audio_buffer_config_init (
ma_audio_buffer_config bufCfg = ma_audio_buffer_config_init (
@ -181,16 +188,7 @@ void SoundManager::resumeCurrentPcm() {
}
}
void SoundManager : : stopCurrentPcm ( ) {
void SoundManager : : stopCurrentPcm ( ) {
if ( m_currentPcmSound ) {
if ( m_currentPcmSound ) ma_sound_stop ( m_currentPcmSound ) ;
ma_sound_stop ( m_currentPcmSound ) ;
delete m_currentPcmSound ; m_currentPcmSound = nullptr ;
}
if ( m_currentPcmBuffer ) {
ma_audio_buffer * buf = ( ma_audio_buffer * ) m_currentPcmBuffer ;
ma_audio_buffer_uninit ( buf ) ;
delete buf ;
m_currentPcmBuffer = nullptr ;
}
}
}
static QString decodeDeviceName ( const char * name ) {
static QString decodeDeviceName ( const char * name ) {