我是靠谱客的博主 顺利丝袜,这篇文章主要介绍java数字音频最强教程之立体声宽度算法(声场算法),现在分享给大家,希望可以做个参考。

研究了好几年的音频算法,今天先公布一个用java怎么实现立体声宽度算法(声场算法)
width 是立体声宽度系数
width < 1: 宽度减小
width = 1: 宽度不变
width > 1: 宽度增加
width = 0: mono
取值基本范围0-2

立体声宽度计算是怎么实现计算的(通过变换矩阵获得)

话不多说,直接上算法

  1. 计算缩放比例系数
复制代码
1
2
3
// scale coefficient float coef_S = width * 0.5f;
  1. 然后根据每个样本再做计算
复制代码
1
2
3
4
// 然后根据每个样本再做计算 float m = (left + right) * 0.5f; float s = (right - left ) * coef_S;
  1. 得到宽度变换后的值
复制代码
1
2
3
4
5
//left sam[0] = m - s; //right sam[1] = m + s;

全部代码如下

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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分贝的提升,导致破音,干脆使用上面的算法

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 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数字音频最强教程之立体声宽度算法(声场算法)内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(87)

评论列表共有 0 条评论

立即
投稿
返回
顶部