在播放声音时检测静音

时间:2014-05-07 16:33:43

标签: asterisk

我正在开发一个java-asterisk应用程序,它正在呼叫订阅者传递消息。在通话过程中的某些时刻,我需要监控用户是在说话还是保持沉默。我需要监视相当长的时间(1-3秒)但不想中断传出消息的流动。 我现在的方式如下

streamFile(*file A*);
exec("WaitForSilence","300,1,1");
waitStatus=getVariable("WAITSTATUS");
streamFile(*file B*);

这样可以正常工作,但只有300毫秒检测和1秒超时,因此从用户的角度来看,文件A和文件B之间的静音几乎无法察觉。但如果我想听更长时间(例如3秒),那么用户的体验将会被破坏。

我需要的功能类似于" WaitForSilence"但是那个:

  • 与脚本并行运行;
  • 使用我定义的名称在可变通道中传递结果(因为可能有多次调用该函数,我需要获得所有结果)

我现在一直在寻找超过一周的时间,而且无法找到办法。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

你提供的代码会等待,之后会播放。

在一个应用程序中无法做到这一点。

可行的方式:

1)为此创建c / c ++应用程序(需要星号大师技能)。

2)创建另一个通道,将其与ChanSpy混合,并在该通道中进行静音检测。复杂性 - 星号专家。

两者都不是那么短(超过2-3个代码屏幕),因此无法在此站点中进行描述。

您也可以尝试使用后台应用程序,但我担心它也不会起作用。