---- struct ast_dsp *talkdetector = NULL; /* talk detector dsp */ int talkbreakpoint = 1000; int talkthreshold = 256; int talksilencecount = 0; int talksilence = 0; int talkgotsilence = 0; ---- talkval = pbx_builtin_getvar_helper(chan,"MEETME_TALK_BREAKPOINT"); if (talkval) talkbreakpoint = atoi(talkval); talkval = pbx_builtin_getvar_helper(chan,"MEETME_TALK_THRESHOLD"); if (talkval) talkthreshold = atoi(talkval); ---- talkdetector = ast_dsp_new(); if (!talkdetector) { ast_log(LOG_WARNING, "Unable to create silence detector :(\n"); return -1; } ast_dsp_set_threshold(talkdetector, talkthreshold); ---- if (f->frametype == AST_FRAME_VOICE) { talksilencecount = 0; ast_dsp_silence(talkdetector, f, &talksilencecount); if (talksilencecount) { talksilence = talksilencecount; } else { talksilence = 0; } ast_dsp_silence(noisedetector, f, &noisesilencecount); if (noisesilencecount) { noisesilence = noisesilencecount; noisegotsilence = 1; } else { noisesilence = 0; } if (talksilence > talkbreakpoint) { if (!talkgotsilence) { manager_event(EVENT_FLAG_CALL, "MeetmeSilent", "Channel: %s\r\n" "Uniqueid: %s\r\n" "MeetmeConf: %s\r\n" "MeetmeUser: %i\r\n", chan->name, chan->uniqueid, conf->confno, user->user_no); talkgotsilence = 1; } } else { if (talkgotsilence) { manager_event(EVENT_FLAG_CALL, "MeetmeTalking", "Channel: %s\r\n" "Uniqueid: %s\r\n" "MeetmeConf: %s\r\n" "MeetmeUser: %i\r\n", chan->name, chan->uniqueid, conf->confno, user->user_no); talkgotsilence = 0; } }