ios - AVAudioPlayer 多次播放相同的声音而不会中断

标签 ios swift avaudioplayer

我有一个 ScrollView 。我想在每次达到 1/7 时播放声音。当用户缓慢滚动时,它会起作用,因为声音在另一个声音被触发之前就结束了。

但如果它太快了:我有 2 个选择:

  • 忽略下面应该触发的声音
  • 停止上一个播放下一个

但我想要的是让第一个完成播放,即使第二个(甚至第三个、第四个等)已经开始播放。

我可以用一个 AVAudioplayer 做这个吗?

var alertSound = NSBundle.mainBundle().URLForResource("Transit", withExtension: "aif")
AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient, error: nil)
AVAudioSession.sharedInstance().setActive(true, error: nil)

var error:NSError?
audioPlayer = AVAudioPlayer(contentsOfURL: alertSound, error: &error)
audioPlayer.prepareToPlay()

最佳答案

要实现您想要的效果,您需要多个 AVAudioPlayer,一个播放器无法完成这项工作。然而,AudioToolbox 框架可能会满足您的要求。

基本上,您可以为您的声音创建一个系统声音 ID,并在需要时触发它。一旦发射,声音就会播放,缺点是无法控制音量,但在这种情况下这无关紧要。

基本示例是(obj-C 抱歉)

    NSString *path=[[NSBundle mainBundle] pathForResource: @"soundName" ofType:@"aif"];

    SystemSoundID soundID;
    AudioServicesCreateSystemSoundID((__bridge CFURLRef)([NSURL fileURLWithPath:path]), &soundID);
    AudioServicesPlaySystemSound(soundID);

关于ios - AVAudioPlayer 多次播放相同的声音而不会中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31405990/

相关文章:

ios - 不使用 AVAudioPlayer 播放 mp3 文件

xcode - iOS 应用仅通过耳机播放声音

php - Google Firebase 通知在控制台上工作但不在 API 上工作

iphone - 如何在屏幕解锁后重新启动动画

ios - 虚假的 Game Center 玩家断开连接消息

ios - 异步下载后在可见的 UITableviewCell 中设置图像

ios - SwiftUI 和 Combine - 在另一个更改时更新 View 模型中的变量

ios - 将按钮的目标方法设置为另一个类的函数

ios - 如何使导航栏的导航项居中?

ios - 如何在 AVAudioPlayer 开始播放音频时准确获取通知?