嵌入式音频软件的架构

原创,如转载请注明出处。谢谢!

嵌入式产品中语音通信和音乐播放的软件架构是有差别的,这里还是把这两种case分开来讲。

1, 语音通信
语音通信的软件架构通常如下:

语音发送时由codec芯片采集到语音的模拟信号转换成PCM数据然后通过I2S总线发送给CPU(这是音频驱动负责的,不同的OS会有不同的驱动架构,会在后面音频采集和播放中详细讲,重点讲linux的)。CPU收到PCM数据后首先做前处理,主要包括回音消除(AEC)/噪声抑制(ANS)/自动增益控制(AGC)/VAD等,然后把PCM数据根据指定的codec编码成码流,再打上RTP包头,根据需要还有可能做FEC/重传语音的RTP包等以补偿网络的丢包。最后把生成的RTP包通过UDP socket发到网络中。

语音接收时首先通过UDP socket收RTP包,根据指定看是否需要做FEC等,然后把RTP包或者RTP包的payload(不同的方案有不同的做法)放进jitter buffer中等待取走。
从jitter buffer取时取走的是payload,也就是码流。然后对码流解码得到PCM数据,还要看是否需要做PLC/CNG等。最后把PCM数据通过I2S总线送给codec芯片再转换成模拟信号播放出来。这样双方就可以通话了。

2,音乐播放
音乐播放分播放本地音乐和播放云端音乐。播放本地音乐相对简单。播放云端音乐通常是边下载边播放,一般用DLNA或者Apple的Airplay等协议实现下载,其他的就跟
播放本地音乐一样了。播放本地音乐的软件架构通常如下:

首先要解析音频文件头得到相关信息,有codec类型,采样率,通道数等。然后根据这些对每一帧音频数据进行解码得到PCM数据,如果有需要的话还要做后处理,比如均衡器,使音乐更美妙动听。处理完后把PCM数据放进ring buffer中。播放线程会定时的从ring buffer中取走需要的PCM通过I2S总线送给codec芯片,codec芯片把PCM数据转换成模拟信号然后播放出来,这样就可以听到动听的音乐了。

时间: 2024-11-05 22:58:10

嵌入式音频软件的架构的相关文章

软件各种架构图收集

原文:软件各种架构图收集 发布一企业技术架构图,供大家参考. 该技术架构图是本人根据多年企业技术架构经验而制定,是企业技术的总架构图,希望对CTO们有所借鉴. 简单说明: 1.中间件基础运行环境是经过统一规划的以WebLogic.JBOSS为主的集群环境                             2.企业集成平台是以基础业务应用为基础服务于上层平台和基础业务应用的高度集成平台          3.数据中心是企业公共数据的集中管理比如用户数据.企业编码,可以通过数据集成平台或服务集

软件体系架构课下作业06

题目:对上学期学习的软件设计模式进行复习,对所有设计模式进行分析,用自己的话来阐述对他们的理解.(不少于2000字) 正如本学期所学习的软件体系架构,还有很多其他的软件工程技术一样,设计模式同样起源于建筑领域他是对前人经验的总结,为后人设计与开发基于面向对象的软件提供指导方针和成熟的解决方案. 从模式的目的而言,设计模式可以分为创建型.结构型和行为型三种.创建型模式主要用于创建对象,它包含5种模式,分别是:工厂方法模式.抽象工厂模式.建造者模式.原型模式和单例模式:结构型模式主要用于处理类和对象

非嵌入式数据库 软件很难普及 玩大

pg没有 嵌入版我不用 TMD 以后 写软件 就得玩 嵌入式数据库否则 根本 做不大的我是前车之鉴,人家 网页都几十万用户了 我还徘徊在5万以下原因就是 客户端软件的 安装巨麻烦 ,我用的是 sqlserver2005每个用户都安装 sql2005可见 有多失败光售后问题 就能让人 死好几回非嵌入式数据库 软件很难普及 玩大以后 再写软件 就一个exe,不需要安装 可以用weblone再网页中运行,也可以下载下来直接运行 不需要安装

Android嵌入式组态软件

Android嵌入式组态软件 介绍了嵌入式组态软件结构,以及界面设计.功能选择区设计.辅助功能区设计和程序生成区设计Android应用,采用Java开发嵌入式组态软件. Android嵌入式组态软件是通过拖拽思想进行程序设计的.开发人员将组件拖拽到设计界面,通过双击指定组件,并调整组件的属性,达到所需的效果. Android嵌入式组态软件功能选择区设计部分包括界面设计.IO设计和数据库设计.功能选择区的界面设计分为六个模块,分别为布局.按钮类.文本类.时间类.特殊类.属性组成.布局类中包括绝对布

软件设计架构

微信.陌陌等著名IM软件设计架构详解 http://wenku.it168.com/wenji/825 架构无小事:QQ碰微信 贴吧遇微博

第七章 Android嵌入式组态软件

本章内容属于项目篇,主要介绍了嵌入式组态软件结构,以及界面设计.功能选择区设计.辅助功能区设计和程序生成区设计Android应用,采用Java开发嵌入式组态软件. Android嵌入式组态软件是通过拖拽思想进行程序设计的.开发人员将组件拖拽到设计界面,通过双击指定组件,并调整组件的属性,达到所需的效果. 一.界面设计 1>创建一个Java工程,名称DroidDraw: 2>在目录org\droiddraw下会有一个main函数作为入口函数,然后进行界面初始化. 二.界面内容添加 将窗口进行分块

软件开发架构分析和架构模式一

架构分析: 架构分析工作主要从宏观上考虑一个软件系统应该如何组织.通常,在架构分析工作中,我们需要确定一些策略性的设计方针,原则和基本模式.在它们的指导下,我们可以高屋建瓴地分析软件系统的宏观结构,认识软件系统由哪些组件构成,了解组件之间的接口和协作关系.架构分析的结果对于后续的面向对象设计工作也是一种约束,有助于消除设计和实现过程中的随意性.因此,架构分析有时也被称为策略设计 组件指的是一组对象构成的,有固定接口的有机体,当设计者的观察视角不同,组件的规模不同或者组件内部的封装度程度不同时,这

aps - (Advanced Planning And Scheduling)高级生产计划软件的架构和设计

aps - (Advanced Planning And Scheduling) 高级生产计划软件的架构和设计 3 主资源和副资源 主资源简单的说就是某道工序在什么机器或生产线上生产,一般来说,一台机器可以用于生产多个产品,但一个产品也可以在多个机器上生产,比如车间有自动化生产线,半自动化生产线,都可以用来生产某个产品 如果好几类机器都可以加工某道工序,这就涉及到多主资源的选择,一般的企业对多主资源的选择有自己的要求,比如尽量使用半自动机器,安排不下再使用自动机器或相反,或者不管安排到那类机器,

音频软件消除人声的一点体会(cood edit ,goldwav)

音频软件消除人声的一点体会(cood  edit ,goldwav) 使用方法: 1.打开文件 2.命令处理(红色位置可以调整到你认为合适的数据或效果) 3.效果:两个软件均处理后的效果均可以接受.不能完全消除人声,但能减到比较低. 至于网络上有说的一种用千千静听的消音插件,暂时没有试过....期待下次再测评.