我正在尝试对来自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之后阅读更多有关为什么我的版本可以工作的信息;

之前<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()

在下载页面(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

理解为什么这样做的最好方法是忘记一点代码并想象修补现实世界中的事物。最后,尝试想象音频流。

希望这对您和 future 的读者有所帮助!

关于ios - AudioKit:如何为AKPlayer执行频率调制,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/61801986/

10-11 05:42