iPhone iOS7系统声音(铃声和警报)音量控制

时间:2013-10-13 17:04:40

标签: iphone ios7 volume audio

这个问题似乎被多次询问和回答,但没有具体或准确的答案。因此,我将重新设计iOS7的问题并希望得到一些帮助。

我需要使用AudioServicesPlaySystemSound播放声音,因为时间非常重要,这是通过可变时序准确播放同步声音效果的方法(尝试其他所有选项)。

这很好但我想调整音量。它似乎能够做到这一点的唯一方法是使用按钮,虽然有人说使用MPVolumeView(仅适用于音乐),有人说使用MPMusicPlayerController(但这也适用于音乐,现在已经折旧),其他人只是说它无法做到 - 这看起来更有可能。

然而,对于iOS7,设置中的滑动控件>响铃警报音量的声音。有没有什么方法可以子类化,复制或访问此幻灯片控件来从应用程序中更改此卷?

2 个答案:

答案 0 :(得分:1)

Apple建议使用MPVolumeView,所以我想出了这个:

添加volumeSlider属性:

@property (nonatomic, strong) UISlider *volumeSlider;

初始化MPVolumeView并在视图中添加(可隐藏,无框架或由于showsRouteButton = NOshowsVolumeSlider = NO而为空):

MPVolumeView *volumeView = [MPVolumeView new];
volumeView.showsRouteButton = NO;
volumeView.showsVolumeSlider = NO;
[self.view addSubview:volumeView];

查找并保存对UISlider的引用:

__weak __typeof(self)weakSelf = self;
[[volumeView subviews] enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    if ([obj isKindOfClass:[UISlider class]]) {
        __strong __typeof(weakSelf)strongSelf = weakSelf;
        strongSelf.volumeSlider = obj;
        *stop = YES;
    }
}];

UIControlEventValueChanged添加目标操作:

[self.volumeSlider addTarget:self action:@selector(handleVolumeChanged:) forControlEvents:UIControlEventValueChanged];

然后在更改卷时(即通过硬件音量控件)更新自定义控件:

- (void)handleVolumeChanged:(id)sender
{
    NSLog(@"%s - %f", __PRETTY_FUNCTION__, self.volumeSlider.value);
    self.myCustomVolumeSliderView.value = self.volumeSlider.value;
}

以及其他方式:

- (IBAction)myCustomVolumeSliderViewValueChanged:(id)sender {
    NSLog(@"set volume to: %f", self.myCustomVolumeSliderView.value);
    self.volumeSlider.value = self.myCustomVolumeSliderView.value;
}

注意:请确保将self.volumeSlider.value设置为不会重新设置为self.myCustomVolumeSliderView.value

希望这可以帮助某人(并且Apple不会从MPVolumeView中移除MPVolumeSlider)。

答案 1 :(得分:0)

我认为您希望通过程序控制音量

 - (void)setVolume:(float)Level
  {

      OSStatus errorMsg = AudioQueueSetParameter(audioQueue, kAudioQueueParam_Volume, Level);

    if (errorMsg) {
        NSLog(@"AudioQueueSetParameter returned %d when setting the volume.", errorMsg);
    }

 }
  • 使用此代码设置您希望控制按钮的代码的音量级别。