我需要您的帮助。应该如何在我的应用程序中更改声音音量?我不想使用音量滑块。相反,我有一个UIImageView作为音量旋钮,在这里我顺时针旋转来增加,逆时针旋转来减小声音音量。旋转只是一种动画效果,我已经完成了这部分。
我需要您的帮助和建议,关于如何增加/减小音量。谢谢
我需要您的帮助。应该如何在我的应用程序中更改声音音量?我不想使用音量滑块。相反,我有一个UIImageView作为音量旋钮,在这里我顺时针旋转来增加,逆时针旋转来减小声音音量。旋转只是一种动画效果,我已经完成了这部分。
我需要您的帮助和建议,关于如何增加/减小音量。谢谢
我认为这是苹果代码中的一个bug,我已经通过Bug报告和面谈向他们报告了此问题,但由于他们坚称这是一个功能,那么你可能会从中受益。
使用以下代码更改应用程序的音量:
[[MPMusicPlayerController applicationMusicPlayer] setVolume:newVolume];
在执行此操作之前,您必须建立音频会话,可以通过播放声音或将其设置为活动状态来完成:
[[AVAudioSession sharedInstance] setActive:YES error:NULL];
请注意,您需要MediaPlayer.framework和AVFoundation.framework,并且音量应该介于0.0和1.0之间。
MPVolumeView
上调用setValue
,因为它可能只会更新滑块的外观,而不是实际设备音量级别。相反,您需要调用_commitVolumeChange
,但这是私有API,很可能会导致您的应用被拒绝。MPVolumeView
,但您不能以编程方式更改其值。然后,您只能通过触摸移动滑块或使用设备侧面的音量按钮来更改音量。最好的方法是创建一个全局对象,存储任何对象在播放其声音之前都可以读取的音量级别。AVAudioPlayer
对象,则创建该对象并使用[theAudioPlayerObject setVolume:someFloat];
,其中someFloat
是0.0到1.0之间的值。SystemSound
对象,则无法控制音量。AudioQueue
,则可以通过AudioQueueSetParameter
进行更改。对于这个特定的例子, 您将设置音量如下:
在AudioStreamer.h文件中添加
- (void)setVolume:(float)Level;
添加到 AudioStreamer.m 文件中
- (void)setVolume:(float)Level
{
OSStatus errorMsg = AudioQueueSetParameter(audioQueue, kAudioQueueParam_Volume, Level);
if (errorMsg) {
NSLog(@"AudioQueueSetParameter returned %d when setting the volume.", errorMsg);
}
}
将以下代码添加到视图控制器中,用于音量旋钮的位置(这部分代码应该放在.m文件中..我只是快速添加了一些UIButtons,您需要自己完成),并设置一个IBAction以更改给定值的音量(您可以传递0.0到1.0作为浮点数)
- (IBAction)volumeUp:(id)sender
{
[streamer setVolume:1.0];
}
- (IBAction)volumeDown:(id)sender
{
[streamer setVolume:0.0];
}
AudioUnit
呢? - JohnK好的,取最小旋转值(R1)和最大旋转值(R2)。然后执行 rotation / (R2 - R1)
得到像滑块一样的百分比。
编辑:
要提交音量更改,请添加以下内容:
MPVolumeView *systemVolumeSlider = [[MPVolumeView alloc] initWithFrame: self.view.bounds];
[systemVolumeSlider setHidden:YES];
[systemVolumeSlider setUserInteractionEnabled:NO];
[self.view addSubview:systemVolumeSlider];
确保在dealloc
中释放systemVolumeSlider
。
然后,当音量发生变化时,使用setValue
来设置其值。您还需要处理用户按设备上的音量+/-按钮时会发生什么。