概述
研究了好几年的音频算法,今天先公布一个用java怎么实现立体声宽度算法(声场算法)
width 是立体声宽度系数
width < 1: 宽度减小
width = 1: 宽度不变
width > 1: 宽度增加
width = 0: mono
取值基本范围0-2
立体声宽度计算是怎么实现计算的(通过变换矩阵获得)
话不多说,直接上算法
- 计算缩放比例系数
// scale coefficient
float coef_S = width * 0.5f;
- 然后根据每个样本再做计算
// 然后根据每个样本再做计算
float m = (left + right) * 0.5f;
float s = (right - left ) * coef_S;
- 得到宽度变换后的值
//left
sam[0] = m - s;
//right
sam[1] = m + s;
全部代码如下
public static float[] stereoWidthProcess(float left, float right) {
float[] sam = new float[2];
// 计算缩放比例系数
float coef_S = width * 0.5f;
// 然后根据每个样本再做计算
float m = (left + right) * 0.5f;
float s = (right - left ) * coef_S;
sam[0] = m - s;
sam[1] = m + s;
return sam;
}
下面提供另一个不完美的算法
一开始我用下面这个,不补偿会有6分贝的提升,导致破音,干脆使用上面的算法
// calc coefs
tmp = 1/max(1 + width,2);
coef_M = 1 * tmp;
coef_S = width * tmp;
// then do this per sample
m = (in_left + in_right)*coef_M;
s = (in_right - in_left )*coef_S;
out_left = m - s;
out_right = m + s;
//做增益/失真补偿
out_left /= 0.5 + coef_S;
out_right /= 0.5 + coef_S;
这就是立体声宽度实现,有问题可以咨询我
最后
以上就是顺利丝袜为你收集整理的java数字音频最强教程之立体声宽度算法(声场算法)的全部内容,希望文章能够帮你解决java数字音频最强教程之立体声宽度算法(声场算法)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复