2

我正在尝试对来自 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 没有很好的文档记录……有很多例子,但它们都处理合成声音,如正弦波、方波等。

4

1 回答 1

2

我花时间创建了一个实用的示例来帮助您@Ulrich,如果您有可用的游乐场环境,您可以放下并玩耍,或者只是将其用作参考,相信我它可以修改您的代码,这是不言自明但你可以阅读更多关于为什么我的版本在代码 TLDR 之后工作;

<音频>之前

<音频>之后

以下内容在撰写本文时在最新的 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/ )中找到可以使用的 Playground

如您所见,除了在初始化 newAKAudioFile并传递给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

理解为什么会这样的最好方法是暂时忘记代码并想象在现实世界中修补事物;最后,试着想象一下音频流。

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

于 2020-05-14T22:08:45.017 回答