音视频开发之 ALSA实战!

news2025/1/16 14:52:34

前言:

今天我们来分享一个开源的音频采集代码,现在大部分音频采集都是通过ALSA框架去采集,如果大家把ALSA采集代码学懂,那么大部分的音频采集都可以搞定。这个代码是用ALSA进行音频PCM的采集并保存到本地文件。

一、alsa框架的介绍:

ALSA是Linux音频采集的声音框架,它提供了一系列API让开发者进行音频的采集、录音、播放等功能。目前ALSA框架广泛运用在嵌入式、Android开发等领域,下面这个是一般的ALSA代码架构采集流程。

d23c94f2b05d88ae3a06203898c24e48.png

而具体的代码如下:

08c979bd61aa37b8fac277cb95dd1912.png37516a5007ba8c3e39619f05cebd92bc.pnge48552817c6990363a3e65d308b01064.png

我们来讲解一下这个代码的整体流程:

  • 第一步:打开ALSA音频设备

912ccb2b2ea85e08095e2d8034e57ad8.png
  • 第二步:params申请内存,并初始化hwparams参数

acaae8601feeba5ae15f44f024febb51.png
  • 第三步:设置多路数据在buffer存储方法:

88f54eb2d74ecfc98345a1575fd8f8fc.png
  • 第四步:设置ALSA采样格式:

56c0d126a244ff90b176f93fa5f5f46c.png
  • 第五步:设置声道数

080207feaf4367c43a61f2be04c8a7fd.png
  • 第六步:设置采样率

c2c8d1701a85ea4b7231651385aa0454.png
  • 第七步:设置ALSA最大缓冲时间:

18efeb8ff93a532ee59538a67cf3398b.png
  • 第八步:设置ALSA缓冲时间:

e6ceeee5377c94350aebf5692b4a00b8.png
  • 第九步:设置周期时间:

4c31029479f10e7272aab45d02bdf38d.png
  • 第十步:使能PCM设备:

e6231baaaf7fa9467192dda019afc3b7.png
  • 第十一步:读取pcm设备的数据,然后保存到文件中:

0e0606a44b3d0e47339232de42aa5602.png

目前一个标准的Linux音频采集,基本上都要按照以上的十个步骤进行采集,否则无法利用ALSA采集到PCM数据

最后:

对嵌入式音频开发感兴趣的朋友,可以加入星球来学习,课程内容说明如下:

ai识别加音视频推流实战项目进度,整个项目从7份开始,前两部分的ai识别工程基本上已经讲解完了(还有人脸识别的工程代码会进行重新重构一篇),当然这里面等录制完了第三部分的音视频推流开发内容,还会对ai识别这部分做补充,比如说yolo或者ssd等算法模型的原理讲解,还有就是自己怎么去训练模型;目前已经开始在录制音视频推流开发的第三部分,已经录制了两个小节部分,第三部分的内容会多搞点,比如理论知识的讲解,然后再结合我们的推流代码工程,可以学习到mpp和ffmpeg,以及rtmp、srt等相关协议,还包括h264、h265的码流结构和编码结构等相关知识点,甚至还包括工作当中常遇见家的问题,比如说,音视频不同步的问题,同时最近又添加了最新的课程内容

13978f3c2d420d5145b04edec53eebea.png


9b4617c7c7876efd7e936399cb1a6228.png

最新课程内容更新:

0a465148e987a21a2e7d27b535432486.png

可以直接扫码加入星球:

cac1ec18440a9822bb7562af6cdba27d.jpeg

最后感谢大家的支持哈,加入了星球的朋友,记得加我微信:tu18879499804,我拉大家进解答群!

课程需要啥基础:有编程语言的基础就行!给自己一个实战机会,肝就完事!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/44839.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C#语言实例源码系列-实现输入框焦点变色和窗体拖拽改变大小

专栏分享点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册 👉关于作者 众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中…

002.组合总和|||——回溯算法

1.题目链接: 216. 组合总和 III 2.解题思路: 2.1.题目要求: 给一个元素数量k和一个元素和n,要求从范围[1,2,3,4,5,6,7,8,9]中返回所有元素数量为k和元素和为n的组合。(每个数字只能使用一次) 比如输入k…

深度学习快速入门----Pytorch 系列2

注:参考B站‘小土堆’视频教程 视频链接:【PyTorch深度学习快速入门教程(绝对通俗易懂!)【小土堆】 上一篇:深度学习快速入门----Pytorch 1 文章目录八、神经网络--非线性激活九、神经网络--线性层及其他层…

作为IT行业过来人,我有3个重要建议给后辈程序员!

见字如面,我是军哥!作为一名 40 岁的 IT 老兵,我在年轻时踩了不少坑,我总结了其中最重要的 3 个并一次性分享给你,文章不长,你一定要看完哈~1、重视基础还不够,还要注重技术广度和深…

第2-4-8章 规则引擎Drools实战(1)-个人所得税计算器

文章目录9. Drools实战9.1 个人所得税计算器9.1.1 名词解释9.1.2 计算规则9.1.2.1 新税制主要有哪些变化?9.1.2.2 资较高人员本次个税较少,可能到年底扣税增加?9.1.2.3 关于年度汇算清缴9.1.2.4 个人所得税预扣率表(居民个人工资、…

科教导刊杂志科教导刊杂志社科教导刊编辑部2022年第27期目录

前沿视角《科教导刊》投稿:cn7kantougao163.com 新时代研究生教育质量评价指标体系的框架构建 李军伟;赵永克;杨丹; 1-3 基于现代学徒制的“多主体、双标准、五维度”人才培养质量评价体系构建 汪帆;刘严; 4-6 高教论坛 新工科背景下地方性院校第二课堂…

【云原生】Docker容器服务更新与发现之consul

内容预知 1.consul的相关知识 1.1 什么是注册与发现 1.2 什么是consul 1.3 zookeeper和consul的区别 2. consul 部署 2.1 部署consul服务器 2.2 registrator服务器 3.consul-template 的引入 3.1 consul-template的作用 3.2 consul-template的具体部署运用 &…

微信开发者工具C盘占用大的问题

将User Data 下的文件迁移到其他盘,比如 D盘,E盘,F盘 步骤如下: 1.找到微信开发者工具C盘所在的缓存目录,一般为 C:\Users\ 你的用户名\AppData\Local\微信开发者工具\User Data 将里面的内容全部剪切到其它盘符&…

从鹅厂实例出发!分析Go Channel底层原理

本文是基于Go1.18.1源码的学习笔记。Channel的底层源码从Go1.14到现在的Go1.19之间几乎没有变化,这也是Go最早引入的组件之一,体现了Go并发思想:Do not communicate by sharing memory; instead, share memory by communicating.不要通过共享…

Playwright 简明入门教程:录制自动化测试用例,结合 Docker 使用

本篇文章聊聊如何使用 Playwright 进行测试用例的录制生成,以及如何在Docker 容器运行测试用例,或许是网上最简单的入门教程。 写在前面 Playwright 是微软出品的 Web 自动化测试工具和框架,和 Google Puppeteer 有着千丝万缕的关系。前一阵…

[附源码]计算机毕业设计springboot儿童早教课程管理系统论文2022

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

如何治理 Electron 版本淘宝直播应用崩溃?

经过几个月的努力,基于Electron框架开发的新版淘宝直播推流软件终于上线了。随之而来的就是线上用户反馈的各种问题,其中最影响用户体验的当属应用崩溃问题了。当应用程序出现未 catch 的异常时就会发生崩溃,本文介绍了客户端应用崩溃的处理流…

javaSE - Arrays - 数组的定义与使用

一、数组基本用法 1.1、什么是数组 数组本质上就是让我们能 “批量” 创建相同类型的变量 也可以说是存储一组相同数据类型的数据的集合 如: 如果需要表示两个数据, 那么直接创建两个变量即可 int a; int b 如果需要表示五个数据, 那么可以创建五个变量 int a1; int a2; int …

uni-app入门:自定义组件实现父子组件参数传递

1.属性绑定:父组件传递参数到子组件 2.事件绑定:子组件传递参数到父组件 3.获取组件对象实例:父组件获取子组件实例对象进行参数传递 1.属性绑定:父组件传递参数到子组件首先交代一下基本的项目信息:主页面为index.wxml,创建test子组件,文件目录:component/test/test…

惠柏新材创业板IPO过会:上半年营收9.3亿 拟募资3.4亿

雷递网 雷建平 11月28日惠柏新材料科技(上海)股份有限公司(简称:“惠柏新材”)日前IPO过会,准备在深交所创业板上市。惠柏新材计划募资3.42亿元,其中,1.8亿元用于上海帝福3.7万吨纤维…

xss-labs/level9

这一关界面感觉跟上一关很像 所以我们注入上一关的为编码的答案 javascript:alert(xss) 没能弹窗 查看源代码 他说我输入的链接不合法 我压根没有输入链接 我觉得后台应该是做了一个条件的判断 应该是要有链接才会在第二处输出点回显我们的输入 根据上面的猜测 我们构造如下…

网络的根基

hi 大家好,上个周末带小伙伴,一起复习了一遍网络协议,对网络协议的核心知识进行梳理,希望大家早日掌握这些核心知识,打造自己坚实的基础,为自己目标慢慢积累,等到自己春天的到来。详细点击查看…

设计模式学习笔记

文章目录23种设计模式学习笔记1.创建型模式1 单例模式2 工厂模式3 抽象工厂模式4 建造者模式5 原型模式2.结构型模式6 代理模式7 适配器模式8 桥接模式9 装饰模式10 外观模式11 组合模式12 享元模式3.行为型模式13 策略模式14 观察者模式15 责任链模式16 模板模式17 状态模式18…

Maven程序 tomcat插件安装与web工程启动

第一步:在mvnrepository库中找到tomcat插件 1.打开mvnrepository官网,搜索“tomcat maven”向下滑动找到“org.apache.tomcat.maven ”点进去 2.在这里点第一个“Apache Tomcat Maven Plugin :: Tomcat 7.x” 3.在这里选择2.1版本相对来说比较稳定 4.复…

jsp393学生宿舍管理系统mysql

两个权限 管理员和 学生 1. 学生信息管理 添加学生信息(学生号,姓名 院系 班级入学日期 )修改学生信息 学生退宿舍(可以删除指定的学生也可以成批删除) 2. 宿舍信息管理 宿舍的基本信息(公寓数 宿舍…