美文网首页
音频混音处理

音频混音处理

作者: 梅芳姑 | 来源:发表于2020-12-14 14:03 被阅读0次

统一通道数和采样率

参考文章 详解如何使用代码进行音频合成
不过,上面给的代码中也有不对的地方(应该是采样点字节数那里),不能全抄。

混音算法

  /**
     * 按音量权值进行混音算法
     */

    private static class WeightAudioMixer extends MultiAudioMixer {
        float weight[];

        public WeightAudioMixer(float[] weight) {
            this.weight = weight;
        }

        @Override
       public byte[] mixRawAudioBytes(byte[][] bMulRoadAudioes) {

            if (bMulRoadAudioes == null || bMulRoadAudioes.length == 0)
                return null;

            byte[] realMixAudio = bMulRoadAudioes[0];

            if (bMulRoadAudioes.length == 1) {
                DLog.i("MultiAudioMixer", "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);
                    //todo
//                    if(r==0){
//                        sMulRoadAudioes[r][c]=(short) (sMulRoadAudioes[r][c]*firstweight);
//                    }else  if(r==1){
//                        sMulRoadAudioes[r][c]=(short) (sMulRoadAudioes[r][c]*secondweight);
//                    }
                }
            }

            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];
                    mixVal += sMulRoadAudioes[sr][sc] * weight[sr];
                    DLog.i("MultiAudioMixer", "sMulRoadAudioes:" + sMulRoadAudioes[sr][sc] + "weight[" + sr + "]:" + weight[sr]);

                }
//                sMixAudio[sc] = (short) (mixVal / row);
                sMixAudio[sc] = (short) (mixVal);
            }

            for (sr = 0; sr < coloum; ++sr) {
                realMixAudio[sr * 2] = (byte) (sMixAudio[sr] & 0x00FF);
                realMixAudio[sr * 2 + 1] = (byte) ((sMixAudio[sr] & 0xFF00) >> 8);
            }

            return realMixAudio;
        }

    }

配合上面那篇文章作者的demo :https://github.com/CrazyZty/ComposeAudio,基本可以实现背景音乐和视频原声音按音量混合的功能了

相关文章

  • 音频混音处理

    统一通道数和采样率 参考文章 详解如何使用代码进行音频合成[https://www.cnblogs.com/zty...

  • 音频基础

    音频开发的具体内容有:(1)音频采集/播放(2)音频算法处理(去噪、静音检测、回声消除、音效处理、功放/增强、混音...

  • iZotope Insight 2 for Mac(音频分析以及

    izotope insight mac破解版提供了一套完整的音频分析以及母带工具,可以进行混音和母带处理,解决混音...

  • 如何在Final Cut Pro X mac版中找到您加载的Wa

    Waves Complete for Mac是一款功能强大的音频混音处理工具,提供世界上最大的专业音频插件选择。从...

  • WebRTC音频引擎实现分析

    WebRTC的音频引擎作为两大基础多媒体引擎之一,实现了音频数据的采集、前处理、编码、发送、接收、解码、混音、后处...

  • Android音视频处理之音频混音

    数字音频基本概念 在实现功能之前,我们先来了解一下数字音频的有关属性: 采样频率(Sample Rate):每秒采...

  • ffmpeg 音频合成、混音

    需求:背景音乐15s,中间会插入多条1s的音乐片段 ffmpeg命令: ffmpeg -i ./static/mp...

  • 音频混音是什么

    音频混音能实现什么 提取一个视频文件的音频轨道,和另一个事先准备好的 mp3 文件混音 场景类似于视频剪辑软件的混...

  • Waves Complete 11 for Mac(音频信号处理

    Waves Complete for Mac是一款功能强大的音频混音处理工具,业内最流行的均衡器,压缩器和限制器到...

  • VoiceMeeter简单使用,电脑连接多台音响

    一、VoiceMeeter是什么? Voicemeeter 官方称之是虚拟音频混音器,但是它的功能远不止一个混音器...

网友评论

      本文标题:音频混音处理

      本文链接:https://www.haomeiwen.com/subject/tcevgktx.html