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属性: 我们先看看下面这段代 ...
随机推荐
- CoInitialize浅析一
大家都知道程序中若要使用COM组件则必须要先调用CoInitialize,该函数主要是用来初始化COM运行环境.但这个函数的作用域是以线程为单位还是以进程为单位呢?也许大家已经通过测试程序摸索出答案, ...
- 在RedHat上安装gcc,java 和 eclipse-rcp
本文全是如何用rpm包在红帽子54上安装gcc,automake,java和eclipse等,不是源代码编译,请大家不要误会了. 其实通过rpm包安装东西很简单,麻烦的是有很多rpm是要根据顺序进行先 ...
- cocos3.12预编译android报错RuntimeJsImpl.cpp
从coco官网下载了cocos2d-x-3.12.zip,在gen-libs生成prebuilt时,mac ,ios 平台都正常,android报错: jni/../../Classes/ide-su ...
- Lua Coroutine详解
协同程序与线程差不多,也就是一条执行序列,拥有自己独立的栈,局部变量和指令指针,同时又与其它协同程序共享全局变量和其它大部分东西.线程与协同程序的主要区别在于,一个具有多线程的程序可以同时运行几个线程 ...
- 调用外部js文件测试
test <p><img id="img" onclick="javascript:var s=document.createElement('scri ...
- 前台给后台传JSON字符串,后台解析并保存
前台 function BMSure() { var DanWeiName = $("[id$='BusinessName']").val(); var Address = $(& ...
- Adobe Flash builder 4的序列号
下载flex 4 之后,需要输入注册码(如果购买了正版就要选择第二个的单选框,无需输入注册码了) 1424-4258-9368-0713-8534-5128 1424-4806-8312-7960-9 ...
- Core Data浅谈初级入门
Core Data是iOS5之后才出现的一个框架,它提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保存在SQLite数据库文件中,也能够将保存在数据库中的数据还原成OC对象.在此数 ...
- java.lang.NoSuchMethodError: antlr.collections.AST.getLine()I错误解决
在J2EE框架下开发web网站,这种问题经常遇到,只要我们网上搜一下,就可以看到很多版本的,我整理一下: 第一种可能性解决:看看我的项目:主要 是里面的Structs 1.3 (structs 2)和 ...
- WingIDE中文乱码问题解决方法
WingIDE中文乱码问题解决方法 安装完WingIDE后,首次运行python脚本时,若脚本中含有UTF-8中文,在Debug I/O输出框中,全部变成了乱码. 这时其实我们设置下WingIDE的编 ...