Como usar no app
Onde encontrar
Aba Gerador. O segmentado Tipo no topo escolhe entre Senoide, Sweep e Ruído Rosa.
Exemplo de uso: tunar um sistema com ruído rosa e o RTA
- Escolha Ruído Rosa, ajuste o Nível a uns 40–50% e toque em Tocar.
- Vá para a aba RTA, Modo "Curva", fração 1/3 de oitava — o ruído rosa deve aparecer como uma linha reta se o compensador de largura de banda estiver desligado.
- Ajuste a EQ do sistema até a curva medida ficar o mais parecida possível com a curva-alvo escolhida (ver Curvas-Alvo).
Exemplo de uso: gerar um tom de referência para calibrar outro equipamento
- Escolha Senoide e digite 1000 Hz no campo de Frequência (a referência mais comum para calibração).
- Ajuste o Nível conforme necessário e toque em Tocar.
- Alimente o equipamento sendo calibrado por uma saída de linha, não pelo alto-falante do aparelho — o card "Precisão da geração" lembra disso para medições confiáveis.
Senoide
- Campo numérico de Frequência (teclado decimal, com botão "Concluir" para fechá-lo) mais um slider logarítmico cobrindo 20 Hz a 20.000 Hz — os dois controlam o mesmo valor.
- Slider de Nível, 0 a 100%.
- Botão Tocar/Parar inicia e encerra a reprodução.
Sweep
- Segmentado Direção: Subida ↑ ou Descida ↓.
- Slider de Duração, 1 a 30 s (padrão 10 s).
No app, o sweep é uma ferramenta manual: toque em Tocar e observe o RTA (ou um analisador externo) enquanto ele varre. Ele não alimenta a função de transferência do Spectra — essa mede H1/coerência ao vivo sobre qualquer programa de áudio, sem precisar de sweep.
Ruído rosa
Sem controles além do slider de Nível, comum aos três tipos.
Card "Precisão da geração"
Mostra a frequência realmente sintetizada (Senoide) ou a taxa de amostragem de saída em uso (Sweep/Ruído Rosa). Se o oscilador e o nó de saída estiverem em taxas diferentes — o que só deveria acontecer em cenários anômalos de troca de rota —, um aviso aparece: "O oscilador e a saída estão em taxas diferentes — a frequência sai desafinada. Reinicie o áudio." O card também lembra que a síntese digital é exata, mas a caixa/sala/EQ depois do alto-falante não são corrigidos pelo app — para medição de precisão, use uma saída de linha ou interface externa em vez do alto-falante do aparelho.
O gerador continua tocando ao trocar de aba (não é parado ao sair da tela do Gerador), mas é interrompido automaticamente se o app for para segundo plano.
O canal e a rota de saída (alto-falante, fone, AirPlay, Bluetooth) são escolhidos em Ajustes › I/O — "Canal (saída)" (só aparece com mais de um canal disponível) e "Rota de saída".
Senoide de fase contínua
O SineOscillator acumula fase em precisão dupla
(Double), o que permite mudar a frequência amostra a amostra — essencial
para o sweep — sem cliques de descontinuidade entre buffers:
A 48 kHz, o incremento de fase para 20 Hz é de apenas ~0,0026 rad, e a precisão dupla
mantém isso com erro da ordem de 1e-19 — a fase não deriva mesmo em sessões longas,
graças ao wrap exato para [0, 2π) a cada amostra.
AVAudioSession
reportava antes de a sessão ser configurada, enquanto o nó de saída acabava
montado com a taxa real. Quando divergiam — no Simulator, ou depois de trocar rota de
áudio no aparelho — toda frequência saía escalada pela razão entre as duas: 1 kHz
virava 918,75 Hz com o oscilador assumindo 48 kHz e o nó rodando a 44,1 kHz. O
oscilador agora acompanha a taxa real do nó, e a tela mostra a taxa em uso.
Sweep logarítmico (ESS)
De 20 Hz a 20 kHz, tempo igual por oitava (ao contrário de um sweep linear, que gasta o mesmo tempo por Hz) — a forma padrão de exponential sine sweep usada em medição de resposta em frequência de salas e alto-falantes3:
Propriedade característica, testada: o ponto médio no tempo (t = T/2) cai
exatamente na média geométrica dos extremos
(√(f_início · f_fim)).
No Spectra o sweep é uma ferramenta de geração de sinal de teste — para varrer um sistema manualmente enquanto se observa o RTA ou um analisador externo. A função de transferência do app não depende dele: ela mede em tempo real sobre qualquer programa de áudio, sem precisar sincronizar captura com um sweep.
Ruído rosa
−3 dB por oitava, sintetizado a partir de ruído branco pelo filtro IIR de 3 polos "econômico" de Paul Kellett4 — não o método Voss-McCartney, e sim três estágios em paralelo:
onde w é uma amostra de ruído branco em [−1, 1] e 0,11 é o fator de escala empírico da implementação original de Kellett.
A fonte de ruído branco usada é um xorshift32 (três operações
bit a bit), não o gerador criptográfico do sistema
(Float.random(in:)/arc4random_buf) — trocado na revisão
v0.12.0 porque o gerador criptográfico pode fazer chamada de sistema, e isso rodava
48 mil vezes por segundo dentro do callback de áudio em tempo real, onde
qualquer chamada que possa travar é proibida.
Sincronização com a taxa real
O GeneratorEngine orquestra os três tipos atrás de uma única chamada de
render, com sampleRate atualizado sempre que o formato de saída do
AVAudioEngine é (re)estabelecido — nunca divergindo da taxa real do nó,
pela mesma razão descrita acima para o oscilador de senoide.