web-dev-qa-db-fra.com

Source de données sélectionnée inconnue pour Port Haut-parleur (type: Haut-parleur)?

je reçois ce message plusieurs fois dans le journal du chat:

[avas] AVAudioSessionPortImpl.mm:56:ValidateRequiredFields: Unknown selected data source for Port Speaker (type: Speaker)

j'utilise ce code pour lire de la musique de fond:

  let path = Bundle.main.path(forResource: fileName, ofType:"mp3")!
        let url = URL(fileURLWithPath: path)

        do {
                let sound = try AVAudioPlayer(contentsOf: url)
                self.player = sound
                sound.prepareToPlay()
                sound.volume = 0.05
                sound.numberOfLoops = loops
                sound.play()
        } catch {
            print("[PLAY SOUND][DELEGATE] error loading file -> \(fileName)")
        }

j'ai fait une recherche et j'ai trouvé des problèmes similaires donc j'ai ajouté la catégorie audio dans viewdidload:

  do {
            try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, mode: AVAudioSessionModeDefault)
            try AVAudioSession.sharedInstance().setActive(true)
        } catch {
            print(error)
        }

après avoir ajouté le code ci-dessus, la musique de fond est en cours de lecture même si le téléphone est en mode silencieux! et le message du débogueur pour Unknown selected data source for Port Speaker (type: Speaker) est toujours affiché

22
Jack

Le message Unknown selected data source for Port Speaker semble être un problème avec iOS 12. Apparemment, certains avertissements apparaissent même si le code fonctionne. Peut-être que Apple résoudra cela bientôt, alors peut-être que vous pouvez ignorer cet avertissement et qu’une fois la solution trouvée, vous pourrez le faire taire.

Source: erreurs AVAudioSession sous iOS 12

Quant à la musique de fond jouée en mode silencieux, c'est à cause du AVAudioSessionCategory que vous avez sélectionné. Selon AVAudioSessionCategoryPlayback documentation ( source ):

Lorsque vous utilisez cette catégorie, l'audio de votre application continue avec le commutateur Silence réglé sur silencieux ou lorsque l'écran est verrouillé.

Selon le style de votre application, vous pourriez peut-être utiliser AVAudioSessionCategorySoloAmbient ( source ):

Votre audio est désactivé par le verrouillage de l'écran et par le commutateur Silent (appelé commutateur Sonnerie/Silence sur l'iPhone).

Ou peut-être que AVAudioSessionCategoryAmbient ( source ):

Cette catégorie est également appropriée pour les applications de style "jouer le long", telles que le piano virtuel joué par un utilisateur pendant la lecture de l'application Musique. Lorsque vous utilisez cette catégorie, l'audio d'autres applications se mélange à votre audio. Votre audio est désactivé par le verrouillage de l'écran et par le commutateur Silent (appelé commutateur Sonnerie/Silence sur l'iPhone).

20
Victor Sanchez

De Swift 4.2, je l’avais initialement configuré comme ceci:

try AVAudioSession.sharedInstance().setCategory(.playAndRecord, mode: .default, options: [])

Je n'avais pas réellement besoin de capacités d'enregistrement, alors je l'ai changé pour

try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default, options: [])

Cela supprimait l'erreur (et était la seule chose que je pouvais faire pour éliminer l'erreur). Cependant, si vous avez également besoin de capacités d'enregistrement, cela ne fonctionnera évidemment pas.

3
Adam S.