Wenn Sie die OpenAL Quelle in eine Klasse abstrahiert haben, ich denke, man einfach performSelector:afterDelay:
anrufen können, wenn Sie den Sound starten:
- (void) play
{
[delegate performSelector:@selector(soundHasFinishedPlaying)
afterDelay:self.length];
…
}
(Wenn Sie den Ton manuell in der Zwischenzeit stoppen, kann der Rückruf sein siehe abgebrochen, die NSObject Class Reference) Oder Sie können abfragen, die AL_SOURCE_STATE
.
- (void) checkStatus
{
ALint state;
alGetSourcei(source, AL_SOURCE_STATE, &state);
if (state == AL_PLAYING)
return;
[timer invalidate];
[delegate soundHasFinishedPlaying];
}
ich weiß nicht, wie Sie OpenAL zurückrufen haben. Für was genau möchtest du den Rückruf? Manche Dinge lassen sich besser ohne Rückruf lösen.
Diese Frage ist zu diesem Zeitpunkt 5 Jahre alt, aber für newbs zu OpenAL wie mir gibt es nun ein Objective-C APi für OpenAL und eine Klasse im Demoprojekt ('SourceNotificationsDemo'), die diese Funktionalität demonstriert. – livingtech
@livingtech könnten Sie einen Link zur Verfügung stellen? – Zorayr
Projekt hier: https://github.com/kenenerud/ObjectAL-for-iPhone – livingtech