Skip to content

About this page

On this page

Áudio ​

Esta seção está em beta. Veja a nota na folha de referência.

Como a maioria dos periféricos do PS2, o chip de som (SPU2) é hardware do lado do IOP. Não há caminho direto do EE para o SPU2. Todo pacote de áudio deste SDK é um driver IOP que acessa os registradores do SPU2 ou um cliente do lado EE que alcança um deles por SIF (veja EE, IOP e SIF).

Camadas ​

Este SDK tem dois drivers SPU2 independentes em nível de registrador. Todo o resto é construído sobre um deles:

core/libsd  ─────┐                     core/libspu2 ─────┐
                 │                                        │
             world/sdr                            world/libsnd2 (MIDI/sequenciador)
      (wrapper RPC, IOP)                                  │
                                              world/rspu2drv (RPC, linka OS DOIS
                                               libsnd2 E libspu2)
  • libsd e libspu2 (ambos core) são drivers SPU2 independentes em nível de registrador, com acesso direto ao hardware. São implementações separadas, não versões do mesmo driver.
  • libsnd2 (world) é uma camada de MIDI/sequenciador construída sobre libspu2.
  • rspu2drv (world) é um driver exposto por RPC que linka estaticamente libsnd2 e libspu2.
  • sdr (world) é um wrapper RPC em volta do libsd (seu binário IOP é sdrdrv.irx).
  • ps2snd (core) é o cliente RPC do lado EE para o driver IOP que estiver rodando. É o que o seu código EE chama.
  • ahx (core) é um cliente RPC do lado EE separado para o driver de codec de áudio AHX do IOP (um formato de áudio comprimido). É independente dos drivers SPU2 acima.

audio ​

audio (world) é uma API de reprodução de nível mais alto: carregue um som, toque-o em um canal ou envie PCM a um stream para música e áudio de vídeo. Ele tem um driver IOP, audio.irx, que controla o SPU2 por meio do libsd, e uma biblioteca EE, libaudio.a, que o seu código linka. Sua licença é AFL-2.0, como o resto do tier world.

  • Sons e canais. audio_sound_load_apcm() envia um arquivo .adp para a memória do SPU2 e audio_play_sound() o toca no primeiro canal livre. Cada um dos 24 canais mantém seu próprio volume, pan e pitch.
  • Stream. audio_stream_start() define um formato (8 ou 16 bits, mono ou estéreo, de 8000 a 48000 Hz) e audio_stream_queue_pcm() o alimenta. A biblioteca converte para o que o SPU2 reproduz.
  • Efeitos. O SPU2 tem reverb e delay por hardware. audio_effect_set_preset() escolhe um de dez presets (room, studio, hall, space, echo, delay, pipe e outros), e audio_channel_set_effect_send() ou audio_stream_set_effect_send() envia um canal ou o stream por ele. Selecione o preset antes de carregar sons: o efeito do stream precisa de memória de trabalho da mesma RAM do SPU2.
  • Carregando o driver. Seu programa carrega libsd.irx e depois audio.irx antes de chamar audio_init(). Com o ps2build, embed_irx: [libsd, "audio:audio"] faz isso.

Dois exemplos, um player de sons e um gerador de tons, estão na pasta audio/examples do sdk-world. A referência da API cobre cada função, o formato .adp e as regras de threads.

Código escrito para o audsrv ​

audsrv-compat (world) fornece a API do audsrv sobre o audio, de modo que o código existente compila e roda sem mudanças no fonte: linke audsrv-compat e embuta o driver sob o símbolo antigo com embed_irx: [libsd, "audio:audsrv"]. Áudio de CD não é suportado e as chamadas de CD retornam erro. A referência da API tem um guia de migração com uma linha por chamada do audsrv.

O audsrv original continua disponível como repositório próprio, sob sua própria licença.

libmad (world) decodifica MP3 em amostras PCM. Ele alimenta o audio ou um dos drivers de nível mais baixo para a reprodução.

Resumo das camadas ​

NecessidadePacote
Efeitos sonoros, streams de música, reverbaudio
Controle em nível de voz, DSP personalizadolibsd, libspu2, ps2snd
Sequenciamento MIDIlibsnd2
Decodificação de MP3libmad

Veja também ​

  • EE, IOP e SIF - por que a maioria dos pacotes emparelha um cliente EE com um driver IOP
  • Pacotes - a divisão de licenças entre core e world