• alsa音频播放过程中的基本概念


    以下为 ALSA-Project/FramesPeriods[1] 学习笔记

    1, sample_rate: 即每秒进行多少次采样,常见的比如 8000、16000、44100和48000等
    2, sample_bits: 即每次采样多少个bit,多是 16bit。其他常见有 24bits、32bits等
    3, channels: 通道数,即单声道mono(1), 立体声stero(2), 1.2(3), 或是1.5(6)等
    4, sample_format: 每次采样结果的表示格式, 主要区分bit位数和大小端, 如 S8、S16LE、S16BE、S24LE、S24BE、S32LE、S32BE等
    5, period_size: 每次相邻中断之间处理的sample个数,处理完一个period,声卡硬件产生一个中断
    period_count: 每次最大可提交的period的个数。
    因为alsa内部使用ringbuffer,period_size * period_count 决定了ring_buffer的大小。

    以上参数由音频输出硬件决定,同一个声卡可能挂接多个音频输出设备(比如HDMI、3.5寸耳机输出),其输出的音频参数规格各不相同。比如树莓配一代支持的音频输出规格如下

    pi@raspberrypi:~ $ tinypcminfo -D 0 -d 0
    Info for card 0, device 0:
    
    PCM out:
          Access:	0x000009
       Format[0]:	0x000006
       Format[1]:	00000000
     Format Name:	U8, S16_LE
       Subformat:	0x000001
            Rate:	min=8000Hz	max=48000Hz
        Channels:	min=1		max=2
     Sample bits:	min=8		max=16
     Period size:	min=256		max=65536
    Period count:	min=1		max=128
    
    PCM in:
    cannot open device '/dev/snd/pcmC0D0c'
    Device does not exist.
    pi@raspberrypi:~ $ tinypcminfo -D 0 -d 1
    Info for card 0, device 1:
    
    PCM out:
          Access:	0x000009
       Format[0]:	0x000004
       Format[1]:	00000000
     Format Name:	S16_LE
       Subformat:	0x000001
            Rate:	min=44100Hz	max=48000Hz
        Channels:	min=2		max=2
     Sample bits:	min=16		max=16
     Period size:	min=256		max=16384
    Period count:	min=1		max=64
    
    PCM in:
    cannot open device '/dev/snd/pcmC0D1c'
    Device does not exist.
    pi@raspberrypi:~ $
    

    因而应用再实现音频播放时,需要根据实际情况选择那个输出通道,并且根据其实际输出规格要求,提供对应的PCM数据。若原始直接的音频数据(比如解码输出),和所选的音频输出通道的规格要求不一致,则需要做转换处理

    [1] https://www.alsa-project.org/main/index.php/FramesPeriods

  • 相关阅读:
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    redis被攻击,怎么预防
    Redis3.2.12单节点安装
    Linux安装Redis、后台运行、系统自启动
    Redis 密码设置和查看密码
    Redis protected-mode属性解读
    SpringCloud(9)----mysql实现配置中心
    SpringCloud(8)----zuul权限校验、接口限流
  • 原文地址:https://www.cnblogs.com/lanyuliuyun/p/10053692.html
Copyright © 2020-2023  润新知