I have just double checked that I don’t do anything between mixerSuspend()
and mixerResume()
. When the App enters the background we also pause our render loop so the update()
call is also suppressed. This is not 100% reproducible with every background / foreground event so I had to attempt it a couple of times with more logging on to get it to reproduce. I have omitted many of the File::checkBufferedStatus
and File::read
calls from the log between the suspend / resume events because I don’t think it is relevant.
The way the audio is being loaded goes like this:
FMOD_CREATESOUNDEXINFO exinfo;
memset(&exinfo, 0, sizeof(FMOD_CREATESOUNDEXINFO));
exinfo.cbsize = sizeof(FMOD_CREATESOUNDEXINFO);
exinfo.nonblockcallback = nonblockcallback;
FMOD_RESULT result = m_fmodSystem->createStream(fullPath.c_str(), FMOD_LOOP_NORMAL | FMOD_2D | FMOD_NONBLOCKING, &exinfo, &m_music);
...
// Call back for non-blocking IO.
void SoundManager::nonBlockingPlayMusic() {
...
FMOD_RESULT result;
int numSubSounds = 0;
result = m_music->getNumSubSounds(&numSubSounds);
FMOD_CHECK_RESULT(result);
if (numSubSounds)
{
FMOD_CHECK_RESULT(m_music->getSubSound(0, &m_music));
}
result = m_fmodSystem->playSound(m_music, m_musicGroup, true, &m_musicChannel);
if(result == FMOD_OK)
{
m_musicChannel->setCallback(channelControlCallback); // Only for detecting this error
FMOD_CHECK_RESULT(m_musicChannel->setPaused(false));
}
else
{
FMOD_CHECK_RESULT(result);
}
...
}
Initialization logs:
[LOG] FMOD_System_Create : Header version = 2.03.08. Current version = 2.03.08.
[LOG] SystemI::setOutputInternal : Setting output to 'FMOD Core Audio Output'
[LOG] Thread::initThread : Init FMOD stream thread. Affinity: 0x4000000000000003, Priority: 0xFFFF7FFB, Stack Size: 98304, Semaphore: No, Sleep Time: 10, Looping: Yes.
[LOG] Thread::initThread : Init FMOD mixer thread. Affinity: 0x4000000000000001, Priority: 0xFFFF7FFA, Stack Size: 81920, Semaphore: Yes, Sleep Time: 0, Looping: Yes.
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_memory.cpp(746) : TID 312324224 : 2892930435 ms +0 : [LOG] MemPool::alloc : 600 bytes (0x10417d058) /opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_systemi_channel.cpp(116) #166
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_memory.cpp(746) : TID 312324224 : 2892930435 ms +0 : [LOG] MemPool::alloc : 720 bytes (0x10417d958) /opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_pluginfactory.cpp(1458) #167
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_memory.cpp(746) : TID 312324224 : 2892930435 ms +0 : [LOG] MemPool::alloc : 21 bytes (0x600000400ea8) /opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_string.cpp(362) #168
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_memory.cpp(746) : TID 312324224 : 2892930435 ms +0 : [LOG] MemPool::alloc : 600 bytes (0x10417dc28) /opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_systemi_channel.cpp(116) #169
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_memory.cpp(746) : TID 312324224 : 2892930435 ms +0 : [LOG] MemPool::alloc : 720 bytes (0x10417de88) /opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_pluginfactory.cpp(1458) #170
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_memory.cpp(746) : TID 312324224 : 2892930435 ms +0 : [LOG] MemPool::alloc : 14 bytes (0x60000004c668) /opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_string.cpp(362) #171
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_systemi.cpp(4084) : TID 312324224 : 2892932125 ms +1690 : [LOG] SystemI::createSound : filename = /Users/sbehnke/Library/Developer/CoreSimulator/Devices/7A8C769E-35BF-48C0-9CA0-6D3E48CE8AA6/data/Containers/Bundle/Application/4C163728-C306-46AF-BB8B-D3B12355D3E7/Wizard-of-Oz.app/worlds/rainbow_world/sounds/Lobby_Music.mp3 : mode 0001008a
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_systemi.cpp(4088) : TID 312324224 : 2892932125 ms +0 : [LOG] SystemI::createSound : FMOD_NONBLOCKING specified. Putting into queue to be opened asynchronously!
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_memory.cpp(746) : TID 312324224 : 2892932125 ms +0 : [LOG] MemPool::alloc : 392 bytes (0x171428778) /opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_systemi.cpp(4094) #172
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_memory.cpp(746) : TID 312324224 : 2892932125 ms +0 : [LOG] MemPool::alloc : 328 bytes (0x171428908) /opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_systemi.cpp(4142) #173
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_memory.cpp(746) : TID 312324224 : 2892932125 ms +0 : [LOG] MemPool::alloc : 233 bytes (0x600003d82fd8) /opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_systemi.cpp(4156) #174
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_async.cpp(384) : TID 312324224 : 2892932125 ms +0 : [LOG] AsyncThread::getAsyncThread : index = 0 / 5
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_memory.cpp(746) : TID 312324224 : 2892932125 ms +0 : [LOG] MemPool::alloc : 384 bytes (0x171428a58) /opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_async.cpp(401) #175
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_memory.cpp(746) : TID 312324224 : 2892932125 ms +0 : [LOG] MemPool::alloc : 72 bytes (0x6000062857c8) /opt/teamcity-agent/work/c1c3f17eb167c494/core_api/platforms/ios/src/fmod_os_misc.cpp(509) #176
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_thread.cpp(216) : TID 312324224 : 2892932126 ms +1 : [LOG] Thread::initThread : Init FMOD nonblocking thread (0). Affinity: 0x4000000000000003, Priority: 0xFFFF7FFC, Stack Size: 114688, Semaphore: Yes, Sleep Time: 0, Looping: Yes.
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_memory.cpp(746) : TID 312324224 : 2892932126 ms +0 : [LOG] MemPool::alloc : 280 bytes (0x1714283b8) /opt/teamcity-agent/work/c1c3f17eb167c494/core_api/platforms/ios/src/fmod_os_misc.cpp(440) #177
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_memory.cpp(848) : TID 312335365 : 2892932126 ms +0 : [LOG] MemPool::free : 280 bytes (0x1714283b8) /opt/teamcity-agent/work/c1c3f17eb167c494/core_api/platforms/ios/src/fmod_os_misc.cpp(373)
../../src/fmod_async.h(74) : TID 312324224 : 2892932127 ms +1 : [LOG] AsyncThread::add : add sound to async queue : soundi = 0x171428778, queue head = 0x171428ba8, queue count = 0
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_async.cpp(193) : TID 312335365 : 2892932127 ms +0 : [LOG] AsyncThread::threadFunc : Starting Asynchronous operation on sound 0x171428778
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_systemi_sound.cpp(621) : TID 312335365 : 2892932127 ms +0 : [LOG] SystemI::createSoundInternal : Create name='<REDACTED>/Music.mp3', mode=0x0001008A
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_systemi_sound.cpp(627) : TID 312335365 : 2892932127 ms +0 : [LOG] SystemI::createSoundInternal : exinfo->cbsize = 224
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_systemi_sound.cpp(679) : TID 312335365 : 2892932128 ms +1 : [LOG] SystemI::createSoundInternal : exinfo->nonblockcallback = 0x11b6e1958
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_memory.cpp(746) : TID 312335365 : 2892932128 ms +0 : [LOG] MemPool::alloc : 512 bytes (0x171428d68) /opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_systemi_sound.cpp(569) #178
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_file.cpp(409) : TID 312335365 : 2892932128 ms +0 : [LOG] File::open : name /Users/sbehnke/Library/Developer/CoreSimulator/Devices/7A8C769E-35BF-48C0-9CA0-6D3E48CE8AA6/data/Containers/Bundle/Application/4C163728-C306-46AF-BB8B-D3B12355D3E7/Wizard-of-Oz.app/worlds/rainbow_world/sounds/Lobby_Music.mp3 : length 0
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_file.cpp(482) : TID 312335365 : 2892932129 ms +1 : [LOG] File::open : done. handle 0x171428d68. File size = 216711
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_systemi_sound.cpp(906) : TID 312335365 : 2892932129 ms +0 : [LOG] SystemI::createSoundInternal : 16 codecs found. Scan all until one succeeds
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_systemi_sound.cpp(965) : TID 312335365 : 2892932129 ms +0 : [LOG] SystemI::createSoundInternal : Scan for tags.
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_file.cpp(1626) : TID 312335365 : 2892932129 ms +0 : [LOG] File::seek : 0x171428d68 seek 0 bytes to 0
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_codec_tag.cpp(106) : TID 312335365 : 2892932129 ms +0 : [LOG] CodecTag::openInternal : attempting to open ID3 or ASF tags..
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_file.cpp(1626) : TID 312335365 : 2892932129 ms +0 : [LOG] File::seek : 0x171428d68 seek 216583 bytes to 216583
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_file.cpp(1024) : TID 312335365 : 2892932129 ms +0 : [LOG] File::read : 0x171428d68----> want to read 3
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_file.cpp(863) : TID 312335365 : 2892932129 ms +0 : [LOG] File::checkBufferedStatus : 0x171428d68 mCurrentPosition 216583 mNextPosition 0 nextpos diffbytes -216583 diff -1
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_file.cpp(796) : TID 312335365 : 2892932129 ms +0 : [LOG] File::seekAndReset : 0x171428d68 seek to 215040
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_file.cpp(797) : TID 312335365 : 2892932131 ms +2 : [LOG] File::seekAndReset : 0x171428d68 reset mBufferPos to 1543
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_file.cpp(924) : TID 312335365 : 2892932131 ms +0 : [LOG] File::checkBufferedStatus : 0x171428d68 FORCIBLY FILL FRONTBUFFER
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_file.cpp(620) : TID 312335365 : 2892932131 ms +0 : [LOG] File::flip : 0x171428d68 **** fill to 0 with 2048 bytes. mBlockOffset 0 mBufferSkip 0 mAsyncRead 0
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_file.cpp(726) : TID 312335365 : 2892932131 ms +0 : [LOG] File::flip : 0x171428d68 **** filled to 0 got 1671 bytes
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_file.cpp(1122) : TID 312335365 : 2892932131 ms +0 : [LOG] File::read : 0x171428d68 copied 3 bytes from mBufferPos = 1543
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_file.cpp(1137) : TID 312335365 : 2892932132 ms +1 : [LOG] File::read : 0x171428d68<---- done
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_file.cpp(1024) : TID 312335365 : 2892932132 ms +0 : [LOG] File::read : 0x171428d68----> want to read 30
...
The new log shows more interesting data on the resume condition where the background audio stops:
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_file.cpp(863) : TID 312335201 : 2892966964 ms +0 : [LOG] File::checkBufferedStatus : 0x171428d68 mCurrentPosition 156045 mNextPosition 180224 nextpos diffbytes 24179 diff 2
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_file.cpp(1122) : TID 312335201 : 2892966964 ms +0 : [LOG] File::read : 0x171428d68 copied 261 bytes from mBufferPos = 24973
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_file.cpp(1137) : TID 312335201 : 2892966964 ms +0 : [LOG] File::read : 0x171428d68<---- done
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_file.cpp(1626) : TID 312335201 : 2892966987 ms +23 : [LOG] File::seek : 0x171428d68 seek 0 bytes to 156306
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_file.cpp(1024) : TID 312335201 : 2892966987 ms +0 : [LOG] File::read : 0x171428d68----> want to read 208
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_file.cpp(863) : TID 312335201 : 2892966987 ms +0 : [LOG] File::checkBufferedStatus : 0x171428d68 mCurrentPosition 156306 mNextPosition 180224 nextpos diffbytes 23918 diff 2
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_file.cpp(1122) : TID 312335201 : 2892966987 ms +0 : [LOG] File::read : 0x171428d68 copied 208 bytes from mBufferPos = 25234
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_file.cpp(1137) : TID 312335201 : 2892966987 ms +0 : [LOG] File::read : 0x171428d68<---- done
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_systemi.cpp(3717) : TID 312324224 : 2892967008 ms +21 : [LOG] SystemI::mixerSuspend : Suspending output.
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_memory.cpp(746) : TID 312324224 : 2892967010 ms +2 : [LOG] MemPool::alloc : 8 bytes (0x600000029a38) /opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_systemi_driver.cpp(281) #278
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_thread.cpp(172) : TID 312336377 : 2892967023 ms +13 : [LOG] Thread::callback : FMOD mixer thread finished.
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_memory.cpp(848) : TID 312324224 : 2892967025 ms +2 : [LOG] MemPool::free : 16392 bytes (0x1069cca08) /opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_output.cpp(1848)
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_memory.cpp(848) : TID 312324224 : 2892967025 ms +0 : [LOG] MemPool::free : 4184 bytes (0x1069e4208) /opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_dsp_resampler.cpp(209)
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_memory.cpp(848) : TID 312324224 : 2892967025 ms +0 : [LOG] MemPool::free : 736 bytes (0x1044aee88) /opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_systemi_driver.cpp(313)
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_systemi.cpp(3769) : TID 312324224 : 2892968448 ms +1423 : [LOG] SystemI::mixerResume : Resuming output.
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/platforms/ios/src/fmod_codec_audioqueue.cpp(236) : TID 312335201 : 2892968448 ms +0 : [ERR] CodecAudioQueue::readInternal : Cannot offline render audio queue. (err: -50)
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/platforms/ios/src/fmod_output_coreaudio.mm(152) : TID 312324224 : 2892968448 ms +0 : [LOG] OutputCoreAudio::init : Hardware buffer size: 480 samples, hardware sample rate: 48000Hz, hardware channels: 2
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_memory.cpp(746) : TID 312324224 : 2892968449 ms +1 : [LOG] MemPool::alloc : 16392 bytes (0x106369a08) /opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_output.cpp(1828) #279
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/platforms/ios/src/fmod_output_coreaudio.mm(213) : TID 312324224 : 2892968449 ms +0 : [LOG] OutputCoreAudio::init : Maximum hardware read size: 4096 samples, Software buffer size: 512 samples, Number of software buffers: 4.
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/platforms/ios/src/fmod_output_coreaudio.mm(216) : TID 312324224 : 2892968449 ms +0 : [WRN] OutputCoreAudio::init : DSP buffer size * DSP num buffers is potentially too small.
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_systemi_driver.cpp(415) : TID 312324224 : 2892968449 ms +0 : [LOG] SystemI::startDriver : Output requires a sample rate of 48000Hz, resampling will occur.
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_memory.cpp(746) : TID 312324224 : 2892968449 ms +0 : [LOG] MemPool::alloc : 736 bytes (0x1042c5108) /opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_systemi_driver.cpp(487) #280
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_memory.cpp(746) : TID 312324224 : 2892968449 ms +0 : [LOG] MemPool::alloc : 4184 bytes (0x106363a08) /opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_dsp_resampler.cpp(169) #281
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_thread.cpp(216) : TID 312324224 : 2892968449 ms +0 : [LOG] Thread::initThread : Init FMOD mixer thread. Affinity: 0x4000000000000001, Priority: 0xFFFF7FFA, Stack Size: 81920, Semaphore: Yes, Sleep Time: 0, Looping: Yes.
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_memory.cpp(746) : TID 312324224 : 2892968449 ms +0 : [LOG] MemPool::alloc : 280 bytes (0x1042db6e8) /opt/teamcity-agent/work/c1c3f17eb167c494/core_api/platforms/ios/src/fmod_os_misc.cpp(440) #282
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_memory.cpp(848) : TID 312336511 : 2892968450 ms +1 : [LOG] MemPool::free : 280 bytes (0x1042db6e8) /opt/teamcity-agent/work/c1c3f17eb167c494/core_api/platforms/ios/src/fmod_os_misc.cpp(373)
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_memory.cpp(848) : TID 312324224 : 2892968451 ms +1 : [LOG] MemPool::free : 8 bytes (0x600000029a38) /opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_systemi_driver.cpp(452)
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_file.cpp(1626) : TID 312324224 : 2892968456 ms +5 : [LOG] File::seek : 0x171428d68 seek -469 bytes to 156045
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_file.cpp(1024) : TID 312324224 : 2892968456 ms +0 : [LOG] File::read : 0x171428d68----> want to read 261
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_file.cpp(863) : TID 312324224 : 2892968456 ms +0 : [LOG] File::checkBufferedStatus : 0x171428d68 mCurrentPosition 156045 mNextPosition 180224 nextpos diffbytes 24179 diff 2
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_file.cpp(1122) : TID 312324224 : 2892968456 ms +0 : [LOG] File::read : 0x171428d68 copied 261 bytes from mBufferPos = 24973
/opt/teamcity-agent/work/c1c3f17eb167c494/core_api/src/fmod_file.cpp(1137) : TID 312324224 : 2892968456 ms +0 : [LOG] File::read : 0x171428d68<---- done
The log is too big to include here and as a new user I cannot upload it. I will email it to support@fmod.com if you need more than what I’ve provided.
Thanks,
Steven