SONS - OpenMMO/openMMO GitHub Wiki
##Format des fichiers snmci., snmcf. et snmcd._
Sur cette page vous seront exposés tous les algorithmes et les constantes nécessaires à la programmation de votre propre éditeur de sons.
##Contenu des fichiers ._
Le fichier snmci._ contient la liste des sont ainsi que les infos propres à chaque son ou musique, le fichier snmcf._ contient les sons (.mp3), le fichier snmcd._ contient les musiques (.wav).
##Structures pour chaque fichier ._
###Structures pour le fichier snmci._
unsignef long nbsound;
typedef struct
{
unsigned char lg_name;
char name[];
unsigned long start;
unsigned long size;
unsigned short samplerate;
unsigned char bit_depth;
unsigned char format;
char * data;
} LISTINFO, *LPLISTINFO;
###Structures pour les sons contenus dans les fichiers snmcf._ et snmcd._
typedef struct
{
unsigned char riff_tag[4];
unsigned long lg_chunkndata;
unsigned char wave_tag[4];
unsigned char fmt_tag[4];
unsigned long lg_fmt;
short wFormat_tag;
short wChannels;
unsigned long dwSamplesPerSec;
unsigned long dwAvgBytesPerSec;
short wBlockAlign;
short dwbitpersample;
unsigned char data_tag[4];
unsigned long lg_data;
} SOUNDHEADER, *LPSOUNDHEADER;
##Exemple de chargement des sons
###Exemple en pascal pou changer
procedure loadsound();
var lg_name : byte;
begin
blockread(ficlist, nbsound, 4);
setlength(list, nbsound);
for i := 0 to nbsound - 1 do
begin
blockread(ficlist, lg_name, 1);
setlength(list[i].name, lg_name);
blockread(ficlist, list[i].name[1], lg_name);
blockread(ficlist, list[i].start, 4);
blockread(ficlist, list[i].size, 4);
blockread(ficlist, list[i].samplerate, 2);
BlockRead(ficlist, list[i].bit_depth, 1);
BlockRead(ficlist, list[i].format, 1);
setlength(list[i].data, size);
if (format = 1) then blockread(ficwave, list[i].data[0], size)
else blockread(ficmp3, list[i].data[0], size);
end;
end;
##Exemple de chargement des entêtes des sons
###Exemple en pascal
procedure extract(numsound : integer);
var
f : file;
begin
if (list[numsound].format = 1) then
begin
soundheader.riff_tag := 'RIFF';
soundheader.lg_chunkndata := list[numsound].size + 36;
soundheader.wave_tag := 'WAVE';
soundheader.fmt_tag := 'fmt';
soundheader.lg_fmt := 16;
soundheader.wFormat_tag := 1;
soundheader.wChannels := 1;
soundheader.dwSamplesPerSec := list[numsound].samplerate;
soundheader.dwAvgBytesPerSec := list[numsound].samplerate * (list[numsound].BitDepth div 8);
soundheader.dwbitpersample := list[numsound].bit_depth;
soundheader.wBlockAlign := :=(soundheader.dwbitpersample div 8) * soundheader.wChannels;
soundheader.data_tag := 'data';
soundheader.lg_data := list[numsound].size;
assignfile(f, list[numsound].name + '.wav');
rewrite(f, 1);
blockwrite(f, soundheader, sizeof(soundheader));
blockwrite(f, list[numsound].data[0], length(list[numsound].data));
closefile(f);
end
else
begin
assignfile(f, list[numsound].name +'.mp3');
rewrite(f,1);
blockwrite(fic,list[numsound].data[0], length(list[numsound].data));
closefile(fic);
end;
end;