Я хочу создавать звуковые эффекты, не останавливая воспроизведение музыки в фоновом режиме в другом приложении

#ios #iphone #swiftui #uikit

#iOS #iPhone #свифтуи #uikit

Вопрос:

В настоящее время я разрабатываю приложение с помощью SwiftUI. Существует функция, которая воспроизводит звуковой эффект, когда вы нажимаете на нее. Когда я протестировал его на самом устройстве, воспроизведение музыки Spotify в фоновом режиме прекратилось. Можно ли использовать AVFoundation для воспроизведения звуковых эффектов без остановки музыки? Кроме того, если есть лучший способ реализовать это, пожалуйста, помогите мне.

 import Foundation
import AVFoundation

var audioPlayer: AVAudioPlayer?

func playSound(sound: String, type: String) {

    if let path = Bundle.main.path(forResource: sound, ofType: type) {
        do {
            audioPlayer = try AVAudioPlayer(contentsOf: URL(fileURLWithPath: path))
            audioPlayer?.play()

           
        } catch {
            print("ERROR:Could not find and play the sound file.")
        }
       
    }
}
 

Ответ №1:

Установите для параметров категории .mixWithOthers AVAudioSession значение .

 let audioSession = AVAudioSession.sharedInstance()
do {
    try audioSession.setCategory(.ambient, mode: .default, options: [.mixWithOthers])
} catch {
    print("Failed to set audio session category.")
}

audioSession.setActive(true) // When you're ready to play something
 

ambient указывает, что звук не является критичным для данного приложения. Значение по умолчанию равно soloAmbient , которое не может быть смешано. (Возможно, вы можете просто установить категорию ambient здесь, и вы получите mixWithOthers бесплатно. Я не часто использую этот режим, поэтому я не помню, сколько вы получаете по умолчанию.) Если звук имеет решающее значение, см. Режим .playback .

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

Более подробную информацию см. в разделе AVAudioSession .Категория и AVAudioSession. При воспроизведении звука есть много опций, и многие из них неочевидны (а у некоторых очень запутанные названия, я смотрю на вас .allowBluetooth ), поэтому стоит ознакомиться с документами.

Комментарии:

1. Спасибо!! Мы сделали это! Я был новичком, так что это было очень полезно.