[英]Changing the volume without a volume slider on an iphone
我需要你的帮助。 我该如何继续更改应用中的音量。 我不想使用音量滑块。 相反,我有一个UIImageView,它是一个音量旋钮,我顺时针旋转增加,逆时针旋转减小音量。 旋转只是一个动画,我已经完成了那部分。
我需要你的帮助和建议,如何增加/减少音量。 谢谢
我认为这是Apple代码中的一个错误,并且已经通过Bug Reports和他们亲自向他们报告过,但是由于他们坚持使用它,所以你也可以从中受益。
使用以下代码更改应用程序的卷:
[[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文件中..我只是做了几个UIButton快速,你必须自己做)并设置一个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];
(确保在dealloc
发布systemVolumeSlider
)
然后,当更改卷时,使用setValue
设置其值。 您还需要处理当用户按下设备上的音量+/-按钮时发生的情况。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.