I am very sure. This is the relevant playback function from PSPdisp:
Code: Select all
void audioPlaybackThread(SceSize args, void *argp)
{
l_lastPlaybackPosition = 0;
while (l_runAudioThread)
{
// Check if the playing position advanced over the filling position, mute sound if so
if ((l_lastPlaybackPosition <= g_comAudioWritePosition) && (g_audioPlaybackPosition >= g_comAudioWritePosition))
audioResetPlaybackBuffer();
if (g_audioPlaybackPosition + (g_audioCurrentFrameSize * 2) > g_audioCurrentBufferSize)
g_audioPlaybackPosition = 0;
sceAudioSRCOutputBlocking(PSP_AUDIO_VOLUME_MAX, &(g_comAudioReceiveBuffer[g_audioPlaybackPosition]));
l_lastPlaybackPosition = g_audioPlaybackPosition;
g_audioPlaybackPosition += (g_audioCurrentFrameSize * 2);
}
}
The thread depends on the blocking behaviour. If it wouldn't block until the whole buffer is played, it should stutter horribly.
Edit: Okay, to be absolutely sure I measured the amount of ticks the function takes before returning. The result was
Code: Select all
~200000 for 11 kHz with 2240 samples
~100000 for 22 kHz with 2240 samples
~60000 for 44 kHz with 2688 samples
q.e.d.