Пример #1
0
static void update_energy(VadDtxContext *v, int16_t *signal, int numsamples, uint64_t curtime) {
	int i;
	float acc = 0;
	float en;

	for (i=0;i<numsamples;++i){
		int s=signal[i];
		acc += s * s;
	}
	en = (sqrt(acc / numsamples)+1) / max_e;
	v->energy = (en * coef) + v->energy * (1.0 - coef);
	ortp_extremum_record_max(&v->max,curtime,v->energy);
	//ms_message("Energy=%f, current max=%f",v->energy, ortp_extremum_get_current(&v->max));
}
Пример #2
0
// note: number of samples should not vary much
// with filtered peak detection, variable buffer size from volume_process call is not optimal
static void update_energy(Volume *v, int16_t *signal, int numsamples, uint64_t curtime) {
	int i;
	float acc = 0;
	float en;
	int lp = 0, pk = 0;

	for (i=0;i<numsamples;++i){
		int s=signal[i];
		acc += s * s;

		lp = abs(s);
		if (lp > pk)
			pk = lp;
	}
	en = (float)((sqrt(acc / numsamples)+1) / max_e);
	v->energy = (en * coef) + v->energy * (1.0f - coef);
	v->level_pk = (float)pk / max_e;
	v->instant_energy = en;// currently non-averaged energy seems better (short artefacts)
	ortp_extremum_record_max(&v->max,curtime,v->energy);
	ortp_extremum_record_min(&v->min,curtime,v->energy);
}