yuehai 发表于 2005-7-27

音频混音能实现什么

音频混音能实现什么
提取一个视频文件的音频轨道,和另一个事先准备好的 mp3 文件混音
场景类似于视频剪辑软件的混音操作,将原视频文件和配乐混音,生成新的音频
& 0xff 的意义

& 与运算,只有两者相同时,该位与的结果才为 1
0x 表示 16 进制,0xff 的二进制表示为 1111 1111
& 0xff 刚好是取当前字节的数值转为二进制,通常搭配移位运算一同服用

混音是怎么实现的

获取两个待混音的文件
使用 MediaExtractor 提取音频轨道
使用 MediaCodec 解码成 PCM 裸数据
对 PCM 的字节数据进行相加
生成新的音频文件

混音是基于 PCM 的基础上,在封装格式的文件无法直接进行音频剪辑、混音等操作
使用三个字节数组作为数据暂存区,分别对应着素材1,素材2和待合成的文件,这里又涉及到了不同声道数,量化位数的素材音频混音的兼容问题,需要重采样
取素材 1 和素材 2 对应的 pcm 数据进行相加,需要考虑到两个 short 类型的数相加后可能会超过 short 的范围,遇到这种情况时我们直接取 short 的边界
调整素材音频的音量大小时,可能会遇到丢失精度的问题
获取音频轨道后,怎样将数据送去解码
我们使用 MediaExtractor 获取轨道所在的位置后,通过遍历获取到指定的轨道,然后通过 MediaExtractor.readSampleData() 将轨道数据放到 Buffer 中,此时就需要 MediaCodec 解码了,当拿到空闲的 ByteBuffer 后,将 Buffer 中的数据放到 输入缓冲区中,然后 MediaExtractor 释放上一帧的压缩数据( MediaExtractor.advance() )
重采样

什么是重采样:改变音频文件原本的采样率的过程叫做重采样
Android 中什么时候需要音频重采样

在几个不同采样率的音频文件时,一次只能设置一个采样率,需要统一个值,并且可能不让其他音频失真

Alesis 发表于 2005-7-27

哈哈~~```````学习!

flstudio 发表于 2005-8-2

学习高原兵!
页: [1]
查看完整版本: 音频混音能实现什么