Отключение звука см. Здесь. http://www.restoroot.com/Blog/2008/12/25/audiosessioninitialize-workarounds/
По сути, вам просто нужно это.
// "Ambient" makes it respect the mute switch
// Must call this once to init session
if (!gAudioSessionInited)
{
AudioSessionInterruptionListener inInterruptionListener = NULL;
OSStatus error;
if ((error = AudioSessionInitialize (NULL, NULL, inInterruptionListener, NULL)))
{
NSLog(@"*** Error *** GBMusicTrack - initWithPath: error in AudioSessionInitialize: %d.", error);
}
else
{
gAudioSessionInited = YES;
}
}
SInt32 ambient = kAudioSessionCategory_AmbientSound;
if (AudioSessionSetProperty (kAudioSessionProperty_AudioCategory, sizeof (ambient), &ambient))
{
NSLog(@"*** Error *** GBMusicTrack - initWithPath: could not set Session property to ambient.");
}
Что касается чтения системных настроек, вы не можете, по крайней мере, не через публичные API!