Использование нового AudioEngine для изменения звука звука AudioPlayer

В настоящее время я пытаюсь получить новый звуковой движок Apple, работающий с моей текущей настройкой звука. В частности, я пытаюсь изменить высоту тона с помощью Audio Engine, который, по-видимому, возможен в соответствии с этим сообщением.

Я также рассмотрел другие варианты изменения высоты тона, включая Dirac и ObjectAL, но, к сожалению, оба они, похоже, очень запутались в работе с Swift, которые я использую.

Мой вопрос заключается в том, как изменить высоту звукового файла с помощью нового звукового движка Apple. Я могу воспроизводить звуки с помощью AVAudioPlayer, но я не понимаю, как файл ссылается на audioEngine. В коде на связанной странице есть "формат", который относится к аудиофайлу, но я не понимаю, как создать формат или что он делает.

Я воспроизвожу звуки с помощью этого простого кода:

let path = NSBundle.mainBundle().pathForResource(String(randomNumber), ofType:"m4r")
let fileURL = NSURL(fileURLWithPath: path!)
player = AVAudioPlayer(contentsOfURL: fileURL, error: nil)
player.prepareToPlay()
player.play()

Ответ 1

Вы используете AVAudioPlayerNode, а не AVAudioPlayer.

engine = AVAudioEngine()
playerNode = AVAudioPlayerNode()
engine.attachNode(playerNode)

Затем вы можете подключить AVAudioUnitTimePitch.

var mixer = engine.mainMixerNode;
auTimePitch = AVAudioUnitTimePitch()
auTimePitch.pitch = 1200 // In cents. The default value is 1.0. The range of values is -2400 to 2400
auTimePitch.rate = 2 //The default value is 1.0. The range of supported values is 1/32 to 32.0.
engine.attachNode(auTimePitch)
engine.connect(playerNode, to: auTimePitch, format: mixer.outputFormatForBus(0))
engine.connect(auTimePitch, to: mixer, format: mixer.outputFormatForBus(0))