以下程序用在16Khz的单声道或者8Khz的双声道的pcm数据的音量计算.
来源自搜索的各种资料加实际测试.
参考源暂未统计出.
注意要求的对数函数是log10,不是log.
int pcm_db_count(const unsigned char* ptr, size_t size)
{
int ndb = 0;
short int value;
int i;
long v = 0;
for(i=0; i<size; i+=2)
{
memcpy((char*)&value, ptr+i, 1);
memcpy((char*)&value+1, ptr+i+1, 1);
v += abs(value);
}
v = v/(size/2);
if(v != 0) {
ndb = (int)(20.0*log10((double)v / 65535.0 ));
}
else {
ndb = -96;
}
return ndb;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
|