我需要你的帮助。我应该如何继续更改我的应用程序中的音量。我不想使用音量滑块。相反,我有一个 UIImageView,它是一个音量旋钮,我在其中顺时针旋转以增加音量,逆时针旋转以降低音量。旋转只是一个动画,我已经完成了那部分。
关于如何增加/减少音量,我需要您的帮助和建议。谢谢
我需要你的帮助。我应该如何继续更改我的应用程序中的音量。我不想使用音量滑块。相反,我有一个 UIImageView,它是一个音量旋钮,我在其中顺时针旋转以增加音量,逆时针旋转以降低音量。旋转只是一个动画,我已经完成了那部分。
关于如何增加/减少音量,我需要您的帮助和建议。谢谢
我将此视为 Apple 代码中的错误,并已通过错误报告和亲自向他们报告,但由于他们坚持认为这是一项功能,您不妨从中受益。
使用以下代码更改应用程序的音量:
[[MPMusicPlayerController applicationMusicPlayer] setVolume:newVolume];
这仅在您建立音频会话后才有效,无论是通过播放声音还是将其设置为活动状态:
[[AVAudioSession sharedInstance] setActive:YES error:NULL];
请注意,您需要 MediaPlayer.framework 和 AVFoundation.framework,并且音量介于 0.0 和 1.0 之间。
我会小心调用setValue
an ,MPVolumeView
因为它可能只会更新滑块的外观,但不会更新实际的设备音量级别。相反,您必须调用_commitVolumeChange
哪个是私有 API,并且可能会导致您的应用被拒绝。
如何控制音量的简短回答:这实际上取决于您要控制的音量。
如果您想要“控制应用程序中的每个声音”类型的控件,那么您可以使用 anMPVolumeView
但您不能以编程方式更改它的值。然后,您只能通过触摸移动滑块或使用设备侧面的音量按钮来更改音量。最好的办法是创建一个全局对象来存储任何对象在播放声音之前可以读取的音量级别。
如果它是一个AVAudioPlayer
对象,您将创建该对象并使用0.0 到 1.0 之间的值[theAudioPlayerObject setVolume: someFloat];
。someFloat
如果是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];
}
好吧,取最小旋转(R1)和最大旋转(R2)。然后rotation / (R2 - R1)
像滑块一样获得 % 。
编辑:
要提交卷更改,请添加以下内容:
MPVolumeView *systemVolumeSlider = [[MPVolumeView alloc] initWithFrame: self.view.bounds];
[systemVolumeSlider setHidden:YES];
[systemVolumeSlider setUserInteractionEnabled:NO];
[self.view addSubview:systemVolumeSlider];
(确保在 中systemVolumeSlider
发布dealloc
)
然后,当音量改变时,使用setValue
来设置它的值。您还需要处理用户按下设备上的音量 +/- 按钮时发生的情况。