Leggere file audio dal cd-rom

30/09/2024

In questo nuovo episodio, affronterò un problema che sembra banale, ma invece mi ha fatto tribolare per non pochi giorni. Su Play Station 1 si può leggere i file audio – sia per effetti sonori che musiche – in diversi modi: si può usare dei file .XA, che sono una sorta di compilation di tracce audio, nella maggior parte dei casi sono utilizzati per le musiche, ma come racconto nel video linkato sotto, e nel video precedente, questa tecnica può essere usata anche per la telecronaca nei giochi come FIFA 98. Con questa tecnica è facile passare da una traccia all’altra, essendoci una lettura continua dal cd-rom, sorge un problema se abbiamo bisogno di leggere altri dati dal cd-rom per caricare assets di gioco, come nel caso di un cambio di schermata, il lettore è già impegnato, di conseguenza la musica si dovrà interrompere per qualche istante. Per ovviare a questa problematica, dobbiamo usare un metodo diverso, intanto useremo dei file .VAG, convertiti dai file .WAV con il programma VAG EDIT disponibile nell’SDK della ps1. Un file audio VAG sarà sicuramente più leggero di un WAV, ma avrà comunque una dimensione di almeno 4 MB, se non superiore, in media una traccia audio peserà sui 6 MB, la memoria RAM è 2 MB, e la memoria audio è 512 kb, è quindi impossibile caricare in memoria l'intero VAG. Quello che ho implementato è un sistema, che tramite un interrupt, riesce a capire quale byte la scheda audio sta leggendo, e di conseguenza a quale secondo è il play della musica. In sostanza vengono caricati in memoria i primi 300 kb della musica, quando si arriva al kb 100, carico i successivi 100 kb del file VAG nella memoria audio fra 0 e 100, quando la scheda audio arriva a 200 faccio la solita cosa con i byte fra 100 e 200, arrivati a 300 ripeto la solita cosa fra i byte 200 e 300, a quel punto la scheda audio rileggerà dal byte 0, trovandosi davanti ulteriori 300 kb di audio da "suonare", in questo modo, con 300 kb occupati e sempre impegnati, si riesce a leggere l'intero file audio, il lettore è sempre costantemente impegnato, ma si ha un margine di tempo, in cui il lettore può leggere altri dati, perché vi è comunque un cuscinetto di 300kb di audio già caricati in memoria, che equivalgono a diversi secondi, e si ha tutto il tempo per caricare dati dal cd-rom per la schermata successiva. Ecco svelato il mistero per cui nei Final Fantasy, la musica era sempre presente, non si interrompeva mai, e potevamo correre quanto volevamo fra le strade di Midgar, o nel garden di Balamb.