2010-08-11 90 views
12

我需要您的帮助。我应该如何着手改变我的应用程序的音量。我不想使用音量滑块。相反,我有一个UIImageView,它是一个音量旋钮,其中我顺时针旋转增加,反时针旋转以减小音量。轮换只是一个动画,我已经完成了这部分。更改iPhone上没有音量滑块的音量

我需要您的帮助和建议如何增加/减少音量。谢谢

回答

12

我会小心上MPVolumeView调用setValue,因为它可能不会做其他比更新滑块的外观任何东西,但不是实际的设备音量。你将不得不打电话_commitVolumeChange这是私人API,并可能会被拒绝你的应用程序。

如何控制音量的简短答案:这取决于您试图控制的音量。

如果你想要一种控制的“控制每一个应用程序中的声音”,那么你可以使用一个MPVolumeView但你不能改变它的值编程。您只能通过触摸移动滑块或使用设备侧面的音量按钮来更改音量。最好的办法是创建一个全局对象,用于存储任何对象在播放声音之前可以读取的音量级别。

如果它是一个AVAudioPlayer对象,您可以创建该对象并使用[theAudioPlayerObject setVolume: someFloat];,其中someFloat是一个介于0.0和1.0之间的值。

如果是SystemSound对象,则无法控制音量。

如果它是一个AudioQueue你通过AudioQueueSetParameter

就像我说的改变它..这一切都取决于如何正在播放的声音。基于评论

For that particular example

更新,你会这样设置音量:

添加到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]; 

} 
+0

我想控制我的应用程序的音量。我正在试着制作一个应用程序,使用关于如何流式传输mp3源的亚光加勒比课程http://cocoawithlove.com/2008/09/streaming-and-playing-live-mp3-stream.html – awlcs 2010-08-11 16:31:11

+1

请参阅我的更新回答 – iwasrobbed 2010-08-11 17:19:45

+0

非常感谢你抢劫,我会尝试:D我对iphone编程颇为陌生:D感谢:D – awlcs 2010-08-11 22:33:13

4

那么,取最小旋转(R1)和最大旋转(R2)。然后做rotation/(R2 - R1)以获得像滑块一样的%。

编辑:
要提交的体积变化,添加以下内容:

MPVolumeView *systemVolumeSlider = [[MPVolumeView alloc] initWithFrame: self.view.bounds]; 
[systemVolumeSlider setHidden:YES]; 
[systemVolumeSlider setUserInteractionEnabled:NO]; 
[self.view addSubview:systemVolumeSlider]; 

(确保释放systemVolumeSliderdealloc

然后,当体积变化,用setValue设置它的价值。您还需要处理当用户按下设备上的音量+/-按钮时发生的情况。

+1

你可能也想告诉他们如何改变音量的一个完整的答案:) – iwasrobbed 2010-08-11 13:58:07

+0

感谢jrtc&iWasRobbed:d jrtc:笑我的问题是,具有%,此前,接下来会发生什么,我卡在这里的xD – awlcs 2010-08-11 14:22:02

+0

是的当然 - 我浏览了你的问题,并认为我已经回答了它,但并不完全!答案已经更新;) – jrtc27 2010-08-11 14:25:39

16

我认为这是苹果的代码中的错误,并已与它问题报告和亲自上报他们两个,但由于他们坚持它的一个功能,您不妨从中受益。

使用下面的代码更改应用程序的音量:

[[MPMusicPlayerController applicationMusicPlayer] setVolume:newVolume]; 

你建立你的音频会话后,这只会工作,无论是通过播放声音或通过设置将其激活这样:

[[AVAudioSession sharedInstance] setActive:YES error:NULL]; 

请注意,因为您需要MediaPlayer.framework和AVFoundation.framework并且音量介于0.0和1.0之间。

+0

简单明了~~ :)非常感谢。即使我不使用MPMusicPlayerController(例如使用MPMoviePlayerController),我也可以使用它。由于AVAudioSession。 :) – alones 2010-09-22 17:10:07

+0

'setVolume:'在iOS 7.0中已弃用 – ahonnecke 2014-03-17 03:03:13