Audio参数讲解
创始人
2024-03-19 15:08:43
0

一、音频基础参数

frame_bits  一帧数据的位数比如 :16bits 2ch   frame_bits = 16*2
sample_bits 采样位数 比如16bit  24bit  32bit
period_size  指一个周期包含多少帧
periods 每次处理AD/DA转换的间隔周期
内核可以缓冲很多周期的数据,每个周期都会生成一个中断和一个副本,用户层可以间隔很长时间再处理一次,一次可以处理多个周期的数据
buffer_size
= period_size * periods

params_periods 宏从 hw_params 中提取出对应的 periods。

period_bytes_min /* min period size */ 和定义的最小和最大的 period size。
periods_max 和 periods_min 定义了最大和最小的 periods。

periods 信息和 OSS 中的 fragment 相对应。period 定义了 PCM 中断产生的周期。这个周期非常依赖硬件。
一般来说,一个更短的周期会提供更多的中断和更多的控制。如在录音中,周期大小定义了输入延迟,另外,整个缓存区大小也定义了播放的输出延迟。

二、音频硬件参数举例
static const struct snd_pcm_hardware dummy_pcm_hardware = {
    .info = SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED
        | SNDRV_PCM_INFO_RESUME | SNDRV_PCM_INFO_MMAP_VALID,
    .formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S24_LE
            | SNDRV_PCM_FMTBIT_S32_LE,
    .rate_min = 8000,
    .rate_max = 192000,
    .channels_min = 1,
    .channels_max = 16,
    .period_bytes_min = 256,
    .period_bytes_max = 1024 * 16,
    .periods_min = 2,
    .periods_max = 4096,
    .buffer_bytes_max = 1024*1024,
    .fifo_size = 256,
};

应用层pcminfo显示:
Info for card 0, device 1:

PCM out:
      Access:   0x000009
   Format[0]:   0x000444
   Format[1]:   00000000
 Format Name:   S16_LE, S24_LE, S32_LE
   Subformat:   0x000001
        Rate:   min=8000Hz      max=192000Hz
    Channels:   min=1           max=16
 Sample bits:   min=16          max=32
 Period size:   min=4           max=8192
Period count:   min=2           max=4096

PCM in:
      Access:   0x000009
   Format[0]:   0x000444
   Format[1]:   00000000
 Format Name:   S16_LE, S24_LE, S32_LE
   Subformat:   0x000001
        Rate:   min=8000Hz      max=192000Hz
    Channels:   min=1           max=16
 Sample bits:   min=16          max=32
 Period size:   min=4           max=8192
Period count:   min=2           max=4096

上面示例,定义了该I2S支持最大16通道,最小1通道,最大period_bytes 1024*16
不管你是使用1通道还是16通道,最大period_bytes 1024*16 不变。
所以在tinyplay播放1通道和16通道所支持的-p  参数是不同的,注意tinyplay的-p指的是
多少个frame,一个frame大小与通道数和bits都有关系,但需要保证
frames_bytes*period_size = period_bytes不超过1024*16 bytes。
比如播放48K 2ch  32bits音频:-p  最大2048,2048*2ch*(32bites/8) = 1024*16
若播放8ch  32bits  -p  就是512,16ch 32bits就是 256。

说说为什么应用层显示Period size  min=4 max=8192
首先这个地方Period size 单位也是frame的个数
min=4的由来:period_bytes_min = 256,max_ch=16,max_bits=32,所以
Period size  min= 256/16/(32/8) = 4
max=8192的由来:min_ch=1,min_bits=16
Period size  max = 16*1024/1/(16/8) = 8192

由上可知,Period size的范围并不适用所有音频文件,要根据具体音频参数来计算

说说Period count计算:tinypcminfo显示与驱动配置相同
但是具体能支持最大多少Period count,还受其他参数影响
根据上述驱动定义,最大buffer_size = 1024*1024,即1M
需确保period_bytes* Period count <= 1Mbytes
所以当播放48K 2ch 32bits,使用-p 2048时,Period count最大是64

相关内容

热门资讯

AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWS管理控制台菜单和权限 要在AWS管理控制台中创建菜单和权限,您可以使用AWS Identity and Access Ma...
AWR报告解读 WORKLOAD REPOSITORY PDB report (PDB snapshots) AW...
群晖外网访问终极解决方法:IP... 写在前面的话 受够了群晖的quickconnet的小水管了,急需一个新的解决方法&#x...