<?php
# Sistema de reconhecimento de fala. Idioma português brasileiro.
# Mostra um menu de opções e cola o resultado no aplicativo em uso.
# Feito para windows (testado no Windows Vista). Licença: Domínio público.
# (c) 2010 Sony Fermino dos Santos - http://gigawiki.com/sony/
# Fornecido sem quaisquer garantias. Use por sua conta e risco.
# Veja instruções de uso em http://gigawiki.com/sony/reconhecimento-de-fala
#
# Parte destes comentários foi redigida verbalmente com este programa.
# abre comunicação com o Julius
$f = popen('julius -C opcoes.jconf', 'r');
while (true) {
# aguarda a saída de 10 opções do julius
$linha = '';
while (strpos($linha .= fread($f, 4096), 'sentence10') == false);
# separa as frases candidatas
preg_match_all('/sentence\d+.(.*)/m', $linha, $matches);
$opcoes = $matches[1];
# ignora a respiração
$opcoes = array_map('trim', $opcoes);
$opcoes = array_map('utf8_decode', $opcoes);
if (in_array('há um ano', $opcoes)) {
ignora('respiração', opcoes);
continue;
}
# monta um menu com as opções, e cola o resultado na aplicação corrente
menu($opcoes);
}
# monta um menu com as opções
function menu($opcoes) {
global $esta_janela;
# monta opções de comando
$op_cmd = '';
$tamanho = 0;
foreach($opcoes as $opcao) {
if ($opcao) {
# tira espaços repetidos
$opcao = preg_replace('/\s{2,}/', ' ', $opcao);
$op_cmd .= " \"$opcao\"";
$tamanho += strlen($opcao);
}
}
# na escolha da frase pode haver ruídos
# se o tamanho total for pequeno, ignora.
if ($tamanho < 50) return ignora("tamanho insuficiente: $tamanho", $opcoes);
# monta comando
# comando se o autohotkey estiver instalado (no vista):
# $comando = "\"c:\program Files\AutoHotkey\AutoHotkey.exe\" menu.ahk $op_cmd";
# comando para uso com menu.exe:
$comando = "menu $op_cmd";
# executa o comando
shell_exec($comando);
}
function ignora($motivo, $opcoes) {
# loga motivo
echo "\nIgnorando: $motivo\nOpções:\n";
foreach ($opcoes as $opcao) echo " '$opcao'\n";
return false;
}
?>