294 lines
5.2 KiB
Markdown
294 lines
5.2 KiB
Markdown
< [Voltar](chapter-4.md) | [Sumário](table-of-contens.md) | [Adiante](chapter-6.md) >
|
|
|
|
# 🔊 Periférico AUDIO (Sistema de Som)
|
|
|
|
## 1. Visão Geral
|
|
|
|
O **Periférico AUDIO** é responsável pela **geração e mistura de som** no PROMETEU.
|
|
|
|
Assim como os demais subsistemas, o áudio:
|
|
|
|
- **não é automático**
|
|
- **não é gratuito**
|
|
- **não é mágico**
|
|
|
|
Cada som ouvido é resultado de **comandos explícitos**, executados sob **orçamento de tempo e recursos**.
|
|
|
|
> Som também consome tempo.
|
|
Som também consome memória.
|
|
>
|
|
|
|
---
|
|
|
|
## 2. Filosofia do Sistema de Áudio
|
|
|
|
PROMETEU trata áudio como:
|
|
|
|
- um **periférico ativo**
|
|
- com **canais limitados, previsíveis**
|
|
- e **comportamento determinístico**
|
|
|
|
O objetivo não é realismo absoluto, mas **clareza arquitetural**.
|
|
|
|
---
|
|
|
|
## 3. Componentes do Periférico AUDIO
|
|
|
|
O sistema de áudio é composto por:
|
|
|
|
- **Canais de áudio** — fontes independentes de som
|
|
- **Samples** — dados sonoros curtos
|
|
- **Music streams** — trilhas contínuas
|
|
- **Mixer** — combinação final dos canais
|
|
|
|
Cada componente tem custo explícito.
|
|
|
|
---
|
|
|
|
## 4. Canais de Áudio
|
|
|
|
### 4.1 Definição
|
|
|
|
Um **canal de áudio** representa uma fonte sonora independente.
|
|
|
|
Características:
|
|
|
|
- número máximo de canais é limitado
|
|
- cada canal toca **um som por vez**
|
|
- canais são misturados no output final
|
|
|
|
Exemplo conceitual:
|
|
|
|
```
|
|
Max Channels:8
|
|
```
|
|
|
|
---
|
|
|
|
### 4.2 Uso dos Canais
|
|
|
|
Quando um som é tocado:
|
|
|
|
```
|
|
audio.play(sampleId, channel)
|
|
```
|
|
|
|
Se o canal estiver ocupado:
|
|
|
|
- o som anterior pode ser interrompido
|
|
- ou a chamada pode ser ignorada
|
|
|
|
(dependendo da política definida)
|
|
|
|
|
|
PROMETEU **não gerencia prioridades automaticamente**.
|
|
|
|
---
|
|
|
|
## 5. Samples (Efeitos Sonoros)
|
|
|
|
### 5.1 Definição
|
|
|
|
Um **sample** é um trecho curto de áudio pré-carregado.
|
|
|
|
Usado para:
|
|
|
|
- efeitos (tiros, passos, colisões)
|
|
- feedback imediato
|
|
- sons repetitivos
|
|
|
|
Samples:
|
|
|
|
- ocupam memória
|
|
- são imutáveis durante execução
|
|
- devem ser carregados conscientemente
|
|
|
|
---
|
|
|
|
### 5.2 Custo dos Samples
|
|
|
|
Cada sample tem custo associado a:
|
|
|
|
- tamanho em memória
|
|
- taxa de reprodução
|
|
- duração
|
|
|
|
Reproduzir muitos samples simultaneamente:
|
|
|
|
- consome mais ciclos
|
|
- aumenta pressão no mixer
|
|
|
|
---
|
|
|
|
## 6. Music Streams (Trilha Sonora)
|
|
|
|
### 6.1 Definição
|
|
|
|
**Music streams** são sons contínuos, geralmente mais longos.
|
|
|
|
Características:
|
|
|
|
- tocados em loop ou sequência
|
|
- geralmente ocupam um canal dedicado
|
|
- podem ser streamados para reduzir uso de memória
|
|
|
|
---
|
|
|
|
### 6.2 Controle de Música
|
|
|
|
Operações típicas:
|
|
|
|
```
|
|
audio.musicPlay(trackId)
|
|
audio.musicStop()
|
|
audio.musicSetVolume(v)
|
|
```
|
|
|
|
Essas operações:
|
|
|
|
- têm custo explícito
|
|
- afetam o mixer global
|
|
|
|
PROMETEU não faz crossfade automático sem instrução explícita.
|
|
|
|
---
|
|
|
|
## 7. Mixer de Áudio
|
|
|
|
### 7.1 Função do Mixer
|
|
|
|
O **mixer** combina os canais ativos em um único sinal de saída.
|
|
|
|
O custo do mixer depende de:
|
|
|
|
- número de canais ativos
|
|
- complexidade do som
|
|
- efeitos aplicados (se houver)
|
|
|
|
Mais canais ativos → mais custo por frame.
|
|
|
|
---
|
|
|
|
### 7.2 Efeitos Simples
|
|
|
|
PROMETEU pode suportar efeitos básicos:
|
|
|
|
- volume por canal
|
|
- pan (esquerda/direita)
|
|
- mute
|
|
|
|
Efeitos:
|
|
|
|
- são explícitos
|
|
- têm custo mensurável
|
|
- não são aplicados automaticamente
|
|
|
|
---
|
|
|
|
## 8. Sincronização Temporal do Áudio
|
|
|
|
### 8.1 Relação com o Clock do Sistema
|
|
|
|
O áudio em PROMETEU é sincronizado com o **clock base de 60 Hz**.
|
|
|
|
Isso significa:
|
|
|
|
- atualizações de áudio ocorrem por frame
|
|
- eventos sonoros são disparados em ticks definidos
|
|
- latência é previsível e estável
|
|
|
|
---
|
|
|
|
### 8.2 Áudio como Evento
|
|
|
|
PROMETEU incentiva tratar áudio como **evento**, não como estado contínuo:
|
|
|
|
- tocar som ao ocorrer uma ação
|
|
- evitar chamadas repetidas por frame
|
|
- desacoplar áudio da lógica pesada
|
|
|
|
Isso reduz custo e melhora clareza.
|
|
|
|
---
|
|
|
|
## 9. Áudio e CAP
|
|
|
|
O sistema de áudio participa do **Execution CAP**:
|
|
|
|
- reprodução de sons consome ciclos
|
|
- mixagem entra no orçamento por frame
|
|
- picos de áudio são registrados
|
|
|
|
Exemplo de relatório:
|
|
|
|
```
|
|
Frame 24510:
|
|
audio.play():120cycles
|
|
audio.mixer():380cycles
|
|
```
|
|
|
|
Excessos:
|
|
|
|
- não bloqueiam o jogo
|
|
- aparecem na certificação
|
|
|
|
---
|
|
|
|
## 10. Boas Práticas de Áudio
|
|
|
|
PROMETEU incentiva:
|
|
|
|
- reutilizar samples
|
|
- limitar canais simultâneos
|
|
- tratar áudio como evento
|
|
- separar música de efeitos
|
|
|
|
E desencoraja:
|
|
|
|
- tocar sons repetidamente por frame
|
|
- usar muitos canais sem necessidade
|
|
- samples grandes para efeitos simples
|
|
|
|
---
|
|
|
|
## 11. Relação com Consoles Clássicos
|
|
|
|
O modelo de áudio PROMETEU é inspirado em:
|
|
|
|
- canais dedicados do NES
|
|
- mixagem simples do SNES
|
|
- hardware de áudio previsível
|
|
|
|
Mas abstraído para:
|
|
|
|
- clareza
|
|
- simplicidade
|
|
- ensino
|
|
|
|
O objetivo é entender **como o som é produzido**, não emular chips específicos.
|
|
|
|
---
|
|
|
|
## 12. Implicações Pedagógicas
|
|
|
|
O Periférico AUDIO permite ensinar:
|
|
|
|
- concorrência limitada
|
|
- eventos temporais
|
|
- impacto de recursos em tempo real
|
|
- separação entre lógica e apresentação sonora
|
|
|
|
Tudo isso com **feedback auditivo e mensurável**.
|
|
|
|
---
|
|
|
|
## 13. Resumo
|
|
|
|
- áudio é um periférico explícito
|
|
- canais são limitados
|
|
- samples ocupam memória
|
|
- mixagem consome ciclos
|
|
- áudio participa do CAP
|
|
- som é consequência de decisões técnicas
|
|
|
|
< [Voltar](chapter-4.md) | [Sumário](table-of-contens.md) | [Adiante](chapter-6.md) > |