首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux ALSA声卡驱动之二:声卡的创建

一、结构体struct snd_card: 1.1. snd_card是什么: snd_card可以说是整个ALSA音频驱动最顶层的一个结构,整个声卡的软件逻辑结构开始于该结构,几乎所有与声音相关的逻辑设备都是在...snd_card的管理之下,声卡驱动的第一个动作通常就是创建一个snd_card结构体。...irq %i", card->shortname, chip->ioport, chip->irq); snd_card的driver字段保存着芯片的ID字符串,user空间的alsa-lib...通常,alsa-driver的已经提供了一些常用的部件的创建函数,而不必直接调用snd_device_new(),比如: PCM ---- snd_pcm_new() RAWMIDI --...三、snd_card_create(): 这个接口在新的Linux内核里面可能找不到,这里我们主要是学习思想! snd_card_create()在/sound/core/init.c中定义。

32510

Linux ALSA声卡驱动之五:移动设备中的ALSA(ASoC)

一、ASoC的由来: ASoC--ALSA System on Chip ,是建立在标准ALSA驱动层上,为了更好地支持嵌入式处理器和移动设备中的音频Codec的一套软件体系。...在ASoc出现之前,内核对于SoC中的音频已经有部分的支持,不过会有一些局限性: Codec驱动与SoC CPU的底层耦合过于紧密,这种不理想会导致代码的重复,例如,仅是wm8731的驱动,当时Linux...ASoC不能单独存在,他只是建立在标准ALSA驱动上的一个它必须和标准的ALSA驱动框架相结合才能工作。...所有的Codec驱动都要提供以下特性: Codec DAI 和 PCM的配置信息; Codec的IO控制方式(I2C,SPI等); Mixer和其他的音频控件; Codec的ALSA音频操作接口; 必要时...ASoC的工作机理,必须要理解这一系列数据结构之间的关系和作用,下面的关系图展示了ASoC中重要的数据结构之间的关联方式: 图4.1 Kernel-2.6.35-ASoC中各个结构的静态关系 ASoC把声卡实现为一个

23810
您找到你想要的搜索结果了吗?
是的
没有找到

Linux ALSA声卡驱动之三:PCM设备的创建

,经过解码后,最终送到音频驱动程序中的就是PCM数据,反过来,在录音时,音频驱动不停地把采样所得的PCM数据送回给应用程序,由应用程序完成压缩、存储等任务。...PCM信号送回给用户空间的应用程序 二、alsa-driver中的PCM中间层: ALSA已经为我们实现了功能强劲的PCM中间层,自己的驱动中只要实现一些底层的需要访问硬件的函数即可。...每个声卡最多可以包含4个pcm的实例,每个pcm实例对应一个pcm设备文件。pcm实例数量的这种限制源于linux设备号所占用的位大小,如果以后使用64位的设备号,我们将可以创建更多的pcm实例。...对驱动程序的请求都是由该结构中的函数处理。...snd_pcm_set_ops 设置操作该pcm的控制/操作接口函数,参数中的snd_pcm_ops结构中的函数通常就是我们驱动要实现的函数 snd_card_register 注册声卡,在这个阶段会遍历声卡下的所有逻辑设备

32910

ALSA声卡驱动的DAPM(二)-建立过程

我们之前已经说过,驱动中定义的snd_soc_dapm_widget数组,只是作为一个模板,所以,snd_soc_dapm_new_control所做的第一件事,就是为该widget重新分配内存,并把模板的内容拷贝过来...widgets链表中,以后我们就可以通过声卡的widgets链表来遍历所有的widget,再次强调一下snd_soc_dapm_new_controls函数所完成的主要功能: 为widget分配内存,并拷贝参数中传入的在驱动中定义好的模板...snd_soc_route结构数组,该数组的每个条目描述了目的widget的和源widget的名称,以及控制这个连接的kcontrol的名称,最终,驱动程序使用api函数snd_soc_dapm_add_routes...3 ...... 4 5 return 0; 6 } snd_soc_dapm_add_path函数是整个调用链条中的关键,我们来分析一下:(注意linux3.10.28...代码没有相应的snd_soc_dapm_add_path函数,在linux3.12才有设计snd_soc_dapm_add_path函数) 1 static int snd_soc_dapm_add_path

3.4K50

ALSA声卡驱动的DAPM(一)-DPAM详解

一、DAPM简介:  DAPM是Dynamic Audio Power Management的缩写,直译过来就是动态音频电源管理的意思,DAPM是为了使基于linux的移动设备上的音频子系统,在任何时候都工作在最小功耗状态下...用户空间的应用程序无需对代码做出修改,也无需重新编译,DAPM根据当前激活的音频流(playback/capture)和声卡中的mixer等的配置来决定那些音频控件的电源开关被打开或关闭。...9 snd_soc_dapm_out_drv 该widget对应一个输出驱动控件 10 snd_soc_dapm_adc 该widget对应一个ADC 11 snd_soc_dapm_dac...platform域    位于该域上的widget通常是针对平台或板子的一些需要物理连接的输入/输出接口,例如耳机、扬声器、麦克风,因为这些接口在每块板子上都可能不一样,所以通常它们是在machine驱动中进行定义和控制

8.3K60

Linux音频驱动-ALSA概述

概述 ALSA(Advanced Linux Sound Architecture)是linux上主流的音频结构,在没有出现ALSA架构之前,一直使用的是OSS(Open Sound System)音频架构...关于OSS的退出以及ALSA的出现,可以看 Linux音频驱动-OSS和ALSA声音系统简介及其比较。 关于OSS和ALSA音频架构之间的区别图如下: ?...同样ALSA为了兼容OSS,ALSA提供了内核模块来模拟OSS声音驱动,所以在OSS架构下编写的App无需修改就可以在ALSA下运行。另外libaoos库也可以模拟OSS,无需OSS相关的内核模块。...card0: 其中0代表的是声卡号,每个声卡系统都存在这样的目录。 cards: 列出系统中可用的,注册的声卡。...modoles: 列出所有ALSA声卡驱动模块列表。 oss: 此目录下包含了ALSA用来模拟OSS的模拟仿真模块。

5.2K31

Linux音频驱动-OSS和ALSA声音系统简介及其比较

概述 昨天想在Ubuntu上用一下HTK工具包来绘制语音信号的频谱图和提取MFCC的结果,但由于前段时间把Ubuntu升级到13.04,系统的声卡驱动ALSA(Advanced Linux Sound...ALSA高级Linux声音系统简介 高级Linux声音体系(英语:Advanced Linux Sound Architecture,缩写为ALSA)是Linux内核中,为声卡提供的驱动组件,以替代原先的...从2.6版本开始ALSA成为Linux内核中默认的标准音频驱动程序集,OSS则被标记为废弃。 ALSA由许多声卡声卡驱动程序组成,同时它也提供一个称为libasound的API库。...另外,ALSA还包含插件功能,使用插件可以扩展新的声卡驱动,包括完全用软件实现的虚拟声卡。...声卡驱动之一:ALSA架构简介: http://blog.csdn.net/droidphone/article/details/6271122 [5]Linux ALSA声卡编程简介: http:/

5.1K31

使用AppleALC快速仿冒声卡驱动

使用AppleALC快速仿冒声卡驱动 所需下载: AppleALC:点击下载 LiLu:点击下载 Clover Configurator(旧版,适用于未r5120之前的版本) Clover Configurator...(适用于OpenClover) OpenCore Configurator:点击下载 ---- 首先需要确定声卡型号 在windows系统中打开Aida64查看or查看设备管理器里声卡的硬件ID。...确定好声卡型号之后,点击打开 该网站,找到自己的型号点击进去。 以我的声卡为例,型号是ALC887。...---- 驱动声卡 将applealc.kext、lilu.kext放到引导的对应文件夹中,打开config配置文件,注入ID: OC: 方法一: 在NVRAM-7开头-注入启动参数 alcid=50...试了多个ID无果先查看AppleAlc驱动是否加载了。 主流设备一般都没有问题,另外使用过voodoohda那就先删除万能声卡驱动,重装一次系统再试。

4.5K10

Linux音频采集和在国产化平台中遇到的坑(一)

很多人都觉得银河麒麟不就是linux么,那不直接用ALSA就好了,我原本也是这么想的,但是实际开发下来才发现,还是有各种坑需要自己去趟的。这里我简单记录一下。...linux ALSA音频采集 首先,银河麒麟既然是linux系统,那首先考虑到的是通过ALSA(Advanced Linux Sound Architecture)来进行采集,ALSAlinux的默认声卡驱动...need_frames -= ret; } return true; } 这样就可以完成音频数据的采集,需要注意的是,在第二步读取数据之前,需要先调用snd_pcm_prepare,否则是无法驱动数据采集正常进行的...刚开始我以为是ALSA默认设备的问题,因为出问题的国产化芯片平台,有两个声卡,其中一个是可以正常使用的,另一个是无效声卡。...,来设置默认声卡,这里推荐一个工具“alsamixer”,是一个字符化界面的ALSA配置工具,可以通过如下命令安装: sudo apt-get install alsa-utils 启动后就是一个这样的界面

1.6K40

arm linux利用alsa驱动并使用usb音频设备

一.背景: arm linux的内核版本是3.13.0 二.准备工作 添加alsa驱动到内核中,也就是在编译内核的时候加入以下选项: ?...接下来就重新编译内核即可 三.交叉编译alsa-lib和alsa-utils (alsa-utils是一系列的音频设备控制工具,而alsa-lib是alsa-utils依赖的库,所以先将alsa-lib...编译好) 3.1交叉编译alsa-lib 3.2交叉编译alsa-utils 四.将三编译好的库及工具都拷贝至arm开发板(笔者通常直接将编译好的都压缩好之后再复制到开发板进行解压,以避免直接复制造成软链接无法复制的情况...fat32格式的存储设备的时候,注意fat32是不支持软链接的,此时需要直接复制一个aplay并将名称改为arecord: cp aplay arecord 总结 以上所述是小编给大家介绍的arm linux...利用alsa驱动并使用usb音频设备 ,希望对大家有所帮助!

6K31

Linux音频采集和在国产化平台中遇到的坑(一)

很多人都觉得银河麒麟不就是linux么,那不直接用ALSA就好了,我原本也是这么想的,但是实际开发下来才发现,还是有各种坑需要自己去趟的。这里我简单记录一下。...linux ALSA音频采集 首先,银河麒麟既然是linux系统,那首先考虑到的是通过ALSA(Advanced Linux Sound Architecture)来进行采集,ALSAlinux的默认声卡驱动...need_frames -= ret; } return true; } 这样就可以完成音频数据的采集,需要注意的是,在第二步读取数据之前,需要先调用snd_pcm_prepare,否则是无法驱动数据采集正常进行的...刚开始我以为是ALSA默认设备的问题,因为出问题的国产化芯片平台,有两个声卡,其中一个是可以正常使用的,另一个是无效声卡。...于是我尝试通过系统配置的方式,来设置默认声卡,这里推荐一个工具“alsamixer”,是一个字符化界面的ALSA配置工具,可以通过如下命令安装: sudo apt-get install alsa-utils

1.4K20

Linux下使用alsa-lib库完成音频开发: 实现放音和录音(从声卡获取PCM数据保存、向声卡写PCM数据输出)

一、环境介绍 系统: 虚拟机运行ubuntu18.04 (64位) 声卡: 电脑自带声卡 二、安装alsa-lib库 参考文章: https://blog.csdn.net/xiaolong1126626497.../* 进行音频采集,采集pcm数据并直接保存pcm数据 音频参数: 声道数: 1 采样位数: 16bit、LE格式 采样频率: 44100Hz 运行示例: $ gcc linux_pcm_save.c...("无法向驱动程序设置参数(%s)\n",snd_strerror(err)); exit(1); } printf("参数设置成功..../* 进行音频采集,读取存放pcm数据的文件通过声卡进行播放 音频参数: 声道数: 1 采样位数: 16bit、LE格式 采样频率: 44100Hz 运行示例: $ gcc linux_pcm_save.c...("无法向驱动程序设置参数(%s)\n",snd_strerror(err)); exit(1); } printf("参数设置成功.

6.4K20
领券