Подтвердить что ты не робот

IPhone AVAudioPlayer останавливает фоновую музыку

Итак, я только что заметил, что на моем iPod Touch, когда мое приложение запускает короткий wav файл для воспроизведения с использованием AVAudioPlayer, музыка приостанавливается. Это нормально?

Я не могу найти никакой ссылки на это, и кажется, что это будет отмечено где-то. Есть ли способ сохранить музыку во время воспроизведения моих звуков?

4b9b3361

Ответ 1

Примечание: API AudioSession полностью устарел в iOS 7.0

Вы не можете одновременно запускать AVAudioPlayer и iPod player или MPMusicPlayer или MPMoviePlayer, не делая больше работы. Если вы хотите легко, используйте звуковые сигналы Sound Toolbox System.

Если вы хотите сделать дополнительную работу, вы должны посмотреть сеансы аудио:

kAudioSessionCategory_UserInterfaceSoundEffectsДля звуковых эффектов, таких как сенсорный обратной связи, взрывов и т.д.

Эквивалент kAudioSessionCategory_AmbientSoundкатегорию, которую вы должны использовать вместо. kAudioSessionCategory_UserInterfaceSoundEffectsкатегория устарела в iPhone OS 3.0.

kAudioSessionCategory_AmbientSound Для длительные звуки, такие как дождь, автомобиль шум двигателя и т.д. Это также для приложений "поиграть", такое виртуальное пианино, которое пользователь играет над iPod audio.

Когда вы используете эту категорию, аудио из встроенные приложения, такие как iPod, микшируется с вашим аудио. Ваш звук отключается, когда Ring/Silent переключатель отключен или когда блокировки экрана.

Ответ 2

В принципе, каждому приложению назначается аудиосеанс, который моделируется как одноэлементный класс, который вы можете получить при запуске приложения и задании параметров. То, как я исправил ту же проблему, был через одну строку кода, помещенную в applicationDidFinishLaunching:

Objective-C:

[[AVAudioSession sharedInstance]setCategory:AVAudioSessionCategoryAmbient error:nil];

Swift 2/3:

try! AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient)

Ответ 3

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

struct AVAudioSessionCategoryOptions : OptionSetType {
    init(rawValue rawValue: UInt)
    static var MixWithOthers: AVAudioSessionCategoryOptions { get }
    static var DuckOthers: AVAudioSessionCategoryOptions { get }
    static var AllowBluetooth: AVAudioSessionCategoryOptions { get }
    static var DefaultToSpeaker: AVAudioSessionCategoryOptions { get }
    static var InterruptSpokenAudioAndMixWithOthers: AVAudioSessionCategoryOptions { get }
}

Когда вы начинаете свой сеанс, передайте параметр MixWithOthers, возможно, DuckOthers (потеряет громкость ipod при воспроизведении звука) - это еще один вариант.

Ответ 4

Для Swift 4.2

import AVFoundation

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

    do {
        try AVAudioSession.sharedInstance().setCategory(.ambient, mode: .default, options: AVAudioSession.CategoryOptions.mixWithOthers)
    } catch let error {
        print(error.localizedDescription)
    }

    return true
}