音频编码
-
WAV编码
是在PCM数据格式的前面加44个字节,分别用来存储PCM的采样率、声道数、数据格式等信息
特点:音质好,大量软件支持
场景:多媒体开发中间文件、保存音乐和音效素材 -
MP3编码
使用LAME编码(MP3编码格式的一种实现)中高码率的MP3文件,听感接近WAV文件。
特点:音质128Kbit/s 压缩比比较高,大量软件和硬件支持,兼容性好
场景:高比特率下对兼容性有要求。 -
AAC编码
新一代音频有损压缩技术,附加的编码技术(PS、SBR)等,衍生出LC-AAC、HE-AAC、HE-AAC v2三种主要编码格式。
特点:在小于128Kbit/s码率表现优异,多用于视频中音频编码
场景:128Kbit/s一下的音频编码,多用于视频音频轨的编码。 -
Ogg编码
潜力编码,音质好,完全免费。支持情况不好,无法和MP3相比。
特点:比MP3更小的码率实现比MP3更好的音质,兼容性不好,流媒体特性不支持
场景:语言聊天音频消息场景
Android平台音频渲染
AudioTrack
是Android SDK提供最底层音频播放API,允许输入裸数据PCM。和MediaPlayer相比,压缩的音频文件(MP3、AAC等),只需要自行解码操作和缓冲区控制。
1、配置AudioTrack
public AudioTrack(int streamType, int sampleRateInHz, int channelConfig, int audioFormat,
int bufferSizeInBytes, int mode)
streamType:多种音频管理策略,定义在AudioManager中
/**电话铃声 */
public static final int STREAM_VOICE_CALL = AudioSystem.STREAM_VOICE_CALL;
/** 系统铃声 */
public static final int STREAM_SYSTEM = AudioSystem.STREAM_SYSTEM;
/** 铃声*/
public static final int STREAM_RING = AudioSystem.STREAM_RING;
/** 音乐声 */
public static final int STREAM_MUSIC = AudioSystem.STREAM_MUSIC;
/** 警告声 */
public static final int STREAM_ALARM = AudioSystem.STREAM_ALARM;
/** 通知声 */
public static final int STREAM_NOTIFICATION = AudioSystem.STREAM_NOTIFICATION;
sampleRateInHz:采样率,可选:8000, 16000, 22050, 24000, 32000, 44100, 48000等。
channelConfig:声道数的配置,常量在AudioFormat中,CHANNEL_IN_MONO(单声道)、CHANNEL_IN_STEREO(双声道), 建议采用单声道。
audioFormat:数据位宽,即采样格式,常量定义在AudioFormat中,ENCODING_PCM_16BIT(兼容所有手机)、ENCODING_PCM_8BIT
bufferSizeInBytes:配置内部音频缓冲区大小,AudioTrack提供bufferSizeInBytes函数 getMinBufferSize,建议该函数计算大小,不要手动计算。
mode:AudioTrack提供两种播放模式,在AudioTrack中定义MODE_STATIC,需要一次性写入缓冲区,简单高效,用于播放铃声、系统提醒音频片段;另一个MODE_STREAM,需要按照一定时间间隔不断写入音频数据,理论可以应用任何音频播放场景。
Play:
//当前播放实例是否初始化成功,如果处于初始化成功的状态并且未播放的状态,那么就调用 play
if (null != mAudioTrack && mAudioTrack.getState() != AudioTrack.STATE_UNINITIALIZED && mAudioTrack.getPlayState() != PLAYSTATE_PLAYING)
mAudioTrack.play();
OpenSL ES使用
Open Sound Library for Embedded System 嵌入式音频加速标准。
是无授权、跨平台、针对嵌入式硬件音频加速API,提供标准、高性能、低响应时间音频功能实现方法,实现了软/硬音频性能的直接跨平台部署,降低执行标准,促进高音频市场发展。
image.png
总结
一些基础知识和AudioTrack以及OpenSL ES渲染裸流音频数据。
网友评论