public String noDataReceived() { /* * Create a packet of silence (linear 0) * The dtmf detector needs to know when a dtmf key * is released. If a phone stops sending immediately * after the dtmf key is released, we need to append * silence so that the dtmf detector will return * the dtmf key. */ int[] silence = new int[mediaInfo.getSamplesPerPacket()]; String dtmfKeys = null; dtmfKeys = processData(silence); if (Logger.logLevel >= Logger.LOG_DETAIL) { Logger.println("no data received, done processing dtmf with silence"); if (dtmfKeys != null) { Logger.println("silence. dtmf " + dtmfKeys); } } return dtmfKeys; }
public DtmfDecoder(MemberReceiver memberReceiver, MediaInfo mediaInfo) { this.memberReceiver = memberReceiver; this.mediaInfo = mediaInfo; decoder = new Decoder(); linearData = new int[mediaInfo.getSamplesPerPacket()]; decoder.setRate(mediaInfo.getSampleRate()); if (mediaInfo.getChannels() != 1) { /* * Must convert multi-channel to 1 */ try { sampleRateConverter = new SampleRateConverter( "DtmfDecoder", mediaInfo.getSampleRate(), mediaInfo.getChannels(), mediaInfo.getSampleRate(), 1); } catch (IOException e) { Logger.println("Call " + memberReceiver + " DtmfDecoder: " + e.getMessage()); } } }