问题描述
我正在用 Swift 编写一个音频应用程序——其中一项任务是对给定信号(麦克风输入或声音文件)进行频率调制——因此我正在遍历缓冲区的所有帧,例如
let leftSourceData = readBuffer.floatChannelData?[0]
let rightSourceData = readBuffer.floatChannelData?[1]
let leftTargetData = renderBuffer.floatChannelData?[0]
let rightTargetData = renderBuffer.floatChannelData?[1]
for i in 0..<Int(readBuffer.frameLength) {
// Todo: perform frequency modulation on source data,writing the results to target data
leftTargetData[i] = ???
rightTargetData[i] = ???
}
频率调制的方程式很清楚 - 您可以在 Internet 上找到。像这样:
f(t) = A sin(2*pi*fc*t + I * sin(2*pi*fm*t))
with fc = carrier frequency,fm = modulation frequency
and I = modulation index.
上述方程仅涵盖正弦输入信号 - 无论如何,我想调制任意信号 - 因此s.th。不同于纯正弦波。
对于幅度调制,我使用了以下算法(在循环内),适用于 Swift 和 iOS:
let val: Double = sin(Double(2 * modulationFrequency) * Double(index) * Double.pi / Double(renderBuffer.format.sampleRate))
leftTargetData?[i] = Float(val) * (leftSourceData?[i] ?? 0)
rightTargetData?[i] = Float(val) * (rightSourceData?[i] ?? 0)
我如何为 FM 做同样的事情?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)