【问题标题】:AVAudioPlayer plays one data (one time) and then repeatedly plays another data (multiple times)AVAudioPlayer 播放一个数据(一次),然后重复播放另一个数据(多次)
【发布时间】:2017-05-30 01:07:55
【问题描述】:

我正在开发一个需要播放两个数据(例如:dataA 和 dataB)的音频应用。就应用而言,它应该按以下顺序播放音频数据:

|数据A |数据B |数据B | ......重复N次数据B ... |

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

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

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

【问题讨论】:

    标签: ios audio avaudioplayer


    【解决方案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;
                  }
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2016-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多