Áudio beta
Seção nova, escrita à mão - veja a nota na folha de referência.
Como a maioria dos periféricos do PS2, o chip de som (SPU2) é hardware do lado IOP - não existe um caminho direto EE-para-SPU2. Todo pacote de áudio deste SDK é um driver IOP que de fato toca nos registradores do SPU2, ou um cliente do lado EE que alcança um deles via SIF (veja EE, IOP e SIF).
As camadas de verdade
Este SDK traz dois drivers SPU2 a nível de registrador genuinamente separados, e tudo mais se constrói em cima de um deles:
core/libsd ─────┐ core/libspu2 ─────┐
│ │
world/sdr world/libsnd2 (MIDI/sequenciador)
(wrapper RPC, IOP) │
world/rspu2drv (RPC, linka AMBOS
libsnd2 E libspu2)libsdelibspu2(ambos core) são drivers SPU2 independentes a nível de registrador - acesso direto ao hardware, não existe caminho mais primitivo para nenhum dos dois. Não são duas versões da mesma coisa; são duas implementações separadas que por acaso ambas existem na história deste código-base.libsnd2(world) é uma camada MIDI/sequenciador construída sobrelibspu2.rspu2drv(world) é um driver exposto por RPC que linka estaticamente tantolibsnd2quantolibspu2- o mais em camadas do grupo.sdr(world) é um wrapper RPC em torno delibsdespecificamente (seu próprio binário IOP se chama literalmentesdrdrv.irx).ps2snd(core) é o cliente RPC do lado EE que corresponde a qual desses drivers IOP estiver rodando - o que seu código EE de fato chama.ahx(core) é um cliente RPC do lado EE separado, especificamente para o driver de codec de áudio AHX do IOP (um formato de áudio comprimido, distinto dos drivers SPU2 gerais acima).
audsrv: o caminho fácil, deliberadamente fora dessa pilha
audsrv (repositório independente, não sdk-core/sdk-world) é uma API de reprodução de nível mais alto - enfileire um som, reproduza - e é de longe a forma mais fácil de colocar áudio em um projeto homebrew. Ele é mantido como seu próprio repositório em vez de um pacote sdk-core porque é LGPL-2, a única licença que o tier core deste SDK não permite (veja a política de licenças em Pacotes) - não porque seja de qualidade inferior ou não mantido.
libmad (world) decodifica MP3 - combine com audsrv (ou um dos drivers de nível mais baixo acima) para reprodução em vez de esperar que ele produza som sozinho; ele só transforma áudio comprimido em amostras PCM cruas.
Escolhendo uma camada
Para praticamente qualquer jogo real, audsrv é o ponto de partida certo - é a API construída para "eu tenho um efeito sonoro / uma faixa de música, toque," sem precisar entender vozes do SPU2, lotes, ou a encanação RPC diretamente. Recorra a libsd/libspu2/ps2snd diretamente só se audsrv genuinamente não conseguir fazer o que você precisa (efeitos de DSP sob medida, controle direto a nível de voz) - isso é um salto bem maior em complexidade.
Veja também
- EE, IOP e SIF - por que "cliente EE + driver IOP" é a forma de quase todo par de pacotes aqui
- Pacotes - a divisão de licenças core/world