数年間オーディオアルゴリズムを研究した後、今日、java でステレオ幅アルゴリズム (音場アルゴリズム) を実装する方法を発表します. Width はステレオ幅係数です width < 1: 幅が減少します width = 1: 幅は変更されませ
ん
width
>
1 : 幅が増加する幅
= 0:
モノ値の基本的な範囲は 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;
これはステレオ幅の実装です。質問がある場合は、私に相談してください