gpt4 book ai didi

ios - 从 .m4a 数据中过滤频率

转载 作者:可可西里 更新时间:2023-11-01 01:10:28 26 4
gpt4 key购买 nike

我正在尝试分析一个声音文件 (.m4a) 以获取随时间变化的振幅并制作图表。我在网上找到了一些效果很好的代码(如下)。但是,我想另外过滤掉所有不在目标频率范围内的声音。例如。我只想绘制 1900-2100 Hz 之间的声音。我该怎么做?

    var processingBuffer = [Float](repeating: 0.0, count: Int(readFile.arrayFloatValues.count))
let sampleCount = vDSP_Length(readFile.arrayFloatValues.count)

vDSP_vabs(readFile.arrayFloatValues, 1, &processingBuffer, 1, sampleCount);

let samplesPerPixel = 1
let filter = [Float](repeating: 1.0 / Float(samplesPerPixel), count: Int(samplesPerPixel))
let downSampledLength = Int(readFile.arrayFloatValues.count / samplesPerPixel)
var downSampledData = [Float](repeating:0.0, count:downSampledLength)

vDSP_desamp(processingBuffer,
vDSP_Stride(samplesPerPixel),
filter, &downSampledData,
vDSP_Length(downSampledLength),
vDSP_Length(samplesPerPixel))

readFile.points = downSampledData.map{CGFloat($0)}

编辑

录音实际上是在较早的时间从设备的麦克风录制的。在录音阶段应用过滤器可能更容易吗?

最佳答案

一种可能的方法是对采样文件应用离散傅立叶变换。傅里叶变换将音频数据从时域传输到频域。一旦你在频域中有了这些数据,你就可以简单地“剪掉”你不想拥有的频率,并对你减少的数据进行傅立叶逆变换,这样你就可以再次在时域中拥有它并继续你提到的代码。看看https://github.com/christopherhelf/Swift-FFT-Example ,它提供了如何处理快速和快速傅立叶变换 (FFT) 的示例代码。希望这能给你一个方向。

关于ios - 从 .m4a 数据中过滤频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47624197/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com