2009-06-22 64 views
4

我已经建立,播放大量声音的简单方法的应用:覆盖振铃音量应用程式

AudioServicesPlaySystemSound(someSoundID); 

当我使用设备的音量键增加或降低音量,我真正改变音量手机的铃声音量。所以,如果你减少它并退出应用程序,那么你的手机将安静地响起......

是否有一种简单的方法来覆盖这一点,并实际上改变我的应用程序的音量?

回答

5

我发现了我认为会成为常见问题的解决方案。因此,您的应用程序可以拥有自己的音量,并且不会混淆用户的铃声音量,即使您只是将声音播放为系统声音。

您必须导入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

我发布这篇文章后很长一段时间回来,想说我发现它只适用于降低音量和不增加它......无论如何,我一直在使用AVAudioplayers来播放我的声音很少(如果有的话)通过警报播放它们。 – Dimitris 2009-10-22 16:56:42

2

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

祝你好运!

+2

我正在播放声音文件,我只是将它们作为系统声音播放。苹果公司建议用这种方式播放短音(少于30秒)。 如果不能这样做,我可能必须以你提出的另一种方式来完成。谢谢:) – Dimitris 2009-06-25 09:52:28