https://www.jianshu.com/p/b006e9e9caa6
A/D转换(模数转换,将模拟数据转换为数字数据):音频以重采样的形式将连续波形数据转换成离散数据存放。
相关概念:
1、采样频率: //其倒数是采样周期
22k Hz 无限广播所用的采样率
44.1k Hz CD音质
48k Hz 数字电视,DVD
96k Hz 192k Hz 蓝光盘,高清DVD
2、采样精度 采集到的点被称为样本(sample),每个样本占用的位数就是采样精度。这点和图像的像素表示比较类似,
可以使用8bit,16bit或者24bit来表示采集到的一个样本。同样,一个样本占用的空间越大其表示的就越接近真实的声音。
3、通道 支持不同发声的音响的个数。
不同的声道在采样的时候是不同的,例如双声道,在每次采样的时候有采集两个样本点
单声道
双声道
4声道
5.1声道等。
4、比特率:每秒传送的比特(bit)数,其单位是bps(Bit Per Second),是间接衡量声音质量的一个标准。
1、未压缩的编码音频数据👉比特率 = 采样频率 * 采样精度 * 通道数
2、压缩后的编码音频数据的比特率叫👉码率,因为其反映了压缩编码的效率。
码率 = 音频文件的大小 / 时长
常见的一些码率:
96 Kbps FM质量
128 - 160 Kbps 比较好的音频质量
192Kbps CD质量
256Kbps 320Kbps 高质量音频
2、SDL2播放音频
2.1 结构体SDL_AudioSpec
SDL中的结构体SDL_AudioSpec包含了关于音频的格式信息(采样率,通道数,采样精度)和回调函数以及用户数据指针,其声明如下:
typedef struct SDL_AudioSpec
{
int freq; /**< DSP frequency -- samples per second */
每秒钟发送给音频设备的sample frame的个数,通常是11025,220502,44100和48000。(sample frame = 样本精度 * 通道数)
SDL_AudioFormat format; /**< Audio data format */
每个样本占用的空间大小及格式,例如 AUDIO_S16SYS,样本是有符号的16位整数,字节顺序(大端还是小端)和系统一样。更多的格式可参考SDL_AudioFormat。
Uint8 channels; /**< Number of channels: 1 mono, 2 stereo */
通道数,在SDL2.0中支持1(mono),2(stereo),4(quad)和6(5.1)
Uint8 silence; /**< Audio buffer silence value (calculated) */
音频数据中表示静音的值是多少
Uint16 samples; /**< Audio buffer size in samples (power of 2) */
缓冲区的大小( sample frame为单位)。
Uint16 padding; /**< Necessary for some compile environments */
Uint32 size; /**< Audio buffer size in bytes (calculated) */
缓冲区的大小(字节为单位)
SDL_AudioCallback callback; /**< Callback that feeds the audio device (NULL to use SDL_QueueAudio()). */
用来音频设备缓冲区的回调函数
void *userdata; /**< Userdata passed to callback (ignored for NULL callbacks). */
在回调函数中使用的数据指针
} SDL_AudioSpe