zoukankan      html  css  js  c++  java
  • alsa 音频参数

    样本长度(sample):样本是记录音频数据最基本的单位,计算机对每个通道采样量化时数字比特位数,常见的有8位和16位。
    通道数(channel):该参数为1表示单声道,2则是立体声。
    帧(frame):帧记录了一个声音单元,其长度为样本长度与通道数的乘积,一段音频数据就是由苦干帧组成的。
    采样率(rate):每秒钟采样次数,该次数是针对帧而言,常用的采样率如8KHz的人声,44.1KHz的mp3音乐, 96Khz的蓝光音频。
    周期(period):音频设备一次处理(硬件中中断一次)所需要的桢数,对于音频设备的数据访问以及音频数据的存储,都是以此为单位。
    交错模式(interleaved):是一种音频数据的记录方式
    在交错模式下,数据以连续桢的形式存放,即首先记录完桢1的左声道样本和右声道样本(假设为立体声格式),再开始桢2的记录。
    而在非交错模式下,首先记录的是一个周期内所有桢的左声道样本,再记录右声道样本,数据是以连续通道的方式存储。
    不过多数情况下,我们只需要使用交错模式就可以了。
    比特率(Bit per Second):比特率表示每秒的比特数,比特率=采样率×通道数×样本长度=采样率x帧长度

    buffer是一个环形buffer,大小一般来说比一个period size大,一般设做 2 * period size,但是一些硬件可以支持到8个周期大小的buffer,也可以设为非整数倍的period的大小。
    现在如果我们的硬件设置为48khz,2周期,每个周期1024个帧,那么buffer size 就是2048个帧。硬件每处理一个buffer会中断2次,alsa会一直让buffer保持一个满的状态,每当第一个周期的样本播放完成,第二个周期的数据就会被播放,同时第三个周期的数据就会进入到第一个周期数据的位置。

    alsa-source.c

    fragment_size  一个period的数据的大小,硬件一次中断可以读取多少byte的数据。 period = fragment_size  / framesize

    fragments        buffer中包含几个framement(period),比如一个buffer包含两个period,那么fragments就是2.

  • 相关阅读:
    映射和分析
    文档操作
    向 Nginx 主进程发送 USR1 信号
    ES集群7.3.0设置快照,存储库进行索引备份和恢复等
    ES7.3.0配置邮件告警
    Elasticsearch 史上最全最常用工具清单
    Grok在线调试网址
    Linux 小知识翻译
    Linux 小知识翻译
    Linux 小知识翻译
  • 原文地址:https://www.cnblogs.com/renhl/p/13058429.html
Copyright © 2011-2022 走看看