AVAudioPlayer播放一个数据(一次),然后重复播放另一个数据(多次)

时间:2017-05-30 01:07:55

标签: ios audio avaudioplayer

我正在开发一个需要播放两个数据的音频应用程序(例如:dataA和dataB)。出于应用程序的目的,它应按此顺序播放音频数据:

| dataA | dataB | dataB | ......重复N次数据B ... |

一个简单的解决方案是创建一个包含上述数据结构的超大型NSData(1 dataA + N dataB)。然而,它是低效的,尤其是当N> 1时。 10000

在我可以直接控制音频播放缓冲区的Android或其他系统中,我可以简单地将dataA推送到播放缓冲区,然后使用for循环将dataB放入我想要的次数(不分配超大缓冲区)保存重复数据B)。

如何通过AVAudioPlayer实现? (注意:出于应用程序的目的,我需要在dataA之后直接播放dataB,延迟为0。所以不可能使用多个AVAudioPlayer类)

1 个答案:

答案 0 :(得分:1)

创建两个AVPlayer实例,一个用于播放aData,另一个用于播放bData。

let aDataPlayer = AVPlayer(url: URL(string: aData_URL)!)
let bDataPlayer : AVPlayer? = nil
var counterForbPlayer : Int = 100 //whatever your n value is

使用AVPlayerItemDidPlayToEndTime在玩家完成游戏时收到通知。

NotificationCenter.default.addObserver(self, selector: #selector(loadNextudio), name: .AVPlayerItemDidPlayToEndTime, object: nil)


func loadNextudio() {
        if self.bDataPlayer == nil {
              bDataPlayer = AVPlayer(url: URL(string: bData_URL)!)
              bDataPlayer.play()
              counterForbPlayer -= 1;
        }
        else {
              if counterForbPlayer > 0 {
                  bDataPlayer?.currentItem?.seek(to: kCMTimeZero)
                  bDataPlayer?.play()
                  counterForbPlayer -= 1;
              }
        }
    }