Ios AudioKit AKPlayer无法以设置位置回环到起始位置
在v4中,如果将Ios AudioKit AKPlayer无法以设置位置回环到起始位置,ios,audiokit,Ios,Audiokit,在v4中,如果将AKPlayer与循环一起使用,并使用setPositionAPI,则播放器将在setPosition设置的位置与播放器的总持续时间之间循环。我需要的是从setPositionAPI设置的位置开始,循环到循环发生时的开始。我不确定这是否是有意的,但我需要能够找到播放器中的某个点并循环到开始,目前看来这不是AudioKit中的功能。 有没有办法或解决办法来实现这一点?我需要按要求完成这项工作。 下面是一个完整的游乐场示例: import AudioKitPlaygrounds im
AKPlayer
与循环一起使用,并使用setPosition
API,则播放器将在setPosition
设置的位置与播放器的总持续时间之间循环。我需要的是从setPosition
API设置的位置开始,循环到循环发生时的开始。我不确定这是否是有意的,但我需要能够找到播放器中的某个点并循环到开始,目前看来这不是AudioKit中的功能。
有没有办法或解决办法来实现这一点?我需要按要求完成这项工作。
下面是一个完整的游乐场示例:
import AudioKitPlaygrounds
import AudioKit
let file = try AKAudioFile(readFileName: "3.aac")
//: Set up a player to the loop the file's playback
var player = AKPlayer(audioFile: file)
player.isLooping = true
player.buffering = .always
AKManager.output = player
try AKManager.start()
player.setPosition(player.duration - 2)
player.play(at: AVAudioTime.now())
// player loops between player.duration - 2, player.duration forever. I want it to loop between 0, player.duration
import PlaygroundSupport
PlaygroundPage.current.needsIndefiniteExecution = true
预期行为
我希望它能回到开头
详情:
- 音频套件版本4.11.2
长度设置为歌曲的总持续时间(请注意,这些属性以节拍而不是秒表示)。根据需要设置定序器的循环启用
注释即可
class Beat {
var sample: Sample!
var onsetTime: Double
var endTime {
get {
return onsetTime + sample.duration
}
}
}
class Sample {
var url: URL!
var duration: Double
}
class ViewController: UIViewController {
var samples: [Sample] = []
var beats: [Beat] = []
var player: AKPlayer!
var sequencer: AKSequencer!
}
在音符的音高上,您将存储要播放的样本的索引。这是回调函数的外观:
func playCallback(status:UInt8, note:MIDINoteNumber, vel:MIDIVelocity) -> () {
guard let status = AKMIDIStatus(byte: status),
let type = status.type,
type == .noteOn else { return }
DispatchQueue.main.async {
player.load(samples[note].url)
player.play()
}
}
您可以使用AKSequencer
的seek
方法在任意位置开始播放歌曲
有一种特殊情况,音序器在节拍中间开始演奏。在这种情况下,必须手动开始播放该示例
func play(at time: Double = 0) {
sequencer.seek(time)
sequencer.play()
for beat in beats {
if beat.onsetTime < time && time < beat.endTime {
player.load(beat.sample.url)
player.play(from: time - beat.onsetTime)
}
}
}
func播放(时间:Double=0){
sequencer.seek(时间)
音序器播放()
以拍代拍{
如果beat.onsetTime