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

Posted

技术标签:

【中文标题】覆盖 iPhone 应用程序中的铃声音量【英文标题】:Override ringer volume in iPhone apps 【发布时间】:2009-06-22 16:22:17 【问题描述】:

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

AudioservicesPlaySystemSound(someSoundID);

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

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

【问题讨论】:

【参考方案1】:

我找到了解决我认为是常见问题的方法。因此,即使您只是将声音作为系统声音播放,您的应用也可以拥有自己的音量,而不会干扰用户的铃声音量。

您必须导入 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 中释放它。

【讨论】:

发了很久才回来,想说我发现它只对降低音量起作用,而不是提高音量...无论如何,从那以后我一直在使用AVAudioplayers播放我的声音,并且很少(如果有的话)通过警报播放它们。 这是一个老话题 - 但我想知道新的 sdk 是否有一些变化:我希望我的应用程序从文件中播放音调,而不管铃声音量如何 - 甚至不允许用户玩音量或更改音量。我想在不受用户干扰的情况下尽可能大声(降低铃声的音量,甚至将其置于静音模式 - 我仍然想尽可能大声地播放音调) - 我该怎么办?我的代码正在使用 AvAudioPlayer,但它不适合我...... 试试 AudioServicesPlaySystemSound(someSoundID);警报声正在使用我相信的电话铃声。【参考方案2】:

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

祝你好运!

【讨论】:

我正在播放声音文件,我只是将它们作为系统声音播放。苹果建议以这种方式播放短声音(少于 30 秒)。如果不能以这种方式完成,我可能不得不以您提议的另一种方式进行。谢谢:)

以上是关于覆盖 iPhone 应用程序中的铃声音量的主要内容,如果未能解决你的问题,请参考以下文章

无法在我的 iphone 应用程序中调整音量

如何以编程方式增加iPhone音量

AudioServicesPlaySystemiPad 上的音量

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

iOS使用虚拟AVAudioPlayer从铃声切换到系统音量

如何覆盖短信铃声