Funções do Dialplan do Asterisk 23
Comando:
TALK_DETECT()
Sinopse:
Gera notificações quando o Asterisk detecta silêncio ou fala em um canal.
Descrição:
A função TALK_DETECT habilita eventos no canal ao qual é aplicada. Esses eventos podem ser emitidos através da AMI, ARI e potencialmente outros módulos do Asterisk que escutam as notificações internas.
A função possui dois parâmetros que podem ser opcionalmente passados quando 'set' é aplicado a um canal: dsp_talking_threshold e dsp_silence_threshold.
dsp_talking_threshold é o tempo em milissegundos de som acima do que o DSP estabeleceu como silêncio base para um usuário antes que o usuário seja considerado como falando. Por padrão, o valor de silencethreshold do arquivo dsp.conf é utilizado. Se esse valor for definido muito baixo, eventos podem ser acionados falsamente por variações no ruído ambiente. Valores válidos são de 1 até 2^31.
dsp_silence_threshold é o tempo em milissegundos de som abaixo do que o DSP estabeleceu como silêncio base antes que o usuário seja considerado silencioso. Se esse valor for definido muito baixo, eventos indicando que o usuário parou de falar podem ser enviados falsamente quando o usuário faz uma breve pausa no meio de uma frase. A melhor abordagem para esta opção é defini-la levemente acima do máximo de milissegundos de silêncio que um usuário pode gerar durante a fala natural. Por padrão, esse valor é 2500ms. Valores válidos são de 1 até 2^31.
Exemplos:
• Habilitar detecção de fala: same => n,Set(TALK_DETECT(set)=)
• Atualizar o limiar de silêncio da detecção de fala existente para 1200ms: same => n,Set(TALK_DETECT(set)=1200)
• Remover detecção de fala: same => n,Set(TALK_DETECT(remove)=)
• Habilitar e definir limiar de fala para 128: same => n,Set(TALK_DETECT(set)=,128)
Observação: A função TALK_DETECT utiliza um audiohook para inspecionar os quadros de mídia de voz em um canal. Outras funções, como JITTERBUFFER, DENOISE e AGC, usam mecanismo similar. Audiohooks são processados na ordem em que são colocados no canal. Por isso, geralmente faz sentido posicionar funções que modificam os dados de mídia de voz antes de posicionar a função TALK_DETECT, pois isso produzirá melhores resultados.
Exemplo: Reduzir ruído e então realizar detecção de fala:
same => n,Set(DENOISE(rx)=on) ; Reduzir ruído do áudio recebido
same => n,Set(TALK_DETECT(set)=) ; Realizar detecção de fala no áudio recebido já com redução de ruído
Parâmetros:
TALK_DETECT(action)
action
• remove - W/O. Remove a detecção de fala do canal.
• set(dsp_silence_threshold,dsp_talking_threshold) - W/O. Habilita TALK_DETECT e/ou configura os parâmetros de detecção de fala. Pode ser chamado múltiplas vezes para alterar parâmetros em um canal com detecção de fala já habilitada.
• dsp_silence_threshold - O tempo em milissegundos de som abaixo da opção dsp_talking_threshold quando um usuário é considerado como tendo parado de falar. O valor padrão é 2500.
• dsp_talking_threshold - A magnitude média mínima por amostra em um quadro para que o DSP considere fala/ruído presente. Um valor abaixo desse nível é considerado silêncio. Se não especificado, o valor vem da opção silencethreshold do dsp.conf ou 256 se dsp.conf não existir ou a opção silencethreshold não estiver definida.
Sintaxe:
same => n,Set(TALK_DETECT(set)=)
same => n,Set(TALK_DETECT(set)=1200)
same => n,Set(TALK_DETECT(remove)=)
same => n,Set(TALK_DETECT(set)=,128)
same => n,Set(DENOISE(rx)=on) ; Denoise received audio
same => n,Set(TALK_DETECT(set)=) ; Perform talk detection on the denoised received audio
TALK_DETECT(action)
Fonte: Asterisk Wiki