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

概述

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

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

话不多说,直接上算法

  1. 计算缩放比例系数
// scale coefficient
float coef_S = width * 0.5f;
  1. 然后根据每个样本再做计算
// 然后根据每个样本再做计算
float m = (left  + right) * 0.5f;
float s = (right - left ) * coef_S;
  1. 得到宽度变换后的值
//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数字音频最强教程之立体声宽度算法(声场算法)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部