- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我们有一款游戏即将发布,但我们遇到了一个非常烦人的问题。我们的 Beta 测试人员手机之一,他听不到任何游戏音效。然而,他可以很好地听到背景音乐和标题屏幕音乐。
背景音乐和标题音乐都通过 AVAudioPlayer 播放(它们更长,我们需要循环和音量控制等)。音效只是用 AudioServicesPlaySystemSound 播放(它们很短,我们不需要精确控制或知道它们何时结束等)。这适用于大多数 iPhone,但不适用于这一款。所有这些都在 AVAudioSessionCategorySoloAmbient 的 Audio Session 中播放。
所以我有两个问题: - 首先,这是一个可以接受的实现吗?即有没有我错过的东西说你不能混合这两个框架,或者混合它们是个坏主意的原因? - 第二,有没有人见过这样的事情?如果是这样,您找到解决方法了吗?
附加背景说明:我可以非常肯定地说,在他的手机上,这是两种框架的混合。他能够听到声音,直到我们添加标题屏幕音乐的版本大致相同。此外,如果我更改其中一种声音以通过 AVAudioPlayer 工作,他就能听到。不幸的是,我不能简单地将声音移到 AVAudioPlayers 中,因为它的性能根本不佳,我需要更好的同步。
最佳答案
编辑 2:
我已经确定了错误的原因。两种不同的音频框架在两种不同的音量设置下播放。有主音量(这是您进入应用程序后显示的内容,上面没有标题)和铃声音量(这是您在主屏幕上未加载任何应用程序时显示的内容)。 AVAudioPlayer 使用主音量设置调用播放。由于我已将类别设置为 AVAudioSessionCategorySoloAmbient(请参阅下面的代码),如果您在应用程序中使用音量摇杆,则将调整音量控制。然而,SystemSounds 以铃声音量播放。这不会出现在应用程序内部,因此不允许用户在游戏期间调整他们的设置。
很容易看出用户可能会感到困惑:假设他们将铃声设置为较低,甚至关闭。他们开始玩游戏。他们听到标题屏幕音乐(AVAudioPlayer)并且能够调高或调低音量并且它正常响应。然后他们开始游戏并播放音效 (SystemSounds),但他们什么也没听到,因为铃声音量很低/已关闭。为了听到音效,他们调高了音量,背景音乐也随之响应。所以从这个角度来看,它看起来肯定是音效没有播放。
如果您遇到类似情况,请让您的用户在玩游戏之前确保他们的铃声音量已调高并且他们的静音开关已打开(即未静音)。您还可以通过自己进行测试来验证所有这些 - 降低铃声音量并提高应用程序内的音量。您的 SystemSounds 应该退出混音。
原始答案:在重新挖掘所有文档时,我找到了答案。我没有正确激活 Audio Session 。以前我只有这段代码来设置类别:
NSError *setCategoryError = nil;
BOOL categoryWasSet = [[AVAudioSession sharedInstance]
setCategory: AVAudioSessionCategorySoloAmbient
error: &setCategoryError];
但我还需要添加以下代码来显式激活 Audio Session :
NSError *activationError = nil;
BOOL activationSuccess = [[AVAudioSession sharedInstance]
setActive: YES
error: &activationError];
我已经重新测试了这个用户,它已经完全解决了这个问题。希望对可能遇到类似问题的任何人有所帮助。
编辑: 这似乎并没有解决问题。我从我的测试人员那里得到了误报,经过更详细的检查,我发现他似乎并没有真正听到 SystemSound 生成的声音。
关于iphone - AudioServicesPlaySystemSound 和 AVAudioPlayer 可以混用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1659167/
我正在使用 AudioServicesPlaySystemSound(soundID); 播放声音,但我需要知道声音何时停止播放,那么这个委托(delegate)是什么? 谢谢! 最佳答案 你读过do
我的 AudioServicesPlaySystemSound 出现这种不稳定的行为。 出于某种原因,在我的(真实设备)iPhone 5/6 上一切正常。但有时在我的(真实设备)iPhone 6+S
我正在开发一个自定义闹钟应用程序,希望在闹钟响起后立即在我的应用程序中使用振动,我已经使用了 AudioToolbox 并使用了以下代码: AudioServicesPlayAlertSound(Sy
将对 AudioServicesPlaySystemSound 的调用放入队列以避免阻塞主线程是否被认为是好的做法?这是人们做的事情吗? 最佳答案 我问自己同样的问题,并用于将此调用置于后台线程中。真
这个问题在这里已经有了答案: Playing system sound without importing your own (11 个答案) 关闭 9 年前。 这只是我脑海中浮现的一个问题,但有谁
自 iOS3 以来,我的应用程序中就有此代码,并且一直在运行。据我所知,这些库在 iOS8 中根本没有改变,但在 iOS8 中不起作用。它不会崩溃或任何事情,它只是从不播放声音效果。 有什么想法吗?
我正在编写一个闹钟应用程序,我需要让用户选择唤醒的铃声。我有一个 UITableView,其中包含我的声音列表,当用户点击我想要播放的声音时。 但是,我的声音不会播放,除非我越过对 AudioServ
我正在开发录音应用程序,我想在录音开始时播放声音。 不幸的是,从 iOS 5 开始,当带有音频设备的 AVCaptureSession 处于事件状态时,似乎无法播放系统声音。 这是我正在使用的代码的相
有没有办法取消、暂停或停止通过调用 AudioServicesPlaySystemSound() 开始播放的声音? 最佳答案 不幸的是,您不能 - 顾名思义,它旨在播放用于系统警报的声音,您不需要控制
我正在使用 AudioToolBox 播放一个小的 .wav 文件。 AudioServicesPlaySystemSound (soundFileObject); 但有时不播放。 这是什么原因? 最
我正处于开发我的第一个 iPad 应用程序的早期阶段,为了简单起见,到目前为止我一直在使用 AudioServicesPlaySystemSound 和相关的函数来播放声音。我的代码基于 Apple
我正在使用 AudioServicesPlayAlertSound(kSystemSoundID_Vibrate); 如何选择振动的持续时间? 我只想要一次短暂的振动,例如敲击键盘按钮时发出的“咔哒”
我需要我的软件等到声音完全播放后再继续。我有很多声音需要开发,所以使用回调方法会花费很多开发时间。 有没有办法在不使用回调方法的情况下调用 AudioServicesPlaySystemSound 并
我在代码中先导入AudioToolbox,然后再AudioServicesPlaySystemSound(1336)来播放系统声音。它可以工作,但也会振动,这是不需要的。为什么会振动?我怎样才能做到不
在我的应用程序中,我使用 AudioServicesPlaySystemSound 来播放小的 caf 文件。在 iPhone 上运行我的应用程序并通过横向按钮更改音量时,应用程序的声音会发生变化 也
我们有一款游戏即将发布,但我们遇到了一个非常烦人的问题。我们的 Beta 测试人员手机之一,他听不到任何游戏音效。然而,他可以很好地听到背景音乐和标题屏幕音乐。 背景音乐和标题音乐都通过 AVAudi
extension AppDelegate : UNUserNotificationCenterDelegate { // Receive displayed notifications for iO
我的 iOS 应用程序中的 AudioServicesPlaySystemSound 有问题。 我定义了一个播放系统声音的方法。当我从 viewDidLoad 调用该方法时,我可以听到声音播放,但是当
我正在阅读关于堆栈溢出的这篇关于使用 AudioServicesPlaySystemSound 一次播放一个声音的帖子。 stop sound in iPhone 我遇到了同样的问题,使用以下代码,当
我正在使用适用于 iPhone 的读卡器,我需要在插入读卡器时播放声音。由于一些其他问题,我使用了 AudioServicesPlaySystemSound。但是当读卡器插入时,声音不会通过扬声器播放
我是一名优秀的程序员,十分优秀!