Audio 的一些小笔记
1.在做项目的过程中,对于volume 我们有一个volume curve,就是 0~63 step,每个step对应一个dB值,例如0step对应-90dB, 63 step对应0dB。关于这个0dB,是由客户规定的,最大的输出是9V,20W,阻抗4Ω。dB一般是负值,dBa是由分贝仪测出来的,dBa有一套专门的标准来测
2.Balance(左右) 和 Fader(前后)是用来调节左右前后音量的, 调节Balance,对左边或者邮编的dB进行减少,Fader调前后,可以见下图
3.Loudness,对于当前音量,有一个低频/高频的音量补偿,直接上代码,
; /*take care of this value, volume table boost 18db for each step, so when calculate the volume table + LoudnessOffset, need attentuate 18db, so define the init value to -18*/ ; static float OffsetPoints[CalNofPoints] = {0.0F, -10.0F, -20.0F, -30.0F, -40.0F, -50.0F, -60.0F, -70.0F,-80.0F, -90.0F, -90.0F}; static float BassBoostValues[CalNofPoints] = {0.0F, 0.0F, 0.0F, 2.0F, 5.0F, 6.0F, 7.0F, 12.0F, 13.5F, 15.0F, 15.0F}; static float BassFilterFrequence[CalNofPoints] = {80.0F, 80.0F, 80.0F, 80.0F, 100.0F, 200.0F, 250.0F, 350.0F, 400.0F, 400.0F, 400.0F}; static float TrebleBoostValues[CalNofPoints] = {0.0F, 0.0F, 0.0F, 1.0F, 1.5F, 2.5F, 3.5F, 4.0F, 4.5F, 5.0F, 5.0F}; static float TrebleFilterFrequence[CalNofPoints] = {12000.0F, 12000.0F, 12000.0F, 12000.0F, 12000.0F, 11000.0F, 10000.0F, 9000.0F, 8000.0F, 7000.0F, 7000.0F}; float interpolate(float const x, uint_t const nof, float const xValues[], float const yValues[])//return y { float yRetval = 0.0F; //yValues are expected to be constant rising or falling //nof at least 2 otherwise there is nothing to interpolate <=nof) { uint_t ; ] < xValues[last]; //check lower limit ])) || ((!rising) && (x > xValues[])) ) { yRetval = yValues[]; } //check upper limit else if ( ( (rising) && (x > xValues[last])) || ((!rising) && (x < xValues[last])) ) { yRetval = yValues[last]; } else//interpolate { //find index for x value uint_t index = ; ;i<last;i++) { ]) ) ||( (!rising) && (xValues[i] >= x) &&(x >= xValues[i+]) ) ) { index = i; break; } } //interpolate ]; ]; //check xDiff not 0 if (fabs(xDiff) <= FLT_EPSILON) { yRetval = yValues[index]; } else//xDiff not 0 -> calculate y { const float gradient = yDiff / xDiff; const float yOffset = (x-xValues[index]) * gradient; yRetval = yValues[index] + yOffset; } } }//check nof return yRetval; } bool_t CavDiranaRoutingCfg::getLoudnessCurveBoost(uint16_t filterID, uint16_t cfgID, float volume, float& loudnessBoost) const { bool_t retval = true; if(m_isLoudnessEnable == true) { ; EFilterID filtertype = static_cast<EFilterID>(filterID); loudnessBoost = ; //volume -> loudnessBoost OverallOffset = LoudnessOffset + volume; if (filtertype == FILTER_LOUDNESS_BASS) { loudnessBoost = interpolate(OverallOffset, CalNofPoints, OffsetPoints, BassBoostValues); } else if (filtertype == FILTER_LOUDNESS_TREBLE) { loudnessBoost = interpolate(OverallOffset, CalNofPoints, OffsetPoints, TrebleBoostValues); } } else { retval = false; } return retval; } bool_t CavDiranaRoutingCfg::getLoudnessCurveFilterPrm(uint16_t filterID, uint16_t cfgID, float volume, float& frequency, float& quality) const { bool_t retval = true; if(m_isLoudnessEnable == true) { ; EFilterID filtertype = static_cast<EFilterID>(filterID); quality = ; frequency = ; //volume -> bass filterprm OverallOffset = LoudnessOffset + volume; if (filtertype == FILTER_LOUDNESS_BASS) { frequency = interpolate(OverallOffset, CalNofPoints, OffsetPoints, BassFilterFrequence); } else if (filtertype == FILTER_LOUDNESS_TREBLE) { frequency = interpolate(OverallOffset, CalNofPoints, OffsetPoints, TrebleFilterFrequence); } } else { retval = false; } return retval; }
4.Adjustable Bass, Midrange, and Treble tone controls. 是对低频中频高频的一个调节
The bass tone control shall have the following characteristics:
fcenter = 80Hz
Filter: Shelving type, 1st order
The midrange tone control shall have the following characteristics:
fcenter = 775Hz
Filter: Peaking type, 2nd order, Q value calibratable with initial value of 1.1
The treble tone control shall have the following characteristics:
fcenter = 8kHz
Filter: Shelving type, 1st order
5.Source Offset
按照需求,对于不同的source,有不同的音量输出要求,在原来的音量上面进行一个dB值的调整
Audio 的一些小笔记的更多相关文章
- 转:【iOS开发每日小笔记(十一)】iOS8更新留下的“坑” NSAttributedString设置下划线 NSUnderlineStyleAttributeName 属性必须为NSNumber
http://www.bubuko.com/infodetail-382485.html 标签:des class style 代码 html 使用 问题 文件 数据 ...
- 小笔记:Timer定时间隔时间操作
小笔记:Timer定时间隔时间操作,后面有时间再补充和完善: public class TimingSvc { /// <summary> /// 定时器,执行定时任务 /// </ ...
- 关于 linux中TCP数据包(SKB)序列号的小笔记
关于 SKB序列号的小笔记 为了修改TCP协议,现在遇到了要改动tcp分组的序列号,但是只是在tcp_sendmsg函数中找到了SKB的end_seq 一直没有找到seq 不清楚在那里初始化了,就 ...
- Linux下postgres9.4 版本的单机版安装小笔记
1.添加RPMyum install https://download.postgresql.org/pub/repos/yum/9.4/redhat/rhel-7-x86_64/pgdg-redha ...
- 深入剖析Nginx一点小笔记
前几天在图书馆看书,恰好看到这本<深入剖析nginx>,花了快一周的时间看完了这本书,写点笔记心得便于以后复习. 以前对nginx的认识就只是停留在一个反向代理服务器上.百度了一下ngin ...
- HTML、CSS(小笔记)
这是我自己在学习html.css时觉得要记的东西太多总结一些较为常用的标签. HTML <p></p>段落标签 <hn></hn>标题标签n数值为1~6 ...
- Angular开发小笔记
一.父组件怎么覆盖子组件的样式呢 1./deep/(不建议这么做,以后angular会取消,因为这样写不利于组件的独立性) 在父组件的scss里面写: :host{ 子组件名 /deep/ label ...
- Git-rebase 小笔记
转自: https://blog.yorkxin.org/posts/2011/07/29/git-rebase/ 最近刚好有个机会整理很乱的Git commit tree,终于搞懂了rebase 的 ...
- css通用小笔记03——浏览器窗口变小 div错位的问题
我最近写网页的时候,经常碰到一个普遍的问题,经过我的查阅和尝试,终于解决了这一问题,这里有两种方法提供给大家,如果博友还有更好的方法,欢迎补充. 一.使用min-width属性: 我们先看看下面这段代 ...
随机推荐
- EM界面 ORA-12505: TNS: 监听程序当前无法识别连接描述符中所给出的 SID (DBD ERROR: OCIServerAttach)
我的是10g,打开EM,另外都正常,就有这个问题到实例的代理连接 状态 失败 详细资料 ORA-12505: TNS: 监听程序当前无法识别连接描述符中所给出的 SID (DBD ERROR: OCI ...
- Python 程序员经常犯的 10 个错误
关于PythonPython是一种解释性.面向对象并具有动态语义的高级程序语言.它内建了高级的数据结构,结合了动态类型和动态绑定的优点,这使得... 关于Python Python是一种解释性.面向对 ...
- [ADB]ADB(Android Debug Bridge)简介及基础(不包含命令)
"Android Debug Bridge (adb) is a versatile command line tool that lets you communicate with an ...
- python 读取并显示图片的两种方法
在 python 中除了用 opencv,也可以用 matplotlib 和 PIL 这两个库操作图片.本人偏爱 matpoltlib,因为它的语法更像 matlab. 一.matplotlib 1. ...
- 全新的跨平台app软件开发工具——Lae软件开发平台
Lae是一款运行于windows的界面开发工具,具有所见即所得.开发跨平台.UI布局自由.机制简单.维护容易等诸多优点,可以开发同时运行在windows.Linux.MacOX.iOS.Android ...
- 1-Spark高级数据分析-第一章 大数据分析
1.1 数据科学面临的挑战 第一,成功的分析中绝大部分工作是数据预处理. 第二,迭代与数据科学紧密相关.建模和分析经常需要对一个数据集进行多次遍历.这其中一方面是由机器学习算法和统计过程本身造成的. ...
- 关于一个通俗易懂的FFT的C语言实现教程
找到一个通俗易懂并且神奇并且有趣的FFT算法C语言实现教程:http://www.katjaas.nl/FFTimplement/FFTimplement.html 只要对矩阵比较熟悉就能在教程的辅助 ...
- JQuery 控制元素显示隐藏
JS在浏览器里面做调试的时候,先在浏览器里面找到页面代码加上断点来执行.然后根据执行情况来查找部分变量是否能找到,一点一点的排查内容.可以做筛选条件 部分隐藏.默认让部分条件加上.hide 默认隐藏, ...
- ✡ leetcode 171. Excel Sheet Column Number 字母转换为数字 --------- java
Related to question Excel Sheet Column Title Given a column title as appear in an Excel sheet, retur ...
- Chapter 1: Design the application architecture
1.1 Plan the application layers 提到了repository pattern,SoC(Separation of Concern), 进而提及MVC,Action/Act ...