# Engine Núcleo Python orientado a objetos para o fluxo de scanner. ```python from engine import Scanner from engine.domain import Content result = Scanner().scan(Content("asset-1", " texto ")) assert result.valid ``` As integrações reais devem implementar os protocolos em `content_analyzer.py`, `decision_engine.py`, `edit_plan.py`, `plan_applicator.py`, `validator.py` e `persistence.py`. O pacote não cria dependências externas por padrão. ## Análise de músicas instrumentais A análise musical local fica separada da análise de voz e segue este fluxo: ```text caso de uso da engine ↓ AnalisadorDeMusica (contrato) ↓ AnalisadorDeMusicaInstrumentalEssentia ↓ ResultadoDaAnaliseMusical ``` Arquivos principais: - `integracoes/audio/contratos.py`: contrato substituível do analisador; - `integracoes/audio/modelos_de_analise_musical.py`: resultado interno em PT-BR; - `integracoes/audio/provider_de_analise_musical_essentia.py`: adaptador local do Essentia; - `testes/test_analisador_de_musica_essentia.py`: testes unitários sem instalar Essentia. Exemplo de uso: ```python from engine.integracoes.audio import AnalisadorDeMusicaInstrumentalEssentia resultado = AnalisadorDeMusicaInstrumentalEssentia().analisar("musica.wav") print(resultado.generos, resultado.humores, resultado.batidas_por_minuto) ``` A dependência é carregada sob demanda. Para habilitar a análise, instale as dependências de `requirements-audio.txt`. O adaptador não persiste o resultado nem gera a descrição narrativa; essas responsabilidades ficarão no caso de uso e na apresentação, respectivamente.