AudioKit:如何对AKPlayer执行频率调制

问题描述 投票:0回答:1

我正在尝试对来自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的文档不够完善……。有大量示例,但它们都处理诸如正弦波,方波等合成声音。

ios swift frequency audiokit modulation
1个回答
0
投票

我花时间创建了一个实用的实际示例来帮助您@Ulrich,如果您有可用的游乐场环境,则可以拖放来玩,或者只是将它用作参考,相信我可以修改您的代码,它是自我解释性的,但您可以阅读更多有关为什么我的版本在代码TLDR之后起作用的原因;

以下内容在撰写本文时(XCode 11.4和Swift 5.2)已经过测试,并且在最新的XCode和Swift中运行没有问题:

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

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

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

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.