Problem został rozwiązany!
Ponownie zapisałem kod nagrywania, aby uniknąć tego problemu. Użyłem AudioQueues, zasadniczo kod backendu jest taki sam dla aplikacji SpeakHere z niewielkimi zmianami. Dostarczono jeszcze dwa apisy:
-(void)resume
{
AudioQueueStart(queueObject, NULL);
}
-(void)pause
{
AudioQueuePause(queueObject);
}
W klasie AudioRecorder. Podstawowym celem jest uniknięcie ustawienia nagrywania, które odbywa się metodą rekordową.
Skonfiguruj wywołanie zwrotne przerwania, a następnie użyj tej funkcji wstrzymania i wznów metody odpowiednio w wywołaniu zwrotnym. Należy również ustawić aktywację sesji audio na podstawie tego, czy aplikacja tego potrzebuje, czy nie.
Mam nadzieję, że to komuś pomaga.
EDIT:
audio przerwania słuchacz zwrotna:
void interruptionListenerCallback (void *inUserData, UInt32 interruptionState)
{
if (interruptionState == kAudioSessionBeginInterruption)
{
[self.audioRecorder pause];
}
else if (interruptionState == kAudioSessionEndInterruption)
{
// if the interruption was removed, and the app had been recording, resume recording
[self.audioRecorder resume];
}
}
Nasłuchiwanie przerwy dźwięku:
AudioSessionInitialize(NULL, NULL, interruptionListenerCallback, self);
proszę pisać kod, którego używasz, aby rozpocząć/zatrzymać nagrywanie/pauza. Czy zwalniasz za każdym razem, gdy obiekt AVAudioRecorder tworzy i tworzy nowy? Może to wyjaśniać, dlaczego za każdym razem, gdy rozpoczynasz nagrywanie przy użyciu innego pliku. –
Fyi, Zbudowałem małą przykładową aplikację, która pokazuje, że End Int nie działa poprawnie i zalogował się w tej sprawie z Apple. Jest z nimi przez> 2 miesiące i nic nie słyszałem. – ort11