在iphone上没有音量滑块的情况下更改音量

时间:2010-08-11 13:47:55

标签: iphone ipad avfoundation

我需要你的帮助。我该如何继续更改应用中的音量。我不想使用音量滑块。相反,我有一个UIImageView,它是一个音量旋钮,我顺时针旋转增加,逆时针旋转减小音量。旋转只是一个动画,我已经完成了那部分。

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

3 个答案:

答案 0 :(得分:16)

我认为这是Apple代码中的一个错误,并且已经使用Bug Reports和他们亲自向他们报告过,但是由于他们坚持使用它的功能,所以你也可以从中受益。

使用以下代码更改应用程序的卷:

[[MPMusicPlayerController applicationMusicPlayer] setVolume:newVolume];

只有在您通过播放声音或将其设置为活动状态建立音频会话后,此功能才会生效:

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

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

答案 1 :(得分:12)

我会小心地在setValue上调用MPVolumeView,因为除了更新滑块的外观以外,它可能不会执行任何操作,而不是实际的设备音量水平。您将不得不拨打_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文件中..我只是做了几个UIButton快速,你必须自己做)并设置一个IBAction更改给定值的音量(您可以传递0.0到1.0作为浮点数)

- (IBAction)volumeUp:(id)sender
{

    [streamer setVolume:1.0];

}

- (IBAction)volumeDown:(id)sender
{

    [streamer setVolume:0.0];

}

答案 2 :(得分:4)

好吧,采取最小旋转(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设置其值。您还需要处理当用户按下设备上的音量+/-按钮时发生的情况。