JAVA混音

两路short型混音 参考链接:https://blog.csdn.net/jeffasd/article/details/77335874

public static float[] mix_float(float[][] src_buffer, float[] buffer_mix) {
		//src_buffer 里面有两路流
        //归一化混音
        float MAX = 3.4028235E38f;
        float MIN = 1.4E-45f;
        double f = 1; //衰减因子
        float output;//归一化后输出
        for (int i = 0; i < src_buffer[0].length; i++) {
            float temp = 0;
            for (int j = 0; j < 2; j++) {
                temp += src_buffer[j][i];
            }
            output = (float) (temp * f);

            if (output > MAX) {
                f = (double) MAX / (double) (output);
                output = MAX;
            }
            if (output < MIN) {
                f = (double) MIN / (double) (output);
                output = MIN;
            }
            if (f < 1) {
                f += ((double) 1 - f) / (double) 16;
            }
            System.out.println(f);
            buffer_mix[i] = output;
        }
        return buffer_mix;

    }

上面方法对float型经过测试,不好使。
两路float型混音 参考链接:https://blog.csdn.net/TopsLuo/article/details/72769800

public static float[] mix_float2(float[][] src_buffer, float[] buffer_mix) {
        for (int i = 0; i < src_buffer[0].length; i++) {
            // A B代表两路流的对应值
            float A = src_buffer[0][i];
            float B = src_buffer[1][i];
            // C 代表混合后的结果
            float C;
            if (A < 0 && B < 0) {
                C = (float) (A + B - (A * B / -(Math.pow(2, 32 - 1) - 1)));
            } else {
                C = (float) (A + B - (A * B / (Math.pow(2, 32 - 1))));
            }
            C = C > 1 ? 1 : C;
            C = C < -1 ? -1 : C;
            buffer_mix[i] = C;

        }
        return buffer_mix;

    }
上一篇:Android高级架构师系统学习——Android-音频可视化,程序员怎样优雅度过35岁中年危机


下一篇:《Linux Device Drivers Development》——Chap 22 Network Interface Card Drivers