我在我的应用程序中使用了 SystemSound 来播放简单的音效。除此之外,我通过 MPMoviePlayerController 播放音乐视频 - 现在,当我将音量调高/调低时,视频中的音乐会按预期响应(调高/调低音量)。
但是播放的系统声音不响应音量。当用户点击应用程序中的某些区域时,我会播放系统声音。这是我的代码片段:
- (void)handleTap:(UITapGestureRecognizer *)recognizer {
SystemSoundID completeSound = nil;
//yellow folder in xcode doesnt need subdirectory param
//blue folder (true folder) will need to use subdirectory:@"dirname"
NSURL *sound_path = [[NSBundle mainBundle] URLForResource: target_sound_filename withExtension: @"wav"];
AudioServicesCreateSystemSoundID((__bridge CFURLRef)sound_path, &completeSound);
AudioServicesPlaySystemSound(completeSound);
}
PS。我仔细检查了我的“设置->声音->铃声和警报->使用按钮更改”是否设置为开启(正如我在其他一些 SO 答案中看到的那样,关闭此选项会导致系统声音无法响应音量按钮)
此外,使用 systemsound 的原因是它在播放多个声音时(如在游戏中)提供了最准确和响应最灵敏的结果。
如果可能,我宁愿不使用 OpenAL(即使通过像 Finch 或 CocosDenshion 这样的第三方声音库)
有任何想法吗?
最佳答案
使用 AVAudioPlayer用于播放由用户音量设置控制的声音(非系统声音)的类。
您可以保留 AVAudioPlayer
的实例对于您经常使用的每个声音文件,只需调用 play
方法。使用prepareToPlay
预加载缓冲区。
关于ios SystemSound 不会响应音量按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17212853/