音频开发中常见的知识体系

news2024/12/21 12:52:59

        在 Linux 系统中,/dev/snd 目录包含与声音设备相关的文件。每个文件代表系统中的一部分音频硬件或音频控制接口。以下是你列出的文件及其含义:

一.基本术语

        样本长度(sample):样本是记录音频数据最基本的单位,计算机对每个通道采样量化时数字比特位数,常见的有8位和16位。

        通道数(channel):该参数为1表示单声道,2则是立体声。帧(frame):帧记录了一个声音单元,其长度为样本长度与通道数的乘积,一段音频数据就是由苦干帧组成的。

        采样率(rate):每秒钟采样次数,该次数是针对帧而言,常用的采样率如8KHz的人声, 44.1KHz的mp3音乐, 96Khz的蓝光音频。

        周期(period):音频设备一次处理所需要的桢数,对于音频设备的数据访问以及音频数据的存储,都是以此为单位。

        交错模式(interleaved):是一种音频数据的记录方式。在交错模式下,数据以连续桢的形式存放,即首先记录完桢1的左声道样本和右声道样本(假设为立体声格式),再开始桢2的记录。而在非交错模式下,首先记录的是一个周期内所有桢的左声道样本,再记录右声道样本,数据是以连续通道的方式存储。不过多数情况下,我们只需要使用交错模式就可以了。

        period(周期): 硬件中中断间的间隔时间。它表示输入延时。

        比特率(Bits Per Second):比特率表示每秒的比特数,比特率=采样率×通道数×样本长度

二.ALSA的API构成

ALSA API可以分解成以下几个主要的接口:

        控制接口:提供管理声卡注册和请求可用设备的通用功能

        PCM接口:管理数字音频回放(playback)和录音(capture)的接口。本文后续总结重点放在这个接口上,因为它是开发数字音频程序最常用到的接口。

        Raw MIDI接口:支持MIDI(Musical Instrument Digital Interface),标准的电子乐器。这些API提供对声卡上MIDI总线的访问。这个原始接口基于MIDI事件工作,由程序员负责管理协议以及时间处理。

        定时器(Timer)接口:为同步音频事件提供对声卡上时间处理硬件的访问。

        时序器(Sequencer)接口混音器(Mixer)接口 

三.by-path/

        这个目录包含了音频设备的路径符号链接。它为每个音频设备创建了一个表示设备连接方式的符号链接,通常用于区分设备的物理位置,如与 USB、PCI、或者其他硬件接口的关系。

四.ALSA设备文件结构

        我们从alsa在linux中的设备文件结构开始我们的alsa之旅. 看看我的电脑中的alsa驱动的设备文件结构:

   controlC0, controlC1, controlC7, 等:这些文件是音频控制设备的接口。C0C1C7 等代表不同的声卡或音频设备编号。通过这些控制文件,你可以调整音量、选择音频源、设置静音等音频硬件的操作。

  • controlC0 是音频设备 0 的控制接口。
  • controlC1 是音频设备 1 的控制接口。
  • controlC7 是音频设备 7 的控制接口。
  1. pcmC0D0c, pcmC0D0p, pcmC1D0p, 等:这些文件是 PCM(脉冲编码调制)设备的接口,主要用于音频数据的播放和录制。

    • pcmC0D0cpcmC0D0p 分别是音频设备 0 上的输入和输出 PCM 接口。c 代表 capture(录音输入),p 代表 playback(播放输出)。
    • pcmC1D0p 是音频设备 1 的播放接口,pcmC7D0ppcmC7D1p 是音频设备 7 上的播放接口。
  2. timer:这个文件用于音频定时器的接口。在多媒体系统中,定时器用于同步音频播放、录制等任务。它管理音频设备的时间相关操作,确保音频数据流的正确时序。

        总结来说,/dev/snd 目录下的这些文件是 Linux 系统与声音硬件交互的接口,允许你进行音频的播放、录制以及控制。你可以通过这些文件进行音量控制、选择音频输入输出设备、以及管理音频流的定时等操作。

 五.音频设备信息

        你可以使用 catarecord, aplay 等工具来查看音频设备的详细信息。这会列出所有音频设备的列表,包括它们的卡号、名称以及其他详细信息。

cat  /proc/asound/cards

      

   使用 aplay 查看音频输出设备:

 aplay -l

        通过 aplay -l 命令列出的输出显示了系统中的所有音频播放硬件设备。每个设备都被分配了一个 卡号(card) 和一个 设备号(device),以及它们的 子设备(subdevices),这些信息用于描述设备的功能和音频流的配置。

 card 0: rockchiprk3308v [rockchip,rk3308-vad], device 0: dailink-multicodecs multicodec-0 [] Subdevices: 0/1 Subdevice #0: subdevice #0

  • card 0:这代表第 0 张声卡,名称是 rockchiprk3308v,它是 Rockchip RK3308 的音频设备。
  • device 0:这是第 0 个音频设备,名称为 dailink-multicodecs。该设备支持多种音频编解码(multicodec)。
  • Subdevices: 0/1:表示该设备支持的子设备数量。在此,只有一个子设备,且它当前不可用(0/1,表示有 1 个子设备但没有被使用)。
  • Subdevice #0:这是子设备的标识符,它是播放音频流的实体。

card 1: UAC1Gadget [UAC1_Gadget], device 0: UAC1_PCM [UAC1_PCM]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

  • card 1:这是第 1 张声卡,设备名为 UAC1Gadget,它是一个 USB 音频设备,通常用于 UAC(USB Audio Class)设备。
  • device 0:这是第 0 个设备,名为 UAC1_PCM,表示这是一个用于音频播放的设备。
  • Subdevices: 1/1:该设备只有一个子设备,并且该子设备当前可用(1/1)。
  • Subdevice #0:这是子设备的标识符,表示该设备当前可以用来播放音频流。

card 7: Loopback [Loopback], device 0: Loopback PCM [Loopback PCM]
  Subdevices: 8/8
  Subdevice #0: subdevice #0
  Subdevice #1: subdevice #1
  Subdevice #2: subdevice #2
  Subdevice #3: subdevice #3
  Subdevice #4: subdevice #4
  Subdevice #5: subdevice #5
  Subdevice #6: subdevice #6
  Subdevice #7: subdevice #7
 

子设备的意义

  • Subdevices:每个音频设备可以有多个子设备。子设备用于处理实际的音频流。
    • 在播放音频时,子设备用于标识具体的音频输出通道。
    • 如果一个设备具有多个子设备,它可以同时处理多个音频流,每个子设备对应一个独立的音频输出。
    • 比如,Loopback 设备通常用于将音频信号从一个设备“捕获”并“播放”到同一设备的不同子设备上。这样可以进行音频信号的循环传输。

   使用 arecord 查看音频输入设备:

 arecord -l

         在 ALSA 中,设备标识符如 hw:0,0 代表的是第一个声卡(hw:0)的第一个设备(0)。在此基础上,你还可能遇到更多类似的标识符,例如 hw:0,1hw:1,0 等,这些代表了系统中的其他设备和声卡。每个设备对应系统中的一个音频接口或硬件设备。为了查找更多与 hw:0,0 类似的设备,你可以使用以下方法进行详细检查。

  • card 0: Rockchip [Rockchip Audio] 表示声卡 0(hw:0)是一个 Rockchip 音频设备。
  • device 0device 1 分别对应 hw:0,0hw:0,1 设备。
  • 如果还有其他卡(如 card 1: USB [USB Audio]),则会列出类似 hw:1,0hw:1,1 等设备。

        提供的 /proc/asound/devices 文件输出中,设备的编号和类型是以数字表示的。例如,0-01-0 等,这些并不是指 hw:0,0hw:1,0 这样的传统格式,而是 ALSA 使用的设备编号系统。

 

 

  • 设备编号:在设备编号中,017 等数字代表的是声卡编号,类似于 hw:0hw:1 等。
  • 子设备编号:设备编号后面的 - 和数字(如 0-01-0)表示子设备或设备上的接口。例如,0-0 就是声卡 0 上的第一个设备(hw:0,0),1-0 是声卡 1 上的第一个设备(hw:1,0)。

根据设备的编号和类型进一步确认设备。举例说明:

  • [0-0]: digital audio playback:表示声卡 0 上的第一个播放设备(即 hw:0,0)。
  • [0-0]: digital audio capture:表示声卡 0 上的第一个捕获设备(即 hw:0,0)。
  • [1-0]: digital audio playback:表示声卡 1 上的第一个播放设备(即 hw:1,0)。
  • [7-0]: digital audio playback:表示声卡 7 上的第一个播放设备(即 hw:7,0)。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2263244.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux setfacl 命令详解

文章目录 Linux setfacl 命令详解一、ACL 和 setfacl 简介二、基本语法三、常用操作1. 查看 ACL2. 为用户设置权限3. 为组设置权限4. 删除 ACL 条目5. 设置默认 ACL6. 递归设置 ACL 四、示例操作1. 创建示例目录和文件2. 设置 ACL3. 验证 ACL 五、注意事项六、总结 Linux setfa…

编程训练系统(代码+数据库+LW)

摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了编程训练系统的开发全过程。通过分析编程训练系统管理的不足,创建了一个计算机管理编程训练系统的方案。文章介绍了编程训练系统的系统分析部分&…

提炼关键词的力量:AI驱动下的SEO优化策略

内容概要 在当今数字化营销的环境中,关键词对于提升网站的可见性和流量起着至关重要的作用。企业和个人必须重视有效的关键词策略,以便在竞争激烈的网络市场中脱颖而出。本文将深入探讨如何利用人工智能技术来优化SEO策略,特别是在关键词选择…

【Where语法全解密】.NET开源ORM框架 SqlSugar 系列

文章目录 前言一、普通表达式查询 Where二、根据SQL查询 where三、动态查询四、动态拼表达式查询 ,拼拉姆达五、条件拼接查询六、链式条件查询七、根据Class查询,根据实查询八、根据Class中主键查询九、根据字典查询十、查询函数十一、Where中有子查询十…

模型优化之知识蒸馏

文章目录 知识蒸馏优点工作原理示例代码 知识蒸馏优点 把老师模型中的规律迁移到学生模型中,相比从头训练,加快了训练速度。另一方面,如果学生模型的训练精度和老师模型差不多,相当于得到了规模更小的学生模型,起到模…

电脑问题4[非华为电脑安装华为电脑管家华为荣耀手机多屏协助]

非华为电脑安装华为电脑管家华为荣耀手机多屏协助 我是荣耀手机之前一直用的是window的"连接手机"功能,电脑控制手机还蛮好用,但是又不能够没有好的电脑控制手机的功能,后来想了想看了看,竟然安装了华为电脑关键,竟然可以顺利连接上荣耀手机,发现还蛮好用! 本文引用…

win11 C盘出现感叹号解决方法

出现感叹号,原因是对C盘进行了BitLocker驱动器加密操作。如果想去除感叹号,对C盘进行BitLocker解密即可。 步骤如下: 1.点击Windows搜索框 2.搜索框内输入 系统 3.按下回车,进入系统界面 4.点击隐私和安全性 点击BitLocker驱…

MyBatis通过注解配置执行SQL语句原理源码分析

文章目录 前置准备流程简要分析配置文件解析加载 Mapper 接口MapperAnnotationBuilder解析接口方法注解parseStatement 方法详解MapperBuilderAssistant 前置准备 创建一个mybatis-config.xml文件&#xff0c;配置mapper接口 <mappers><!--注解配置--><mapper…

[数据结构] 链表

目录 1.链表的基本概念 2.链表的实现 -- 节点的构造和链接 节点如何构造? 如何将链表关联起来? 3.链表的方法(功能) 1).display() -- 链表的遍历 2).size() -- 求链表的长度 3).addFirst(int val) -- 头插法 4).addLast(int val) -- 尾插法 5).addIndex -- 在任意位置…

计算机基础 试题

建议做的时候复制粘贴,全部颜色改为黑色,做完了可以看博客对答案。 一、单项选择题(本大题共25小题,每小题2分,共50分〉 1.计算机内部采用二进制数表示信息,为了便于书写,常用十六进制数表示。一个二进制数0010011010110用十六进制数表示为 A.9A6 B.26B C.4D6 D.…

设计模式12:状态模式

系列总链接&#xff1a;《大话设计模式》学习记录_net 大话设计-CSDN博客 参考&#xff1a;设计模式之状态模式 (C 实现)_设计模式的状态模式实现-CSDN博客 1.概述 状态模式允许一个对象在其内部状态改变时改变其行为。对象看起来像是改变了其类。使用状态模式可以将状态的相…

SmartX分享:NVMe-oF 介绍、SMTX ZBS 如何选择高性能场景解决方案与如何实现

目录 背景什么是 NVMe-oFZBS AccessiSCSI 与 iSERNMVe-oF 介绍NVMeNVMe-oFNVMe-oF 承载网络&#xff08;数据平面&#xff09; ZBS NVMe-oF 实现ZBS 接入策略ZBS 接入点分配策略性能测试 为什么要支持 RoCE引用 背景 前几篇文章&#xff0c;我们认识到了 SmartX 公司产品 SMTX…

数据可视化-1. 折线图

目录 1. 折线图适用场景分析 1. 1 时间序列数据展示 1.2 趋势分析 1.3 多变量比较 1.4 数据异常检测 1.5 简洁易读的数据可视化 1.6 特定领域的应用 2. 折线图局限性 3. 折线图代码实现 3.1 Python 源代码 3.2 折线图效果&#xff08;网页显示&#xff09; 1. 折线图…

python网络框架——Django、Tornado、Flask和Twisted

Django、Tornado和flask是全栈网络框架&#xff0c;而Twisted更专注于网络底层的高性能封装&#xff0c;不提供HTML模版引擎等界面功能&#xff0c;因此不能称为全栈框架。 1、Django 发布于2003年&#xff0c;是当前python世界里最负盛名且最成熟的网络框架。相较于其他web框…

Flash语音芯片相比OTP语音芯片的优势

Flash语音芯片和OTP语音芯片是两种常见的语音解决方案&#xff0c;在各自的应用领域中发挥着重要作用。本文‌将介绍Flash语音芯片相比OTP(One-Time Programmable)语音芯片的显著优势‌。 1‌.可重复擦写‌&#xff1a;Flash语音芯片的最大特点是支持多次编程和擦除&#xff0c…

门店全域推广,线下商家营销布局的增量新高地

门店是商业中最古老的经营业态之一。很早就有行商坐贾的说法&#xff0c;坐贾指的就是门店商家&#xff0c;与经常做商品流通的「行商」相对应。 现在的门店经营&#xff0c;早已不是坐等客来&#xff0c;依靠自然流量吸引顾客上门&#xff0c;大部分的门店经营与推广都已经开…

NX系列-使用 `nmcli` 命令创建 Wi-Fi 热点并设置固定 IP 地址

使用 nmcli 命令创建 Wi-Fi 热点并设置固定 IP 地址 一、前言 在一些场景下&#xff0c;我们需要将计算机或嵌入式设备&#xff08;例如 NVIDIA Orin NX&#xff09;转换为 Wi-Fi 热点&#xff0c;以便其他设备&#xff08;如手机、笔记本等&#xff09;能够连接并使用该设备…

[react] <NavLink>自带激活属性

NavLink v6.28.0 | React Router 点谁谁就带上类名 当然类名也是可以自定义 <NavLinkto{item.link}className{({ isActive }) > (isActive ? 测试 : )}>{item.title}</NavLink> 有什么用?他会监听你的路由,刷新的话也会带上激活效果

【LC】100. 相同的树

题目描述&#xff1a; 给你两棵二叉树的根节点 p 和 q &#xff0c;编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同&#xff0c;并且节点具有相同的值&#xff0c;则认为它们是相同的。 示例 1&#xff1a; 输入&#xff1a;p [1,2,3], q [1,2,3] 输出&…

代码随想录day24 | leetcode 93.复原IP地址 90.子集 90.子集II

93.复原IP地址 Java class Solution {List<String> result new ArrayList<String>();StringBuilder stringBuilder new StringBuilder();public List<String> restoreIpAddresses(String s) {backtracking(s, 0, 0);return result;}// number表示stringb…