hmm problemi şimdi daha iyi anladım. evet yapmak istediğiniz şu sanırım yanlış anladıysam düzeltin;
uygulama içerisinde bazı seslerin, cihaz sessize alındığında oynatılmasını istemiyorsunuz fakat aynı zamanda yine uygulama içerisinde çalınan bir müzik dosyasının uygulama arka plana gittiğinde dahi çalınabilir olmasını istiyorsunuz.
evet, bu başlıbaşına bir sorun. :)
çünkü AVAudioSession için category set ederken sizinde fark ettiğiniz üzere müziğin arkaplanda çalınabilmesi için AVAudioSessionCategoryPlayback opsiyonunu seçmek zorundayız.
ama bu durumda diğer ses dosyaları cihaz sessize alınsa dahi hala çalınabilir olacaklar.
bu durumda category opsiyonunu AVAudioSessionCategoryAmbient yapmak lazım fakat bu defa da uygulama background'a gittiğinde arkaplanda çalınmasını istediğiniz dosya çalınmayacak.
iş bir kısır döngüye giriyor. :)
çünkü sizinde farketmiş olabileceğiniz gibi AVAudioSession category'si bir sharedInstance. yani tüm audio işlemleri için sadece bir seçim yapılabilir.
bu durumda category seçimini AVAudioSessionCategoryPlayback olarak bırakıp,
uygulama içerisindeki bazı seslerin çalınmaması opsiyonunu cihazın sessize alma switch'i yerine kullanıcıya uygulama arayüzünde özel bir sessize alma butonu seçeneğiyle sunmak tek akılcı çözüm.
kullanıcı bu butona tıkladığında çalınmasını istemediğiniz seslere ait aksiyonları pasifize etmek ve halihazırda çalınmakta olan sesleri de stop() ile durduracak bir çözüm tek akıl karı yol gibi duruyor.
tabi kullanıcı sessize alma opsiyonunu kapattığında, opsiyonu açarken çalınmakta olan sesler varsa bunların kendiliğinden yeniden başlatılması gibi bir nüansı da kuracağınız yapıda atlamamalısınız.
Aksi takdirde sessize alma butonu aslında bir tür tüm sesleri durdurma butonu gibi bir işlev kazanacaktır ki , bu da kullanıcı deneyimi açısından olumsuz bir durum oluşmasına neden olabilir.