UISlider跟随音量,无法正常工作

时间:2012-07-10 07:54:48

标签: core-audio avaudioplayer audio

我的iPhone应用程序中有声音问题。 我有一个UISlider对象,用于调整音量。

当我看到我使用基于以下行的代码时,设置滑块的初始值:

AudioSessionGetProperty ('chov',&dataSize,&volume);

并且工作正常。然后,当我激活设备的硬件音量按钮时,我希望滑块相应移动。 但这部分基于这种代码:

AudioSessionPropertyID volumeChangeID=kAudioSessionProperty_CurrentHardwareOutputVolume;
AudioSessionAddPropertyListener(volumeChangeID,handleSoundVolume,self);

效果不好。 我能看到的是回调函数:handleSoundVolume仅在播放某些声音时调用,否则仅调用。 另一方面,AudioSessionGetProperty提供的值总是正确的,与声音播放无关。 那是为什么?

我认为AudioSessionGetProperty和AudioSessionAddPropertyListener正在“合作”,但似乎并非如此。

查看iPod touch上的默认音乐应用程序,似乎我想做的事情很有可能。

感谢您提供任何信息。

1 个答案:

答案 0 :(得分:1)

我看到同样的问题,回调对我来说根本不起作用。

最佳解决方案是向NSNotificationCenter添加一个观察者,用于属性AVSystemController_SystemVolumeDidChangeNotification。

NSNotificationCenter * center = [NSNotificationCenter defaultCenter];
[center addObserver:self
           selector:@selector(volumeChanged:)
               name:@"AVSystemController_SystemVolumeDidChangeNotification"
             object:nil];

你有方法

- (void)volumeChanged:(NSNotification*)notification
{
     float volume = [[[notification userInfo]
                        objectForKey:@"AVSystemController_AudioVolumeNotificationParameter"]
                      floatValue];
}

顺便提一句,我推荐使用常量

,而不是使用'chov'
kAudioSessionProperty_CurrentHardwareOutputVolume