博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
利用alsa dmix实现混音
阅读量:4167 次
发布时间:2019-05-26

本文共 1337 字,大约阅读时间需要 4 分钟。

利用alsa dmix实现混音

1、  ALSA

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

在内核设备驱动层,ALSA提供了alsa-driver,同时在应用层,ALSA为我们提供了alsa-lib,应用程序只要调用alsa-lib提供的API,即可以完成对底层音频硬件的控制。

alsa的基本架构

                         Application

————————————————————————————————

                  Alsa-lib                    User Space

————————————————————————————————

                      Alsa                      Kernel Space

————————————————————————————————

                      sound driver

————————————————————————————————

                      Hardware

————————————————————————————————

2、  存在的问题

      对于上面的架构,在某一时刻只能有一个程序打开声卡并占有它,此时其它程序打开的话,会返回busy.如要支持同时可 以多个应用程序打开声卡,需要支持混音功能,有些声卡支持硬件混音,但大部分声卡不支持硬件混音,需要软件混音。

3、  ALSA本身也提供混音的plugin,dmix

alsa自带了一个很简单的混音器dmix

应用程序不需要做任何修改,只需要修改asound.conf

详细说明了PCM插件扩展PCM设备的功能和特性。

pcm.name {

        type dmix               # Direct mix

        ipc_key INT            # unique IPC key

        ipc_key_add_uid BOOL  ture  #add current uid to unique IPC key

        ipc_perm INT       # IPC permissions (octal, default 0600)

        slave STR

        # or

        slave {                 # Slave definition

                pcm STR         # slave PCM name

                # or

                pcm { }         # slave PCM definition

                format STR      # format definition

                rate INT        # rate definition

                channels INT

                period_time INT # in usec

                # or

                period_size INT # in bytes

                buffer_time INT # in usec

                # or

                buffer_size INT # in bytes

                periods INT     # when buffer_size or buffer_time is notspecified

        }

        bindings {         # note: this is client independent!!!

                N INT     # maps slave channel to client channel N

        }

        slowptr BOOL   # slow but more precise pointer updates

}

 

你可能感兴趣的文章
C++程序员技术需求规划(发展方向)
查看>>
TinyXml2解析xml用法例子
查看>>
Linux 虚拟内存和物理内存
查看>>
产品和技术,你选对了吗?
查看>>
哈希表(Hash Table)-哈希概述
查看>>
Filebench的安装及使用
查看>>
Ubuntu下 E: Could not get lock /var/lib/apt/lists/lock - open (11: Recource temporarily unavailable)
查看>>
Linux-mmap映射物理内存到用户空间
查看>>
Ext4文件系统三种日志模式——journal、ordered、writeback
查看>>
Linux挂载ext4根文件系统为journal模式
查看>>
linux内核引导参数解析及添加
查看>>
长短期记忆人工神经网络(LSTM)及其tensorflow代码应用
查看>>
长短期记忆人工神经网络(LSTM)网络学习资料
查看>>
运行网络中搜寻到的python程序代码——以长短期记忆人工神经网络(lstm)python代码为例
查看>>
闪存文件系统(Flash File System)
查看>>
WinMIPS64工具进行MIPS指令集实验(一)
查看>>
WinMIPS64工具进行MIPS指令集实验(二)
查看>>
Linux上快速入门英特尔Optane DC Persistent Memory Module的配置与使用
查看>>
Intel Optane DC Persistent Memory Module (PMM)详解
查看>>
Ubuntu 18.04安装英特尔Optane DC Persistent Memory Module配置工具ipmctl
查看>>