фоновая аудиозапись в iOS - PullRequest
       35

фоновая аудиозапись в iOS

1 голос
/ 17 февраля 2011

Я искал документацию о том, как записывать аудио в фоновом режиме, и пришел к выводу, что указание 'audio' в файле plist может сработать.Но, поскольку iOS 4 завершает работу фоновых приложений, когда у нее заканчивается память, мы также должны предпринять некоторые шаги, чтобы уменьшить использование памяти при переходе в фоновый режим.Как уменьшить использование памяти?

Кроме того, кто-нибудь знает надежный способ записи звука в фоновом режиме на iOS ??

Я снял флажок в файле Info.plist, которыйговорит "Приложение не работает в фоновом режиме", а также добавил

<key> UIBackgroundModes </ key> < array> < string> audio</ string></ array>

в Info.plist.Но запись останавливается, как только я нажимаю кнопку «HOME».

Какие обратные вызовы мы реализуем, чтобы узнать, что приложение перешло в фоновый режим?Пожалуйста, сообщите.

Ответы [ 2 ]

4 голосов
/ 20 декабря 2011

На всякий случай, если кто-то еще ищет здесь ответ, я начал работать, добавив массив UIBackgroundModes в список, добавив 'audio' в качестве элемента 0.

Я освобождаю всю память / контроллеры при выходе, как и при выходе из приложения, так что все, что осталось, это буферы, которые использует приложение (я выделил около 1 Мб, хотя я немного нервничаю, хотя кажется, что сработало!) Полагаю, снижение точности также поможет, но, похоже, работает как есть.

В моей основной настройке аудио мне пришлось либо изменить размер буфера с 1024 на 4096, либо явно установить размер буфера ... Я выбрал последний, поскольку задержка была проблемой.

NSTimeInterval iobuffersize = (float)1024.0f/SAMPLE_RATE);
sizeofdata = sizeof(iobuffersize);
AudioSessionSetProperty(kAudioSessionProperty_PreferredHardwareIOBufferDuration, &sizeofdata, &iobuffersize);

Я также должен был убедиться, что оно не убивало приложение при выходе, не включив опцию «Не запускается в фоновом режиме», однако это все равно должно быть отключено по умолчанию.

Так что, полагаю, я отвечаю на это для спокойствия за всех, что он работает без особых настроек.

Однако у меня возникают проблемы с настройкой Bluetooth, я думаю, это потому, что размеры буфера снова меняются, но я не могу это выяснить ... просто получить -50 = предупреждение о недействительном свойстве при рендеринге данных с помощью recordCallback. Я предполагаю, что это размер частоты / выборки, но кто знает ... будет выглядеть позже, но кажется, что фон теперь работает.

1 голос
/ 26 июня 2012

Помимо указания фоновой записи в файле plist, мы можем реализовать applicationDidEnterBackground, которое сообщит нам, когда приложение войдет в фоновый режим. Здесь мы должны остановить любые обновления пользовательского интерфейса, потому что он потребляет память, например, для обновления таймера и эквалайзера.

Вызов applicationWillEnterForeground будет вызываться непосредственно перед тем, как приложение вернется на передний план, чтобы мы могли возобновить все, что остановили.

Запись происходит в фоновом режиме. Это также поможет реализовать прослушиватель прерываний (это также будет работать в фоновом режиме), чтобы вы не потеряли свои записи.

...