Staram się, aby moja aplikacja audio była odtwarzana w tle. Dotychczas dodałem „aplikacja odtwarza dźwięk” na „wymaganych trybów tle” w Info.plist a także następujących kodów tuż przed rozpoczęciem mój generator dźwięku:Dźwięk w tle w iOS zatrzymuje się, gdy ekran jest zablokowany.
AudioSessionInitialize(NULL, kCFRunLoopDefaultMode, &interruptionListener, sgD);
AudioSessionAddPropertyListener(kAudioSessionProperty_AudioRouteChange, &routeChangeListener, sgD);
// select "Playback" audio session category
NSError *setCategoryError = nil;
[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error: &setCategoryError];
OSStatus propertySetError = 0;
UInt32 category = kAudioSessionCategory_MediaPlayback;
propertySetError = AudioSessionSetProperty (kAudioSessionProperty_AudioCategory, sizeof (category), &category);
AudioSessionSetActive(true);
Jednak ta działa tylko wtedy, kiedy przełączyć się do innej aplikacji lub na główny ekran iPoda. Kiedy wyłączam ekran, wyłącza również moje wyjście audio, co zdecydowanie nie jest tym, czego chcę. Jednak wszystkie samouczki/dokumentacja/odpowiedzi na pytania dotyczące stackoverflow wydają się wskazywać, że utrzymywanie dźwięku działającego, gdy ekran jest wyłączony, przychodzi automatycznie, gdy dostaniesz dźwięk tła do działania. Czy ktoś ma dla mnie wskazówkę? Z góry dziękuję! Fritz
Co ja zapomniałem powiedzieć: Używam AudioQueues do generowania strumienia wyjściowego audio. Callback kolejki audio zostanie wywołany, gdy ekran jest wyłączony, ale nie słychać dźwięku w słuchawkach. Może to wskazywać na problem z trasą audio. Jednak wywołanie zwrotne zmiany trasy nigdy nie jest wywoływane. –
OK, problem rozwiązany ... Okazuje się, że rozmiar bufora audio musi być wystarczająco duży, jeśli powinien działać, gdy ekran jest wyłączony. Nie wiem, czy dotyczy to wszystkich aplikacji, ale moja aplikacja wymagała bufora o wielkości co najmniej 2048 próbek. Przy 1024 próbkach przestało działać. –
Jeśli byłeś w stanie go uruchomić, czy mógłbyś dodać swoje rozwiązanie jako odpowiedź? Dzięki. –