news 2026/6/15 16:32:11

ALSA基础知识总结

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ALSA基础知识总结

1. ALSA主要流程

  1. 创建snd_card的实例

  2. 初始化snd_card的成员变量

  3. 创建声卡的逻辑设备,例如PCM、Control

  4. 向系统注册snd_card

2. PCM逻辑设备

2.1 PCM设备的主要功能

  • playback:将用户程序发来的PCM数据进行D/A转换

  • capture: 将麦克风或其他输入源的模拟型号进行A/D转换

2.2 snd_card与pcm关系

  • 一个snd_card实例可以包含多个pcm实例

  • 一个pcm实例有一个playback流和一个cpature流组成

  • playback流由一个或则多个substreams组成

  • capture流由一个或则多个substreams组成

2.3 snd_pcm结构体

2.3.1 snd_pcm结构体:

structsnd_pcm{structsnd_card*card;//所属声卡structlist_healist;intdevice;/* pcm设备的编号 */...charid[64];charname[80];//streams[0]为playback(播放)//streams[1]为capture(录音)structsnd_pcm_strstreams[2];...};

2.3.2 snd_pcm_str的结构体

structsnd_pcm_str{/* 0为playback,1为capture */intstream;structsnd_pcm*pcm;/* -- substreams -- */unsignedintsubstream_count;//substreams的个数unsignedintsubstream_opened;structsnd_pcm_substream*substream;//子流...structdevicedev;};

2.3.3 snd_pcm_substream的结构体

structsnd_pcm_substream{structsnd_pcm*pcm;structsnd_pcm_str*pstr;void*private_data;/* copied from pcm->private_data */intnumber;/* 子流编号 */charname[32];/* substream name */intstream;/* stream (direction) */size_tbuffer_bytes_max;/* limit ring buffer size */structsnd_dma_bufferdma_buffer;size_tdma_max;/* 由具体驱动设置ops */conststructsnd_pcm_ops*ops;/* pcm设备运行时的信息 */structsnd_pcm_runtime*runtime;...structsnd_pcm_substream*next;// 指向下一个子流};
  • 其中的ops字段用于操作对应的设备,它可以由驱动程序调用snd_pcm_set_ops()函数来设置

  • runtime字段用于记录重要的软件和硬件运行环境和参数

2.3.4 snd_pcm挂到snd_card下

pcm注册时,会得到一个次设备号,根据这个次设备号,记录到对应的snd_minor数组中。

操作函数替换的主要逻辑如下伪代码所示:

unsignedintminor=iminor(inode);structsnd_minor*mptr=NULL;conststructfile_operations*new_fops;if(minor>=ARAY_SIZE(snd_minors))return-ENODEV;//以次设备号为下标在snd_minors数组中找到对应的snd_minormptr=snd_minors[minor];...//从snd_minor得到file_operationsnew_fops=fops_get(mptr->f_ops);...//替换原来的file_operationsreplace_fops(file,new_fops);if(file->f_op->open)err=file->f_op->open(inode,file);

整个过程就是,声卡驱动程序会注册声卡(这只是一个实例,相当于虚拟的设备?用于连接各逻辑设备),然后将对应的pcm设备等的ops设置好。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 11:47:07

JAVA打造:上门洗车+服务APP一站式源码

以下是一套基于 JAVA 的「上门洗车服务APP一站式源码」方案,整合微服务架构、物联网控制、AI智能调度、多端适配四大核心能力,覆盖从用户预约到服务完成的全流程自动化,支持洗车、保养、美容、维修等多元服务场景:一、技术架构&am…

作者头像 李华
网站建设 2026/6/15 11:43:15

为什么你的VSCode越用越卡?,深入解析加载机制与修复方案

第一章:为什么你的VSCode越用越卡? Visual Studio Code 以其轻量、灵活和强大的扩展生态广受开发者喜爱,但随着使用时间增长,不少用户发现编辑器响应变慢、启动延迟、甚至频繁卡顿。这通常并非软件本身缺陷,而是配置与…

作者头像 李华
网站建设 2026/6/13 9:09:25

MOOTDX量化工具:5分钟快速上手金融数据采集的完整指南

MOOTDX量化工具:5分钟快速上手金融数据采集的完整指南 【免费下载链接】mootdx 通达信数据读取的一个简便使用封装 项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx MOOTDX作为通达信数据接口的Python专业封装,为量化投资者提供了高效稳…

作者头像 李华
网站建设 2026/6/15 11:42:40

企业开发者注意!不及时集成Entra ID,你的VSCode可能已存在安全隐患

第一章:企业开发者注意!不及时集成Entra ID,你的VSCode可能已存在安全隐患为何VSCode需要身份安全加固 现代开发环境中,Visual Studio Code 已成为企业级应用开发的核心工具。然而,许多团队忽视了其身份认证机制的薄弱…

作者头像 李华
网站建设 2026/6/15 11:51:19

软件测试基础篇详解

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快1、软件测试的生命周期回顾:需求分析、计划、设计、编码、测试、运行维护软件测试的生命周期: 需求分析→测试计划→ 测试设计→ 测试开发→…

作者头像 李华
网站建设 2026/6/15 12:54:24

BEM命名规范难坚持?VibeThinker自动输出合规类名

BEM命名规范难坚持?VibeThinker自动输出合规类名 在现代前端项目中,一个看似微不足道的问题却常常引发连锁反应:CSS 类名命名不一致。 你有没有遇到过这样的场景?团队里三人写同一个页面,button 的变体分别被命名为 bt…

作者头像 李华