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

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

AudioServicesPlaySystemSound(someSoundID);

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

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

【问题讨论】:

    标签: iphone objective-c audio core-audio


    【解决方案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 秒)。如果不能以这种方式完成,我可能不得不以您提议的另一种方式进行。谢谢:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多