Isolating playback loop in auxiliary function

This commit is contained in:
Mike H 2018-02-13 20:00:45 +00:00 committed by GitHub
parent 1eba837090
commit d7c8fd6c84
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -19,6 +19,29 @@ void fill_audio_buffer(void* audio_buffer, size_t offset, size_t size, int frequ
} }
} }
void audout_play(Handle event, AudioOutBuffer source_buffer, AudioOutBuffer released_buffer) {
u64 time_now = svcGetSystemTick();
while ((svcGetSystemTick() - time_now) < 1250000)
{
s32 index;
Result do_wait = svcWaitSynchronization(&index, &event, 1, 10000000);
if (R_SUCCEEDED(do_wait))
{
svcResetSignal(event);
u32 released_count = 0;
Result do_release = audoutGetReleasedAudioOutBuffer(&released_buffer, &released_count);
while (R_SUCCEEDED(do_release) && (released_count > 0))
{
do_release = audoutGetReleasedAudioOutBuffer(&released_buffer, &released_count);
audoutAppendAudioOutBuffer(&source_buffer);
}
}
}
}
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
Result rc = 0; Result rc = 0;
@ -152,27 +175,7 @@ int main(int argc, char **argv)
if (play_tone) if (play_tone)
{ {
u64 time_now = svcGetSystemTick(); audout_play(event, source_buffer, released_buffer);
while ((svcGetSystemTick() - time_now) < 1250000)
{
s32 index;
Result do_wait = svcWaitSynchronization(&index, &event, 1, 10000000);
if (R_SUCCEEDED(do_wait))
{
svcResetSignal(event);
u32 released_count = 0;
Result do_release = audoutGetReleasedAudioOutBuffer(&released_buffer, &released_count);
while (R_SUCCEEDED(do_release) && (released_count > 0))
{
do_release = audoutGetReleasedAudioOutBuffer(&released_buffer, &released_count);
audoutAppendAudioOutBuffer(&source_buffer);
}
}
}
play_tone = false; play_tone = false;
} }
@ -185,8 +188,6 @@ int main(int argc, char **argv)
printf("audoutStopAudioOut() returned 0x%x\n", rc); printf("audoutStopAudioOut() returned 0x%x\n", rc);
audoutExit(); audoutExit();
gfxExit(); gfxExit();
return 0; return 0;
} }