zoukankan      html  css  js  c++  java
  • ALSA架构简介

    一、概述

    ALSA是Advanced Linux Sound Architecture 的缩写,目前已经成为了linux的主流音频体系结构。

    首先来了解一下,alsa架构的组成部分以及它们的作用。

    Native ALSA Applicationtinyplay/tinycap/tinymix,这些用户程序直接调用 alsa 用户库接口来实现播放、录音、控制。

    ALSA Library API:alsa 用户库接口,常见有 tinyalsa、alsa-lib。

    ALSA CORE:alsa 核心层,向上提供逻辑设备(PCM/CTL/MIDI/TIMER/…)系统调用,向下驱动硬件设备(Machine/I2S/DMA/CODEC)。

    ASoC CORE:asoc 是建立在标准 alsa core 基础上,为了更好支持嵌入式系统和应用于移动设备的音频 codec 的一套软件体系。

    Hardware Driver:音频硬件设备驱动,由三大部分组成,分别是 Machine、Platform、Codec

    二.ALSA设备文件结构

    在ubuntu系统中,看一下alsa设备的文件结构:

    cd /dev/snd

    ls -l

    crw-rw----+ 1 root audio  controlC0
    crw-rw----+ 1 root audio  midiC0D0
    crw-rw----+ 1 root audio  pcmC0D0c
    crw-rw----+ 1 root audio  pcmC0D0p
    crw-rw----+ 1 root audio  pcmC0D1p
    crw-rw----+ 1 root audio  seq
    crw-rw----+ 1 root audio  timer

    可以看到以下设备文件:

    controlC0 -->                 用于声卡的控制,例如通道选择,混音,麦克风的控制等

    midiC0D0  -->                用于播放midi音频

    pcmC0D0c --〉             用于录音的pcm设备

    pcmC0D0p --〉             用于播放的pcm设备

    seq  --〉                        音序器

    timer --〉                       定时器

    其中,C0D0代表的是声卡0中的设备0,pcmC0D0c最后一个c代表capture,pcmC0D0p最后一个p代表playback,这些都是alsa-driver中的命名规则。从上面的列表可以看出,我的声卡下挂了6个设备,根据声卡的实际能力,驱动实际上可以挂上更多种类的设备,在include/sound/core.h中,定义了以下设备类型:

    #define    SNDRV_DEV_TOPLEVEL    ((__force snd_device_type_t) 0)
    #define    SNDRV_DEV_CONTROL    ((__force snd_device_type_t) 1)
    #define    SNDRV_DEV_LOWLEVEL_PRE    ((__force snd_device_type_t) 2)
    #define    SNDRV_DEV_LOWLEVEL_NORMAL ((__force snd_device_type_t) 0x1000)
    #define    SNDRV_DEV_PCM        ((__force snd_device_type_t) 0x1001)
    #define    SNDRV_DEV_RAWMIDI    ((__force snd_device_type_t) 0x1002)
    #define    SNDRV_DEV_TIMER        ((__force snd_device_type_t) 0x1003)
    #define    SNDRV_DEV_SEQUENCER    ((__force snd_device_type_t) 0x1004)
    #define    SNDRV_DEV_HWDEP        ((__force snd_device_type_t) 0x1005)
    #define    SNDRV_DEV_INFO        ((__force snd_device_type_t) 0x1006)
    #define    SNDRV_DEV_BUS        ((__force snd_device_type_t) 0x1007)
    #define    SNDRV_DEV_CODEC        ((__force snd_device_type_t) 0x1008)
    #define    SNDRV_DEV_JACK      ((__force snd_device_type_t) 0x1009)
    #define    SNDRV_DEV_LOWLEVEL    ((__force snd_device_type_t) 0x2000)

    通常,我们更关心pcm和control这两种设备。

    三. 驱动代码的文件结构

  • 相关阅读:
    js高级程序设计AJAX && JSON
    python核心高级学习总结7正则表达式
    python核心高级学习总结8动态性、__slots__、生成器、迭代器、装饰、闭包
    python核心高级学习总结3python实现进程的三种方式及其区别
    python核心高级学习总结6面向对象进阶之元类
    运维术语名词
    资源分享编程、数据库、安全、运维等
    python之Bug之字符串拼接bug
    CSS hack:实现IE6、IE7、Firefox兼容(转摘)
    (装载) Web开发技术的历史发展简介
  • 原文地址:https://www.cnblogs.com/-glb/p/13722212.html
Copyright © 2011-2022 走看看