【问题标题】:AudioKit: how to perform frequency modulation for AKPlayerAudioKit:如何为 AKPlayer 执行频率调制
【发布时间】:2020-08-31 06:15:36
【问题描述】:

我正在尝试对来自 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】:

    我花时间创建了一个实用的示例来帮助您@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/) 中找到可以使用的 Playground

    如您所见,除了在初始化新的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
    

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

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

    【讨论】:

    • 感谢您的回复!但是将元素连接到正确的顺序不是我的问题。好的,我没有将它发布到我的代码中,因为我专注于频率调制本身。我的具体问题:我尝试对来自 mp3 的输入信号执行频率调制。当我用 10.000 Hz 的正弦对其进行调制时,我​​希望我的声音被调制成您不再能听到低频的方式。或者换句话说:当我对这样的信号执行 FFTPlot 时,我希望在 10.000 Hz 处有一个峰值,具有一定的带宽,来自 mp3 信号。
    • @ulrich 我花时间回答了您发布的问题。如果您正在寻找的答案扩展到一些未描述的晦涩问题,您应该更好地解释。你明白吗?打开一个关于它的新线程,如上所述,您得到了您发布的问题的答案。
    • “没有按预期工作”,“有人知道如何调制 mp3 吗?”,两者都是,我的回答是。您还抱怨文档并且您没有正确记录您的问题。
    • 谢谢,学习了!是的,你是对的,我应该更好地解释我的声明“它没有按预期工作” - 好主意,打开一个新线程!无论如何,每个想了解如何调制 mp3 的人都是这个线程中的一个很好的教程(由你编写)!
    • @UlrichVormbrock 乐于助人!现在,如果答案适用于州,那么在 SO 上投票并标记为已接受以使其与未来用户相关是一种良好的公民做法。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多