前言
- 最近一直在折腾音频相关的东西,其实主要分为两大块:播放与录音
- 由于之前【音频】的基础过于薄弱,走了很多的弯路,尝试了很多方法,当然通过实践,也积累了很多的音频开发的调试经验
- 基本调通了基于RT-Thread Audio 框架的播放与录音,开始整理思路总结一下
开发环境
- 硬件 1: ART-Pi 开发板 + 多媒体板
- 硬件 2:Pandora STM32L475 开发板
- 开发IDE:Keil MDK 5.30
- 开发IDE2:RT-Thread Studio
- 耳机,用于测试音频的播放与录音(MIC)
- 音箱:选配,用于测试高质量音频的播放
基本的知识
- 音频格式,平时接触的往往是mp3格式的,要么就是音视频一起的,如mp4,mp3与mp4,都属于压缩编码后的音文件格式,一般的音频原始数据格式为:WAV,这里的wav 可以理解为:
WAVE sound file
的英文缩写,或者干脆就称之为:WAVE
格式 - 音频编码:mp3,mp4,m4a,aac,m3u8等,原始的 wav,都属于音频的编码
- 存储方式:音频流数据一般使用【文件】来保存
- 网络音频流,一般可以通过网络,把音频流不断的分片拉取到本地,暂时放在内存缓存buffer中,然后像【串口数据】一样,传输到【音频编解码芯片Codec】,Codec负责音频的播放,也负责【音频采样】,也就是【录音】
控制方式
- 播放音频:开启播放、暂停播放、恢复播放、停止播放等,音频播放的参数,可以通过解析【音频文件】获取
- 录音:开启录音、暂停录音【可选】、恢复录音【可选】、停止录音等,录音时,需要配置录音的参数到【Codec 编解码】芯片
samplerate 采样率
- 这个就是音频的采样速率,如常见的44.1KHz
channels 采样通道数
- 一般是 1 或者2,单个通道采样或者 两个通道采样
samplebits 采样位数
- 一次采样时,数据占多少位,如8位、16位、24位,或者32位,类似于常见的AD采样的分辨率,MIC 录音,原理上就是不断的把声音(模拟)转换成数字信号的过程,采样位数决定采样的【精度】,位数越高,音质越好,音频数据越大(相同时间)
音频架构
- MCU,如STM32,一般有 SAI、I2S 接口,对接音频Codec 芯片,音频的Codec芯片,一般使用I2C、SPI等通信, Codec芯片的型号,如:wm8978、WM8988、ES8388等
- 音频的播放与录音管理,需要一套控制传输组件,如RT-Thread Audio框架
- 音频需要存储的介质:如SD卡
- 音频需要应用逻辑:如保存文件、使用网络播放
- 音频需要【软件编解码】库,提供MP3、aac等压缩音频格式的音频播放
小结
- 音频的基础知识、编解码知识还是博大精深的,需要不断的总结与积累
- 想要快速入门音频的嵌入式开发,需要具备基本的概念,这样才能提高开发的效率
- 需要要测试与调试的【硬件】,快速搭建调试环境,动手才能加深对技术的理解与掌握