7
votes

Comment utiliser kaudiosessionProperty_overridecategoryMixwithothers

Je voudrais faire l'application d'instrument virtuel capable d'être utilisée (via un clavier MIDI) lorsque l'application est en arrière-plan. Cela fonctionne bien en définissant UibackgroundModes en "audio" et en définissant la catégorie de l'audiosessions vers AvudiosandCategoryplayBack. En outre, pour permettre de mélanger avec l'application de lecteur de musique, je définissais la propriété KaudiosessionProperty_overridecategoryMixwithers.

Pour économiser de l'énergie de la batterie, il est recommandé de laisser l'utilisateur éteindre l'opération d'arrière-plan s'il n'est pas nécessaire. Donc, il y a un commutateur dans mon application pour basculer entre la catégorie AvudiosessionCategoryambient et la catégorie AvudiosandCategoryplayBack (avec KaudiosessionProperty_overridecateGoryMixWithothers). Le code est comme celui-ci (gestion des erreurs omises): xxx

Maintenant le problème: Supposons que l'application de musique joue en arrière-plan. L'utilisateur joue l'instrument virtuel au premier plan (via un clavier MIDI) pour accompagner le lecteur de musique et décide de démarrer une autre application, dite un diaporama pour profiter de la raison pour laquelle jouer à l'instrument. Donc, il / elle va à la vue Paramètres de mon application et active l'opération d'arrière-plan. Ensuite, le code ci-dessus est exécuté. Boom, l'application de musique se tait. Si je comprends bien, la propriété kaudiosessionproperty_overridecategorymixwithothers ne peut être définie que après le réglage de la catégorie, mais lorsque je fixe la catégorie sur AvaudiossessionCategoryplayBack, le lecteur de musique est réduit au silence par le système avant que je n'ai aucune chance de définir KaudiosessionProperty_overridecategoryMixwithers.

Est-ce arrivé? Peut-il y avoir quelque chose? J'ai essayé de désactiver / activer la session avant / après avoir changé la catégorie, mais qui conduisent à d'autres problèmes.

Markus


0 commentaires

3 Réponses :


16
votes

Vous pouvez y parvenir. Le principe consiste à désactiver votre session audio d'abord, configurez toutes les propriétés de votre session audio, puis une session audio active. De cette manière, la musique de la musique dans une autre application ne sera pas réduite au silence. XXX

Cette solution fonctionne pour moi. Mais à partir de votre description, vous avez mentionné que vous avez essayé d'activer / désactiver la session avant / après avoir changé la catégorie, mais conduisez à d'autres problèmes. Avez-vous fait la désactivation / activer exactement de la même manière que ci-dessus? Si tel est le cas, fournissez plus d'informations sur les autres problèmes et peut-être que je puisse aider.


3 commentaires

Pourquoi ne passez-vous pas à Setactive? Selon la DOCS: "Paramètres Beletive Utilisez Oui pour activer la session audio de votre application ou non pour la désactiver." développeur.apple.com/library/ios / # Documentation / AVFoundation / ... ou je manque quelque chose?


Je ne passe pas à Setactive d'abord pour désactiver la session audio, puis modifier la propriété et enfin passer oui à se passer pour activer à nouveau la session audio.


Merci pour votre aide et désolé que ma réponse soit «un peu» tardive. J'ai rencontré le même problème dans une autre application (avec une catégorie audio différente, AvaudiossessionCategoryplayRecord). Il s'est avéré que la cause n'était pas la manière dont j'ai configuré et activé la session, mais le fait que j'avais initialisé le graphe audio avant de définir les propriétés de la session. Lorsque j'ai défini pour la première fois les propriétés de la session (mélangez avec d'autres), créez le graphe audio et à quelques heures postérieurs à la session active, le son d'autres applications n'est pas en sourdine.



18
votes

Depuis iOS 6.0, vous pouvez utiliser

try? AVAudioSession.sharedInstance().setCategory(.playback, options: .mixWithOthers)


1 commentaires

Et de retourner au non-mélange: [[Avaudiosession SharedInstance] SetCategory: AvudiosandCategoryplayBack avecOptions: 0 erreur: nil];



-6
votes

Je dois être en désaccord avec m0rph3v5.

La seule valeur valide du paramètre withOptions est AvudiosSessionInterruptionPtionShouldResume