gpt4 book ai didi

audiokit - 将 AKPlayer 与 AKSampleMetronome 同步

转载 作者:行者123 更新时间:2023-12-02 19:37:24 26 4
gpt4 key购买 nike

我正在尝试在我的(某种)多音频文件播放项目中使用 AKSamplerMetronome 作为主时钟。我希望 AKPlayers 与 Metronome 的悲观节奏同步启动。将 AKPlayer 和 AKSamplerMetronome 混合为 AudioKit.output 是成功的,但是,我正在努力将 AKPlayer.start 与 AKSamplerMetronome.beatTime (或其他我还没有弄清楚的东西)连接起来,因此播放从节拍器同步的强拍开始(并重复每个节拍器打出悲观的时间)。这是我写的:

class ViewController: UIViewController {

let metronome = AKSamplerMetronome()
let player = AKPlayer(audioFile: try! AKAudioFile(readFileName: "loop.wav"))
let mixer = AKMixer()

func startAudioEngine() {
do {
try AudioKit.start()
} catch {
print(error)
fatalError()
}
}

func makeConnections() {
player >>> mixer
metronome >>> mixer
AudioKit.output = mixer
}

func startMetronome() {

metronome.tempo = 120.0
metronome.beatVolume = 1.0
metronome.play()
}

func preparePlayer() {

player.isLooping = true
player.buffering = .always
player.prepare()
// I wanted AKPlayer to be repeated based on Metronome's downbeat.

}

func startPlayer() {

let startTime = AVAudioTime.now() + 0.25
player.start(at: startTime)

}

override func viewDidLoad() {
super.viewDidLoad()

makeConnections()
startAudioEngine()
preparePlayer()
startPlayer()
startMetronome()

}

}

我的问题是,AKPlayer 的起点(at:) 无法识别 AKSamplerMetronome 的属性,可能是因为它与 AVAudioTime 不兼容?我尝试过类似的方法:

let startTime = metronome.beatTime + 0.25
player.start(at: startTime)

但这似乎不是一个答案(因为“无法将值类型“Double”转换为预期的参数类型“AVAudioTime?”)。如果有人可以帮助我探索 Swift/AudioKit,那将非常有帮助。<3

最佳答案

您正在使用 Double 参数调用 AVAudioTime 播放函数。这是不正确的。如果您想使用秒参数启动 AKPlayer,请使用player.play(when: time)

总的来说,你已经很接近了。您可以这样做:

    let startTime: Double = 1

let hostTime = mach_absolute_time()
let now = AVAudioTime(hostTime: hostTime)
let avTime = now.offset(seconds: startTime)
metronome.setBeatTime(0, at: avTime)
player.play(at: avTime)

基本上,您需要为每个单元提供一个公共(public)时钟(mach_absolute_time()),然后使用 AVAudioTime 在准确的时间启动它们。 Metronome.setBeatTime 告诉节拍器在传入的 avTime 处将其重置为 0 点。

关于audiokit - 将 AKPlayer 与 AKSampleMetronome 同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51817406/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com