OSLib possui algumas funções de som. Você poderá tocar músicas (.bgm, 'formato proprietário' e parecido com o formato ADPCM) e arquivos de som wav. O formato .bgm usa menos espaço, entretanto possui qualidade levemente inferior e não suporta stereo (pelo menos até o momento). Ele pode ser usado para músida de jogos, se seu Memory Stick possuir pouco espaço.
Um minuto do estilo de múvica do Mega Drive pode ter menos que 400 kb sem perder muita qualidade. Sons (.wav) usam mais espaço e não são tão rápidos quanto o formato .bgm. Quando os dados forem lidos (arquivo .bmg ou .wav), o .bgm é mais rápido por possuir menor quantidade de dados de leitura do MS.
Vamos ver como tocar um arquivo de música. Primeiro de tudo é necessário chamar oslInitAudio() para inicializar o sistema de áudio. Então, nõs podemos carregar e tocar nossos próprios sons. Exemplo:
OSL_SOUND *music, *sfx;
oslInit(0);
oslInitAudio();
music = oslLoadSoundFile("test.bgm", OSL_FMT_STREAM);
oslAssert(music); //Debug: verify that it could be loaded
sfx = oslLoadSoundFile("test.wav", OSL_FMT_NONE);
oslAssert(sfx); //Debug: verify that it could be loaded
oslPlaySound(music, 0);
oslPlaySound(sfx, 1);
Aqui está como as funções são usadas:
int oslInitAudio();
Inicializa o sistema de audio do OSLib. Obviamente, você pode precisar chamar-lo para habilitar o sistema de audio.
OSL_SOUND *oslLoadSoundFile(const char *filename, int stream);
Carrega um arquivo .wav ou .bmg. Você precisa apenas indicar o nome do arquivo assim como se deseja começar o stream a partir do MemoryStick. Se você estiver realizando o stream (fluxo) em um arquivo de som, ele não será carregado na memória, fazendo que com isso ele poupe memória RAM pois o PSP possiu apenas 20Mb. Portanto imagine se você carregar efeitos de som de 1 mb cada, isto iria rapidamente saturar-la (memória é também compartilhada com seu código, variaveis, imagens e sons). Entretanto o streaming afeta a performance, especiamente para uma alta taxa de stream. Para melhorar a performance, eu aviso que é melhor você usar pequenos arquivos .wav carregados para os efeitos sonoros e streans de .bmg para músicas. Você pode também realizar o stream em efeitos sonoros, mas apenas aqueles que são raramente tocados.
void oslAudioVSync();
Chame isso no seu loop principal, se você precisar realizar stream de alguns sons. Porque? quando você coloca seu PSP em modo stand-by, o kernel fecha todos os arquivos abertos. Então, obviamente o sistema de áudio vai deixar de funcionar. Agora o OSLib gerencia os arquivos, mas será necessário reabrir os arquivos mais tarde para continuar, e isso não é possível diretamente quando o PSP "acordar" (quando o PSP sai do modo stand-by) Essa função irá verificar que o MS está pronto, e assim recarregará os arquivos. Entretanto, os arquivos serão recarregados automaticamente (mas reiniciados do início) quando for chamado oslPlaySound. Exatamente os mesmos arquivos que foram abertos em modo streaming, mas não aquele exato momento.
Structures
OSL_SOUND
Armazena dados sobre os sons carregados na memória. Muitas funções de audio irão usá-la.