ios SystemSound 不会响应音量按钮

标签 ios mpmovieplayercontroller

我在我的应用程序中使用了 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(即使通过像 FinchCocosDenshion 这样的第三方声音库)

有任何想法吗?

最佳答案

使用 AVAudioPlayer用于播放由用户音量设置控制的声音(非系统声音)的类。

您可以保留 AVAudioPlayer 的实例对于您经常使用的每个声音文件,只需调用 play方法。使用prepareToPlay预加载缓冲区。

关于ios SystemSound 不会响应音量按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17212853/

相关文章:

ios - 如何在模拟器目录 (XCode 5) 中获取应用程序 ID (GUID)

ios - UISearchController 不触发委托(delegate)方法和搜索栏委托(delegate)方法

iphone - 如何以编程方式检查视频或音频文件格式是否可以在 iPhone 中播放?

ios - 如何在我的 MPMoviePlayerController 实例中添加音量控制

iphone - MPMoviePlayerController:关键帧问题

iphone - MPMoviePlayerController thumbnailImageAtTime :timeOption: simple case doesn't work

ios - MediaPlayer 使用 DropBox URL 播放视频

objective-c - NSManagedObjectContext 通过通知中心问题在多个线程上保存/合并

ios - 尽管表不为空,核心数据获取仍返回零记录

iphone - 如何制作像 Apple Pages 应用程序一样的选择按钮