【问题标题】:Perform real time FFT from Apple Watch microphone [closed]从 Apple Watch 麦克风执行实时 FFT [关闭]
【发布时间】:2020-09-15 18:00:07
【问题描述】:

我正在开发一个应用程序,它会等待麦克风检测到某个频率。据我研究,我认为最好的方法是对实时音频信号执行快速傅立叶变换(如果有人认为有更好的方法,我很想听听你的意见)。它在 iOS 上运行良好,但我找不到让它在 watchOS 上运行的方法

我在 iOS 和 Swift 5 上实现了著名的 tempi-fft 没有问题,问题来自于不同的库不存在或限制在 watchOS SDK,因为我不能使用 AudioUnit,AURenderCallback 来检测缓冲区上的新数据,可以'不要将首选缓冲区持续时间和采样率调整为 WatchOS 上的 AudioSession 等。我根本不是“音频工程”方面的专家,所以我不知道如何解决这个问题。我研究了很多,但我没有找到 watchOS 上的实现。

我只发现了这个项目AccelerateWatch,但这是几年前在watchOS 上还没有Accelerate 框架时上传的。

对此的任何帮助将不胜感激。

【问题讨论】:

  • 欢迎来到 SO :) 你的问题很模糊,我想如果你能具体说出你尝试过的和没用的,你会得到更多有用的答案
  • 如果您只对特定频率感兴趣,那么 FFT 就太过分了 - 请考虑改用 Goertzel 滤波器。

标签: swift fft watchos accelerate-framework vdsp


【解决方案1】:

我在 iOS App Store 中有一个用于 Apple Watch 的半音调音器应用程序,它完全可以在 Apple Watch 组件中运行。

iOS 应用和 watchOS Watch 应用组件都使用 AVAudioInputNode installTapOnBus 近乎实时地获取 AVAudioPCMBuffer 麦克风样本缓冲区。然后,应用程序将音频样本数据块提供给 Goertzel 例程或 Accelerate 框架 vDSP FFT 函数,以进行进一步的频率分析。然后应用程序对 FFT 频率数据进行进一步处理,以检测和估计音频音高(这通常与 FFT 频率幅度峰值非常不同)。然后使用 SpriteKit 以帧速率为 watchOS 显示屏设置动画以输出结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-30
    • 1970-01-01
    • 1970-01-01
    • 2019-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多