声音到 3 个主要频率(低、中、高)
Posted
技术标签:
【中文标题】声音到 3 个主要频率(低、中、高)【英文标题】:Sound to 3 main frequencies(low, mid, high) 【发布时间】:2013-03-19 00:38:15 【问题描述】:我进行了一些研究,但找不到我真正想要的东西。目前,我必须通过 com 端口发送通道值。
例如:
文件freqs.ini
的内容
然后我将按百分比获取值
期望值
lowPercent = 10;
midPercent = 77;
highPercent = 53;
所以,我将能够通过 rs232 发送这些值,我的房间将变成俱乐部 :)
(我正在使用此代码来照亮 LED 灯条)。我找到了一些频谱分析仪项目,但它们都有 9 个通道,即从 low-low 到 high-high 的 3*3 组合。
我知道如何与 com 端口通信,但是 我如何 获得我之前设置的 3 个频率范围的整数值?
【问题讨论】:
您的问题并不完全清楚,但是如果您有将音频分成 9 个频段的代码,为什么不简单地将各个频段的结果相加得到三个呢?低 = a1 + a2 + a3,中 = a4 + a5 + a6,高 = a7 + a8 + a9; 我将输入一个频率范围,我的程序会给我一些值。我是 DJ,我在家里有一个 dj 设置。我有 3 个带状 LED。混音器有 3 个主频率旋钮。我希望我的 LED 根据音频通道进行操作。例如,当我将 low 旋钮转到 0 时,我的第一个条状 LED 不会亮,因为不会有任何低频音频。所以,我需要得到音频的实时值 也许你应该读读这个问题:***.com/questions/1794010/… 我确定在 C# 中有一个用于音频过滤的库。如果没有,你可以写一个:blog.bjornroche.com/2012/08/basic-audio-eqs.html 我已经阅读了所有内容,但找不到任何帮助:( 【参考方案1】:我不知道你是否还需要那个,但是......
您想知道如何获得声音的实时频谱分析吗?
1.实现一个队列来获取音频样本的缓冲区
2.将缓冲区与您的程序计算的正确window function(通常是汉明或汉恩)的乘积作为浮点数组
3. 对 yelded 数组进行 FFT:每种语言都可能有算法......找到最适合您的算法,使用它并从每个输出系数中获取平方模块(Real_part^2 + Imaginary_part^2 ,如果 FFT 返回系数的代数表示)
对您的频段的系数求和:要知道与频率相关的系数,您只需知道第 k 个系数位于 (SampFrequency/BufferLength)*k Hz.....so很容易找到波段边界
如果您需要在 [0 , 1] 区间内进行归一化,您只需将 3 个带状带值中的每一个除以 3 个之间的最大值即可
按 Shift
来自 FFT alg 的系数数量等于 BufferLength(这是因为离散傅里叶变换定义),因此,当您选择长缓冲区时,频率分辨率更好,但程序运行速度较慢。在 BufferLength 音频帧之后,光强度不会变化,在 Shift 音频帧之后会出现 buf ......并且高比率 beetwen BufferLength 会给你缓慢的光线变化......所以你必须选择适合你的愿望的参数,记住你刚刚打开和关闭一些灯....让您的算法快速和低保真!
最后要做的是从混音器的 eq 旋钮中发现频段....我不记得这些信息是否在混音器手册上
【讨论】:
以上是关于声音到 3 个主要频率(低、中、高)的主要内容,如果未能解决你的问题,请参考以下文章
WebRTC Native M96音频基础知识介绍--使用Opus
WebRTC Native M96音频基础知识介绍--使用Opus