覆盖iPhone应用程序中的铃声音量

时间:2009-06-22 16:22:17

标签: iphone objective-c audio core-audio

我已经构建了一个可以轻松播放大量声音的应用程序:

AudioServicesPlaySystemSound(someSoundID);

当我使用设备音量按钮增大或减小音量时,我实际改变的音量是手机的铃声音量。因此,如果您减少它并退出应用程序,那么您的手机将安静地响起......

是否有一种简单的方法来覆盖它并实际更改应用程序的音量?

2 个答案:

答案 0 :(得分:4)

我找到了解决方案,我认为这是一个常见的问题。所以这就是你的应用程序如何拥有自己的音量,并且不会弄乱用户的铃声音量,即使你只是将声音作为系统声音播放。

你必须导入AVFoundation框架并在一个对象中保持加载,你的应用程序运行的全部时间(或视图或应用委托)你初始化AVAudioPlayer,给它一个文件来播放并将其设置为“prepareToPlay” “它......

这是我在主视图中所做的(用于将其他视图作为子视图加载): 在头文件中:

#import <AVFoundation/AVFoundation.h>

@interface MainViewController : UIViewController {
    AVAudioPlayer *volumeOverridePlayer;
}

@property (nonatomic, retain) AVAudioPlayer *volumeOverridePlayer;

在实施文件中:

    @synthesize volumeOverridePlayer;

- (void)viewDidLoad
{
    [super viewDidLoad];

    volumeOverridePlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL URLWithString:[[NSBundle mainBundle] pathForResource:@"something" ofType:@"caf"]] error:nil];
    [volumeOverridePlayer prepareToPlay];
//...
}

让玩家准备播放您的文件并享受自己的音量控制,而无需通过它播放声音! 当然,请记得在dealloc中发布它。

答案 1 :(得分:1)

从Apple的文档中我可以看到,这里有两个问题。 1.应用程序和OS /硬件卷只能由硬件/用户控制。你正在播放系统声音。我相信系统声音是由操作系统控制的,所以你在这里运气不好,除非你正在播放实际的声音文件。如果您可以使用声音文件,请查看here

祝你好运!