ALSA lib基本概念

1.channel

通道,即我们熟知的声道数。左/右声道,5.1channel等等

2.sample

sample即一次采样,通常的sample bit指的是一个channnel上,一次采样的bit数(常见的sample bit 8/16/24/32bits)

3.frame

一个frame是一次采样时所有channel上的sample bit.即frame = channels * (sample bit).

4.peroid

A period is the number of frames in between each hardware interrupt.

每当hardware buffer 中有peroid size个frame的空间时,硬件就产生中断,来通知alsa driver来往硬件写数据。

5.buffer size

hardware buffer size 是由多个peroid组成。buffer size = peroid size * peroids。

在这里插入图片描述

6.Data access and layout

在一个period以内(interleaved和non-interleaved是在一个period里面排),数据是按照channel1排完了再排channel2呢,还是一个frame一个frame的来排(frame在alsa里指的是一次采样时间内,两个channel的数据放一块儿就是一个frame)上图是interleaved。

7.Hardware parameter

Hardware parameter是作用于声卡硬件的,包括sample rate, sample format, interupt intervals, data access and layout, buffer size.

8.Software parameter

software parameter 是作用于alsa core的。通常用来控制When to start the device, what to do about xruns, Available minimum space/data for wakeup,Transfer chunk size.

8.1 When to start the device

我们可以通过API snd_pcm_sw_params_set_start_threshold来设置什么时候开始启动声卡。对于playback,假设第设置start threshold 为320,那么就是说,当用户调用writei,写入的数据,将暂时存在alsa驱动空间里,当这个数据量达到 320帧时,alsa驱动才开始将数据写入hardware buffer,并启动DA转换。

8.2What to do about xruns

xrun指的是,声卡period一到,引发一个中断,告诉alsa驱动,要填入数据,或读走数据,但是,问题在于alsa的读取和写入操作必须用户调用writei和readi才会发生的,它不会去缓存数据。如果上层没有用户调用writei和readi,那么就会产生 overrun(录制时,数据都满了,还没被alsa驱动读走)和underrun(需要数据来播放,alsa驱动却不写入数据),统称为xrun。

当xrun发生时,可以在空余空间超过stop threshold时,stop audio interface.

也可以通过设置silence threshold,当空余空间超过silence threshold时,就hardware buffer 写入silence.

8.3 Available minimum space/data for wakeup

这个software parameters仅用在interrupt-driven模式。这个模式是alsa驱动层的,不是硬件interrupt。它的意思是,用户使用 snd_pcm_wait()时,这个实际封装的是系统的poll调用,表示用户在等待,那么在等待什么呢?对于playback来讲,就是等待下面的声卡的hardware buffer里有一定数量的空间,可以放入新的数据了,对于record来讲,就是等待下面声卡新采集的数据达到了一定数量了。这个一定数量,就是用 snd_pcm_sw_params_set_avail_min来设置,单位是frame。

8.4 Transfer chunk size

this determines the number of frames used when transferring data to/from the device hardware buffer.

AC108
AC108是一个高度集成的四通道ADC,具有I2S/TDM输出转换.它是针对高清晰度语音采集和识别应用平台中的多麦克风阵列而设计的。AC108集成了四个同步模数转换器和独立的可编程偏置电压和麦克升压放大器,提供有效的信道数据,可以消除信道串扰

ADC 是Analog-to-Digital Converter的缩写,指模拟/数字转换器,我们常用的模拟信号,如温度、压力、电流等,如果需要转换成更容易储存、处理的数字形式,用模/数转换器就可以实现这个功能。

DAC是Digital-to-Analog Converter的缩写,指数字/模拟转换器。数字量是用代码按数位组合起来表示的,对于有权码,每位代码都有一定的位权。为了将数字量转换成模拟量,必须将每1位的代码按其位权的大小转换成相应的模拟量,然后将这些模拟量相加,即可得到与数字量成正比的总模拟量,从而实现了数字/模拟转换
在这里插入图片描述

9. cpu_dai
cpu_dai 驱动通常对应cpu的一个或者几个 I2S/PCM 接口。用来连接platform和machine。

不同的声卡有不同的cpu_dai

10.audiocodec 芯片内置音频接口

11.daudio 数字音频接口,可配置成 I2S/PCM 标准音频接口

12.dmic 数字麦接口

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
"alsa lib pcm.c:8512"是一个错误信息,它是ALSA(Advanced Linux Sound Architecture)库中的一个错误代码。 ALSA是用于在Linux操作系统上处理音频和声音的软件框架。pcm.c是该库中与PCM(Pulse-code Modulation)音频数据处理相关的文件。当出现"alsa lib pcm.c:8512"错误时,表示在执行PCM音频数据读取或写入操作时发生了错误,具体是在pcm.c文件的第8512行。 要解决这个错误,可以考虑以下几个步骤: 1. 检查设备配置:确保使用正确的音频设备进行读取或写入操作。可以使用命令"aplay -l"和"arecord -l"来列出系统中可用的音频设备。 2. 检查权限:确保当前用户有足够的权限来访问音频设备。可以使用命令"ls -l /dev/snd/"来查看设备文件的权限。 3. 检查设置参数:检查PCM音频处理的设置参数是否正确。可以参考ALSA文档和相应的程序代码来确认参数设置的正确性。 4. 检查驱动和库版本:确保ALSA库和音频驱动程序的版本是兼容的。更新驱动程序或升级ALSA库可能有助于解决一些已知的问题。 5. 查找其他错误信息:在"alsa lib pcm.c:8512"错误之前或之后的错误信息中,可能会提供更多有关问题原因的线索。对这些错误信息进行分析,可能会帮助定位和解决问题。 6. 检查其他系统资源:确保系统上的其他资源,如内存、磁盘空间等,充足且没有其他问题。 如果以上步骤都无法解决问题,建议查看ALSA论坛或咨询相关的技术支持团队,寻求更详细的帮助和指导。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值