音频混音是什么

音频混音能实现什么

提取一个视频文件的音频轨道,和另一个事先准备好的 mp3 文件混音

场景类似于视频剪辑软件的混音操作,将原视频文件和配乐混音,生成新的音频

& 0xff 的意义

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

混音是怎么实现的

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

混音是基于 PCM 的基础上,在封装格式的文件无法直接进行音频剪辑、混音等操作

使用三个字节数组作为数据暂存区,分别对应着素材1,素材2和待合成的文件,这里又涉及到了不同声道数,量化位数的素材音频混音的兼容问题,需要重采样

取素材 1 和素材 2 对应的 pcm 数据进行相加,需要考虑到两个 short 类型的数相加后可能会超过 short 的范围,遇到这种情况时我们直接取 short 的边界

调整素材音频的音量大小时,可能会遇到丢失精度的问题

获取音频轨道后,怎样将数据送去解码

我们使用 MediaExtractor 获取轨道所在的位置后,通过遍历获取到指定的轨道,然后通过 MediaExtractor.readSampleData() 将轨道数据放到 Buffer 中,此时就需要 MediaCodec 解码了,当拿到空闲的 ByteBuffer 后,将 Buffer 中的数据放到 输入缓冲区中,然后 MediaExtractor 释放上一帧的压缩数据( MediaExtractor.advance() )

重采样

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

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

ANDROID音频系统散记之五:如何绕开多媒体音轨的重采样

  • android 著名的 src 问题

相关链接

  • 详解 & 0xff 的作用

你可能感兴趣的:(音频混音是什么)