- Home /
Find out if Audio Source has finished playing clip
Is there a way to get the Audio Source's clip's current PlaybackPosition or similar so I could find out if the source has finished playing the clip. There seems to be no event attached to the source and using the IsPlaying cannot be "simply" used. If I poll the IsPlaying every frame, pausing (or minimizing/suspending the game) all Audio Sources would trigger the wrong code section to execute eg.
void Update()
{
if (!audioSource.IsPlaying)
{
// Assume audioSource has finished playing a clip.
// Do work.
}
}
void PauseAllAudioSources()
{
foreach (var source in FindObjectsOfType<AudioSource>())
{
source.Pause();
}
}
or
IEnumerator CoroutineMethod()
{
yield return new WaitUntil(() => audioSource.isPlaying == false);
}
If I use the "Coroutine waiting method" eg.
IEnumerator WaitForSound(AudioClip clip)
{
audioSource.Clip = clip;
audioSource.Play();
yield return new WaitForSeconds(clip.length); // why is length lower case anyway
// Do work.
}
pausing would still break the code, but also the clip's length could be modified by audio effects. It seems like there is no way to do it "the right way", so how can do this somewhat correctly, or do I have to code a somewhat complicated Audio Manager?
Answer by Verfin · Aug 15, 2017 at 11:49 AM
Just found out about
audioSource.time
that "tells" the playback position in seconds, but it doesn't update correctly if the audio clip is compressed. So the question still stands. How can I get the ACTUAL audioSource.Time?
Your answer
Follow this Question
Related Questions
Audio Sdk Teleport plugin Au VsT for windows? 0 Answers
AudioHighPassFilter with multiple AudioSource 1 Answer
Guys i need help with audio! 0 Answers
Audio Settings Menu 2 Answers
It is possible to start a streaming AudioClip not from the beginning ? 1 Answer