Фоновое аудио останавливается, несмотря на возможность фонового звука и категорию сеанса - PullRequest
0 голосов
/ 22 октября 2018

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

Я включил функцию фонового звука в XCode (и подтвердил, что соответствующий элемент был добавлен в Info.plist).

Я установил категорию сеанса на .playback, что,согласно комментариям в AKSettings.swift :

Звук не отключается с помощью бесшумного переключателя и блокировки экрана - звук не смешивается

Так что мойпонимание состоит в том, что если я установлю эту категорию и включу фоновый звук в моем Info.plist, то звук должен быть слышен даже на экране блокировки, но вместо этого звук будет отключен (пока я не разблокирую телефон и не вернусь в приложение).

Я подготовил очень минимальный пример, который не требует никаких файлов, кроме делегата приложения (и, конечно, AudioKit):

import UIKit
import AudioKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
    var window: UIWindow?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        self.window = UIWindow(frame: UIScreen.main.bounds)
        self.window?.rootViewController = UIViewController()
        self.window?.makeKeyAndVisible()

        // The important bits:  
        try? AKSettings.setSession(category: .playback)
        AudioKit.output = AKWhiteNoise()
        try? AudioKit.start()
        return true
    }
}

Как видите, все, что я делаюустанавливает категорию сеанса и играет некоторый белый шум.Когда я запускаю приложение, я хорошо слышу белый шум, он только замолкает, когда телефон заблокирован или приложение находится в фоновом режиме.

Еще одна вещь, которую стоит отметить: Когда я заменяю:

try? AKSettings.setSession(category: .playback)

с:

try? AKSettings.setSession(category: .playAndRecord)
let s = AKStereoInput()

Затем звук воспроизводит на фоне / заблокированном экране, но в верхней части появляется мигающая красная системная панель записи.Так что, предположительно, приложение хранится в фоновом режиме, потому что AKStereoInput назначает входной узел при инициализации.

Другие вещи, на которые стоит обратить внимание:

  • Я тестирую на устройстве (iPhone 6), без подключенных наушников или другого оборудования.
  • Во время этого теста другие приложения не запускаются.

Я что-то упускаю из виду?Может быть, настройка или что-то?Или я должен подать проблему на github AudioKit?

1 Ответ

0 голосов
/ 25 октября 2018

Хорошо, я нашел решение, так что я опубликую здесь на случай, если кто-то тоже столкнется с этим.

Ответ был в этой проблеме github .

По сути, если вы хотите использовать .playback в качестве категории, которую нужно включить:

AKSettings.playbackWhileMuted = true

По умолчанию false.Глядя на AKSettings.swift: 267 , похоже, playbackWhileMuted используется при получении вычисляемой категории сеанса.Так что имейте в виду, что значение, установленное с помощью AKSettings.setSession, может не совпадать с «вычисленным» значением, если вы не забудете установить соответствующие флаги.

Обновить

Я также только что попытался удалить эту строку:

try? AKSettings.setSession(category: .playback)

И она прекрасно работает без нее.Так что, похоже, достаточно просто установить playbackWhileMuted.Я думаю, что мог неправильно понять, когда использовать setSession.

...