fix: a frase fecha quando a pessoa para de falar, e não no teto de 15s - #15
Merged
Conversation
O log do robo mostrou o defeito inteiro numa linha:
Processing audio with duration 00:15.000
VAD filter removed 00:10.288 of audio
ouvi: qual seu nome? Atlas, qual seu nome
Quinze segundos — o teto — para uma pergunta curta, com o reconhecimento
descartando dez deles como nao-fala, e duas perguntas grudadas numa so. **A
transcricao so comecava depois desses 15 segundos.** E dai a demora que ninguem
conseguia explicar olhando o modelo ou a voz: nenhum dos dois estava lento.
## A causa
if tem_voz:
quieto = 0
Um unico bloco de 30 ms acima do limiar zerava a contagem de silencio. Parece
inofensivo ate a voz de quem fala ficar perto do limiar: as silabas cruzam, as
pausas nao, e a contagem nunca chega ao fim. A gravacao so parava no teto.
E o limiar vinha subindo. Ele e medido uma vez, logo depois da saudacao, e nos
arranques deste robo deu 0.036, 0.041, 0.045, 0.057 — nos mais altos, a voz
passou a oscilar em volta dele e as frases pararam de fechar.
## As tres mudancas
**Um bloco solto nao e "ainda falando".** Sao precisos dois seguidos (60 ms)
para segurar a gravacao — pouco para atrapalhar uma silaba de verdade, o
bastante para um estalo, uma respiracao ou um pico do ar-condicionado nao
segurarem quinze segundos de audio.
**O teto caiu de 15 s para 10 s**, e bater nele passou a ser um aviso no log com
o limiar em uso. Ninguem faz uma pergunta de dez segundos a um robo: chegar la e
sintoma, nao normalidade, e agora ele diz isso em vez de so ficar lento.
**O limiar virou ajustavel** (`ROBOTEYE_HEARING_LIMIAR`). Medir a sala continua
sendo o padrao e acerta na maioria delas; o numero fixo existe para quando erra
— uma sala que estava barulhenta no instante da medicao deixava o robo surdo
pelo resto do dia, sem nenhuma forma de corrigir sem mexer no codigo.
De quebra, o fim de cada frase passa a aparecer no log com quanto durou e
quanto disso era voz. Era a linha que faltava para ver este defeito.
753 testes passam (eram 749). O que cobre o defeito reproduz o padrao exato —
um bloco acima do limiar a cada quatro, que e o que uma voz baixa produz — e
falha sem a correcao; conferido desfazendo-a.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0173mr3mDsAKQuPUNaPghe9v
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
O defeito inteiro, numa linha do log
Quinze segundos — o teto — para uma pergunta curta, com o reconhecimento descartando dez deles como não-fala, e duas perguntas grudadas numa só.
A transcrição só começava depois desses 15 segundos. É daí a demora que não dava para explicar olhando o modelo ou a voz: nenhum dos dois estava lento.
A causa
Um único bloco de 30 ms acima do limiar zerava a contagem de silêncio. Parece inofensivo até a voz de quem fala ficar perto do limiar: as sílabas cruzam, as pausas não, e a contagem nunca chega ao fim.
E o limiar vinha subindo. Ele é medido uma vez, logo depois da saudação, e nos arranques deste robô deu 0,036 · 0,041 · 0,045 · 0,057 — nos mais altos, as frases pararam de fechar.
As três mudanças
ROBOTEYE_HEARING_LIMIAR). Medir a sala continua sendo o padrão; o número fixo existe para quando erra — uma sala barulhenta no instante da medição deixava o robô surdo pelo resto do dia, sem forma de corrigir.De quebra, o fim de cada frase passa a aparecer no log com quanto durou e quanto disso era voz.
Verificação
🤖 Generated with Claude Code
https://claude.ai/code/session_0173mr3mDsAKQuPUNaPghe9v