Я хочу изменить высоту звука и скорость воспроизведения некоторого звука в реальном времени с помощью ползунка или переменной (то есть во время воспроизведения звука) в Xcode, Swift 4.
В настоящее время я использую AVAudioEngine, который позволяет мне устанавливать эти значения до начала воспроизведения, но я не могу их изменить, пока звук воспроизводится.
Вот код, о котором идет речь:
func Play() {
engine = AVAudioEngine()
audioPlayer = AVAudioPlayerNode()
audioPlayer.volume = 1.0
let path = Bundle.main.path(forResource: "filename", ofType: "mp3")!
let url = NSURL.fileURL(withPath: path)
let file = try? AVAudioFile(forReading: url)
let buffer = AVAudioPCMBuffer(pcmFormat: file!.processingFormat, frameCapacity: AVAudioFrameCount(file!.length))
do {
try file!.read(into: buffer!)
} catch _ {
}
let pitch = AVAudioUnitTimePitch()
let speed = AVAudioUnitVarispeed()
pitch.pitch = speedIncrement * (-500)
speed.rate = speedIncrement
engine.attach(audioPlayer)
engine.attach(pitch)
engine.attach(speed)
engine.connect(audioPlayer, to: speed, format: buffer?.format)
engine.connect(speed, to: pitch, format: buffer?.format)
engine.connect(pitch, to: engine.mainMixerNode, format: buffer?.format)
audioPlayer.scheduleBuffer(buffer!, at: nil, options: AVAudioPlayerNodeBufferOptions.loops, completionHandler: nil)
engine.prepare()
do {
try engine.start()
} catch _ {
}
audioPlayer.play()
}
Возможно ли это даже с AVAudioEngine?
Если это невозможно с AVAudioEngine, каковы другие возможные решения?