Получение искаженного звука при изменении скорости звука с использованием AVAudioPlayerNode и AVAudioEngine - PullRequest
0 голосов
/ 04 июня 2018

Я хочу изменить скорость и высоту звука в файле.когда я меняю частоту звука, тональность автоматически меняется и получается непонятный звук звука.

я использую этот код

var engine: AVAudioEngine!
var player: AVAudioPlayerNode!
var pitch : AVAudioUnitTimePitch!
var file = AVAudioFile()
var totalDuration : TimeInterval!


 func configurePlayer() {
        engine = AVAudioEngine()
        player = AVAudioPlayerNode()
        player.volume = 1.0

        let path = Bundle.main.path(forResource: "sample", ofType: "wav") 
        let url = URL.init(fileURLWithPath: path!) 

        file = try! AVAudioFile(forReading: url)
        let buffer = AVAudioPCMBuffer(pcmFormat: file.processingFormat, frameCapacity: AVAudioFrameCount(file.length))
        do {
            try file.read(into: buffer!)
        } catch _ {
        }

        pitch = AVAudioUnitTimePitch()

        pitch.rate = 1

        engine.attach(player)

        engine.attach(pitch)
        engine.attach(speedEffect)


        engine.connect(player, to: pitch, format: buffer?.format)

        engine.connect(pitch, to: engine.mainMixerNode, format: buffer?.format)

        player.scheduleBuffer(buffer!, at: nil, options: AVAudioPlayerNodeBufferOptions.loops, completionHandler: nil)

        engine.prepare()
        do {
            try engine.start()
        } catch _ {
        }
    }




@IBAction func slideValueChanged(_ sender: UISlider) {

        let newRate = sender.value/120;
        pitch.rate = newRate
    }

, когда меняю скорость звука с помощью ползунка, получая плохой звук.

 slider minValue: 60  maxValue: 240
...