数字音频输出,数字音频输出pcm
PCM是脉冲编码调制(Pulse-code modulation)的英文缩写。在现实生活中,人耳听到的声音是模拟信号,PCM技术则是将这种模拟信号转换成数字信号的一种技术。
图1.1展示了模拟音频的采样和量化过程,这是数字音频产生的重要步骤。
PCM信号的两个关键指标是采样频率和量化精度。例如,CD音频的采样频率为44100Hz,量化精度为16bit。在音频处理中,应用程序从存储介质中读取或写入PCM数据,而音频驱动则负责采样和量化等任务。
- playback是指将PCM数据转化为人耳可以辨别的模拟音频。
- capture则是将麦克风拾取的模拟信号进行采样、量化,转换为PCM信号。
ALSA(Advanced Linux Sound Architecture)为我们提供了强大的PCM中间层,我们只需实现底层的硬件访问函数即可。
要访问PCM的中间层代码,需要包含特定的头文件,如<sound/pcm.h>和<sound/pcm_params.h>。
每个声卡最多可以包含四个pcm实例,但大多数嵌入式设备中,一个pcm实例就已经足够了。一个pcm实例由一个playback stream和一个capture stream组成,这两个stream又分别由一个或多个substreams组成。
图2.1和图2.2用图形的方式展示了声卡中的pcm结构和pcm中间层几个重要的结构的关系。
新建pcm的步骤包括创建声卡、调用api创建pcm、设置pcm操作函数接口等。在声卡的注册阶段,会建立与用户空间应用程序通信所用的设备文件节点。
每个snd_minor结构体保存了声卡下某个逻辑设备的上下文信息。在sound.c文件中定义了一个snd_minor指针的全局数组。当注册pcm设备时,会调用回调函数并创建设备文件节点。
设备文件的命名规则是playback为pcmCxDxp,capture为pcmCxDxc。snd_pcm_f_ops是一个标准的文件系统file_operations结构数组,它定义了文件操作的行为。
当应用程序打开pcm设备时,会进入snd_fops的open回调函数。这个过程中,会取出pcm设备的f_ops并替换file->f_op,然后直接调用pcm设备的f_ops->open()。这样,以后的所有操作都会进入pcm设备自己的回调函数中。
免费分享音视频学习资源:
提供一个【免费】的音视频流媒体高级开发学习地址,包括FFmpeg、WebRTC、RTMP、NDK等相关内容。感兴趣的话可以前往腾讯课堂进行学习。