[英]AudioKit: how to perform frequency modulation for AKPlayer
我正在尝试对来自 AKPlayer 的信号执行频率调制,它会播放一个 mp3 文件。 我尝试使用 AKOperationEffect,但它没有按预期工作:
let modulatedPlayer = AKOperationEffect(player) { player, _ in
let oscillator = AKOperation.fmOscillator(baseFrequency: modulationFrequency,
carrierMultiplier: player.toMono(),
modulatingMultiplier: 100,
modulationIndex: 0,
amplitude: 1)
return oscillator
}
有人知道如何调制 mp3 吗? 不幸的是,AudioKit API 没有很好的文档记录......有很多例子,但它们都处理合成声音,如正弦波、方波等。
我花时间创建了一个实用的实际示例来帮助您@Ulrich,如果您有可用的游乐场环境,您可以放下并玩,或者只是将其用作参考,相信我它可以修改您的代码,这是不言自明的,但你可以阅读更多关于为什么我的版本在代码 TLDR 之后工作;
< 音频>之前
< 音频>之后
在撰写本文时,在最新的 XCode 和 Swift(XCode 11.4、Swift 5.2 和 AudioKit 4)中测试并运行了以下内容,没有问题:
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()
在下载页面( https://audiokit.io/downloads/ )找到准备使用的操场
如您所见,除了在初始化新的AKAudioFile
并传递给AKPlayer
实例时声明 mp3 文件的路径外,您还需要按特定顺序执行三个步骤:
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
理解为什么会这样的最好方法是暂时忘记代码并想象在现实世界中修补事物; 最后,试着想象一下音频流。
希望这对您和未来的读者有所帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.