我花时间创建了一个实用的示例来帮助您@Ulrich,如果您有可用的游乐场环境,您可以放下并玩,或者只是将其用作参考,相信我,它可以修改您的代码,这是不言自明的,但是您可以在代码 TLDR 之后阅读更多关于为什么我的版本有效的信息;
之前 audio>
之后 audio>
在撰写本文时,以下内容已在最新的 XCode 和 Swift(XCode 11.4、Swift 5.2 和 AudioKit 4.9.5)中进行了测试和运行,没有出现任何问题:
import AudioKitPlaygrounds
import AudioKit
let audiofile = try! AKAudioFile(readFileName: "demo.mp3")
let player = AKPlayer(audioFile: audiofile)
let generator = AKOperationEffect(player) { player, _ in
let oscillator = AKOperation.fmOscillator(baseFrequency: 400,
carrierMultiplier: player.toMono(),
modulatingMultiplier: 100,
modulationIndex: 0,
amplitude: 1)
return oscillator
}
AudioKit.output = generator
try! AudioKit.start()
player.play()
generator.start()
在下载页面找到可以使用的 Playground (https://audiokit.io/downloads/ https://audiokit.io/downloads/ )
如您所见,除了在初始化新文件时声明 mp3 文件的路径之外AKAudioFile
并传递给AKPlayer
例如,您需要按一定顺序执行三个步骤:
1) Assign an `AKNode` to the AudioKit output
2) Start the AudioKit engine
3) Start the `player` to generate output
4) Start the generator to moderate your sound
理解为什么会这样的最好方法是暂时忘记代码并想象在现实世界中修补东西;最后,尝试想象音频流。
希望这对您和未来的读者有所帮助!