【问题标题】:iOS AVAudioPlayerNode buffer completion handler for each loop每个循环的 iOS AVAudioPlayerNode 缓冲区完成处理程序
【发布时间】:2017-02-07 09:19:43
【问题描述】:

有没有办法在调度缓冲区时为每个循环设置一个完成处理程序?

self.audioPlayerNode.scheduleBuffer(buffer, at: nil, options: .loops, completionHandler: completionHandler)

// call each loop, not only on the buffer end
func completionHandler() {
    // code here
}

【问题讨论】:

    标签: ios audio avaudioplayernode


    【解决方案1】:

    我能想到的唯一方法是重新调度同一个缓冲区,每次都提供一个完成处理程序。

    我会去的:

    func scheduleNext() {
        self.audioPlayerNode.scheduleBuffer(buffer, at: nil, completionHandler: completionHandler)
    }
    
    func completionHandler() {
        // code here
    
        scheduleNext()
    }
    
    // ...
    scheduleNext()
    

    【讨论】:

      【解决方案2】:

      这对我有用

      // audioFile here is our original audio
      
      audioPlayerNode.scheduleFile(audioFile, at: nil, completionHandler: {
              print("scheduleFile Complete")
      
          var delayInSeconds: Double = 0
      
          if let lastRenderTime = self.audioPlayerNode.lastRenderTime, let playerTime = self.audioPlayerNode.playerTime(forNodeTime: lastRenderTime) {
      
              if let rate = rate {
                  delayInSeconds = Double(audioFile.length - playerTime.sampleTime) / Double(audioFile.processingFormat.sampleRate) / Double(rate!)
              } else {
                  delayInSeconds = Double(audioFile.length - playerTime.sampleTime) / Double(audioFile.processingFormat.sampleRate)
              }
          }
      
          // schedule a stop timer for when audio finishes playing
          DispatchTime.executeAfter(seconds: delayInSeconds) {
              audioEngine.mainMixerNode.removeTap(onBus: 0)
              // Playback has completed
          }
      
      })
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-07
        • 2020-12-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-29
        相关资源
        最近更新 更多