Android 混合音频,评价算法

来源:互联网 发布:电影购票系统java 编辑:程序博客网 时间:2024/06/10 00:00

使用平均算法混合两路音频,两路音频必须采样率及单双声道都要相同。

//bMulRoadAudioes为数据源二位数组。public byte[] mixRawAudioBytes(byte[][] bMulRoadAudioes) {            if (bMulRoadAudioes == null || bMulRoadAudioes.length == 0)                return null;            byte[] realMixAudio = bMulRoadAudioes[0];            if(bMulRoadAudioes.length == 1)                return realMixAudio;            for(int rw = 0 ; rw < bMulRoadAudioes.length ; ++rw){                if(bMulRoadAudioes[rw].length != realMixAudio.length){                    Log.e("app", "column of the road of audio + " + rw +" is diffrent.");                    return null;                }            }            int row = bMulRoadAudioes.length;            int coloum = realMixAudio.length / 2;            short[][] sMulRoadAudioes = new short[row][coloum];            for (int r = 0; r < row; ++r) {                for (int c = 0; c < coloum; ++c) {                    sMulRoadAudioes[r][c] = (short) ((bMulRoadAudioes[r][c * 2] & 0xff) | (bMulRoadAudioes[r][c * 2 + 1] & 0xff) << 8);                }            }            short[] sMixAudio = new short[coloum];            int mixVal;            int sr = 0;            for (int sc = 0; sc < coloum; ++sc) {                mixVal = 0;                sr = 0;                for (; sr < row; ++sr) {                    mixVal += sMulRoadAudioes[sr][sc];                }                sMixAudio[sc] = (short) (mixVal / row);            }            for (sr = 0; sr < coloum; ++sr) {                realMixAudio[sr * 2] = (byte) (sMixAudio[sr] & 0x00FF);                realMixAudio[sr * 2 + 1] = (byte) ((sMixAudio[sr] & 0xFF00) >> 8);            }            return realMixAudio;        }
原创粉丝点击