gpt4 book ai didi

ios - 使用 AVAudioEngine 循环音频

转载 作者:行者123 更新时间:2023-11-30 10:24:58 27 4
gpt4 key购买 nike

我一直在 obj-c 中工作,但我想快速恢复头脑。我的代码即将完成,但我只是不知道如何循环我的 wav。播放一次后就停止了。我找到了一些说明,但还没有找到适合我的代码的解决方案。我希望有人知道答案并可以帮助我。所以问题是:当按下 @IBAction func playButtonTapped 时,我必须做什么才能使我的 wav 循环?为了确定起见,我将提供所有代码。预先感谢:-)

class ViewController: UIViewController {

@IBOutlet var startAllButton: UIButton!
var audioEngine = AVAudioEngine()
var playerNode = AVAudioPlayerNode()



let timeShift = AVAudioUnitTimePitch()
let pedoMeter = CMPedometer()
let bpm: Float = 110


var avgStarted: Bool = false

var steps: Int = 0
var timer = Timer()
var adjustedBpm: Float = 110

var timerCount = 10 {
didSet {
if timerCount == 0 {
stopCountingSteps()


}
}
}

var lastTap: Date? = nil

@IBOutlet weak var tempoTap: UIButton!
@IBOutlet weak var slider: UISlider!
@IBOutlet weak var label: UILabel!
@IBOutlet weak var playButton: UIButton!
@IBOutlet weak var timerLabel: UILabel!
@IBOutlet weak var stepCountLabel: UILabel!
@IBOutlet weak var avgLabel: UIButton!

override func viewDidLoad() {
super.viewDidLoad()
setup()
}

func setup() {
label.text = "110"
audioEngine.attach(playerNode)
audioEngine.attach(timeShift)
audioEngine.connect(playerNode, to: timeShift, format: nil)
audioEngine.connect(timeShift, to: audioEngine.mainMixerNode, format: nil)
audioEngine.prepare()
timerLabel.text = ""
stepCountLabel.text = ""
do {
try audioEngine.start()
} catch {
print("Could not start audio engine")
}
}


@IBAction func sliderValueChanged(_ sender: UISlider) {
label.text = String(sender.value)



self.label.text = String(format:"%.f", sender.value)

adjustedBpm = sender.value
timeShift.rate = adjustedBpm/bpm

}

@IBAction func playButtonTapped(_ sender: Any) {


let url = Bundle.main.url(forResource: "25loop110", withExtension: ".wav")
if let url = url {
do {
let audioFile = try AVAudioFile(forReading: url)


timeShift.rate = adjustedBpm/bpm
playerNode.scheduleFile(audioFile, at: nil, completionHandler: nil)

} catch {
print("could not load audio file")
}
} else {
print("could not load audio file")
}
playerNode.play()

}

最佳答案

问题是这些行:

let audioFile = try AVAudioFile(forReading: url)
playerNode.scheduleFile(audioFile, at: nil, completionHandler: nil)

循环在哪里?无处。该代码播放该文件一次。

您无法在 AVAudioEngine 中循环播放文件。您使用缓冲区进行循环。您将文件读入缓冲区并调用 scheduleBuffer(buffer, at: nil, options: .loops)

关于ios - 使用 AVAudioEngine 循环音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60129976/

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