mirror of
https://github.com/ZDoom/fluidsynth.git
synced 2025-02-23 20:31:43 +00:00
Move public functions to top of file and document them properly
This commit is contained in:
parent
78be6f7fe1
commit
fb374814c3
1 changed files with 95 additions and 78 deletions
|
@ -285,20 +285,13 @@ static int valid_inst_genid(unsigned short genid);
|
||||||
static int valid_preset_genid(unsigned short genid);
|
static int valid_preset_genid(unsigned short genid);
|
||||||
|
|
||||||
|
|
||||||
/* sound font file load functions */
|
/*
|
||||||
static int chunkid(unsigned int id)
|
* Open a SoundFont file and parse it's contents into a SFData structure.
|
||||||
{
|
*
|
||||||
unsigned int i;
|
* @param fname filename
|
||||||
unsigned int *p;
|
* @param fcbs file callback structure
|
||||||
|
* @return the parsed SoundFont as SFData structure or NULL on error
|
||||||
p = (unsigned int *)&idlist;
|
*/
|
||||||
for (i = 0; i < sizeof(idlist) / sizeof(int); i++, p += 1)
|
|
||||||
if (*p == id)
|
|
||||||
return (i + 1);
|
|
||||||
|
|
||||||
return UNKN_ID;
|
|
||||||
}
|
|
||||||
|
|
||||||
SFData *fluid_sf2_load(const char *fname, const fluid_file_callbacks_t *fcbs)
|
SFData *fluid_sf2_load(const char *fname, const fluid_file_callbacks_t *fcbs)
|
||||||
{
|
{
|
||||||
SFData *sf = NULL;
|
SFData *sf = NULL;
|
||||||
|
@ -353,6 +346,94 @@ SFData *fluid_sf2_load(const char *fname, const fluid_file_callbacks_t *fcbs)
|
||||||
return sf;
|
return sf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Close a SoundFont file and free the SFData structure.
|
||||||
|
*
|
||||||
|
* @param sf pointer to SFData structure
|
||||||
|
* @param fcbs file callback structure
|
||||||
|
*/
|
||||||
|
void fluid_sf2_close(SFData *sf, const fluid_file_callbacks_t *fcbs)
|
||||||
|
{
|
||||||
|
fluid_list_t *p, *p2;
|
||||||
|
|
||||||
|
if (sf->sffd)
|
||||||
|
fcbs->fclose(sf->sffd);
|
||||||
|
|
||||||
|
if (sf->fname)
|
||||||
|
FLUID_FREE(sf->fname);
|
||||||
|
|
||||||
|
p = sf->info;
|
||||||
|
while (p)
|
||||||
|
{
|
||||||
|
FLUID_FREE(p->data);
|
||||||
|
p = fluid_list_next(p);
|
||||||
|
}
|
||||||
|
delete_fluid_list(sf->info);
|
||||||
|
sf->info = NULL;
|
||||||
|
|
||||||
|
p = sf->preset;
|
||||||
|
while (p)
|
||||||
|
{ /* loop over presets */
|
||||||
|
p2 = ((SFPreset *)(p->data))->zone;
|
||||||
|
while (p2)
|
||||||
|
{ /* loop over preset's zones */
|
||||||
|
free_zone(p2->data);
|
||||||
|
p2 = fluid_list_next(p2);
|
||||||
|
} /* free preset's zone list */
|
||||||
|
delete_fluid_list(((SFPreset *)(p->data))->zone);
|
||||||
|
FLUID_FREE(p->data); /* free preset chunk */
|
||||||
|
p = fluid_list_next(p);
|
||||||
|
}
|
||||||
|
delete_fluid_list(sf->preset);
|
||||||
|
sf->preset = NULL;
|
||||||
|
|
||||||
|
p = sf->inst;
|
||||||
|
while (p)
|
||||||
|
{ /* loop over instruments */
|
||||||
|
p2 = ((SFInst *)(p->data))->zone;
|
||||||
|
while (p2)
|
||||||
|
{ /* loop over inst's zones */
|
||||||
|
free_zone(p2->data);
|
||||||
|
p2 = fluid_list_next(p2);
|
||||||
|
} /* free inst's zone list */
|
||||||
|
delete_fluid_list(((SFInst *)(p->data))->zone);
|
||||||
|
FLUID_FREE(p->data);
|
||||||
|
p = fluid_list_next(p);
|
||||||
|
}
|
||||||
|
delete_fluid_list(sf->inst);
|
||||||
|
sf->inst = NULL;
|
||||||
|
|
||||||
|
p = sf->sample;
|
||||||
|
while (p)
|
||||||
|
{
|
||||||
|
FLUID_FREE(p->data);
|
||||||
|
p = fluid_list_next(p);
|
||||||
|
}
|
||||||
|
delete_fluid_list(sf->sample);
|
||||||
|
sf->sample = NULL;
|
||||||
|
|
||||||
|
FLUID_FREE(sf);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Private functions
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* sound font file load functions */
|
||||||
|
static int chunkid(unsigned int id)
|
||||||
|
{
|
||||||
|
unsigned int i;
|
||||||
|
unsigned int *p;
|
||||||
|
|
||||||
|
p = (unsigned int *)&idlist;
|
||||||
|
for (i = 0; i < sizeof(idlist) / sizeof(int); i++, p += 1)
|
||||||
|
if (*p == id)
|
||||||
|
return (i + 1);
|
||||||
|
|
||||||
|
return UNKN_ID;
|
||||||
|
}
|
||||||
|
|
||||||
static int load_body(unsigned int size, SFData *sf, void *fd, const fluid_file_callbacks_t *fcbs)
|
static int load_body(unsigned int size, SFData *sf, void *fd, const fluid_file_callbacks_t *fcbs)
|
||||||
{
|
{
|
||||||
SFChunk chunk;
|
SFChunk chunk;
|
||||||
|
@ -1721,70 +1802,6 @@ static int fixup_sample(SFData *sf)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* close SoundFont file and delete a SoundFont structure */
|
|
||||||
void fluid_sf2_close(SFData *sf, const fluid_file_callbacks_t *fcbs)
|
|
||||||
{
|
|
||||||
fluid_list_t *p, *p2;
|
|
||||||
|
|
||||||
if (sf->sffd)
|
|
||||||
fcbs->fclose(sf->sffd);
|
|
||||||
|
|
||||||
if (sf->fname)
|
|
||||||
FLUID_FREE(sf->fname);
|
|
||||||
|
|
||||||
p = sf->info;
|
|
||||||
while (p)
|
|
||||||
{
|
|
||||||
FLUID_FREE(p->data);
|
|
||||||
p = fluid_list_next(p);
|
|
||||||
}
|
|
||||||
delete_fluid_list(sf->info);
|
|
||||||
sf->info = NULL;
|
|
||||||
|
|
||||||
p = sf->preset;
|
|
||||||
while (p)
|
|
||||||
{ /* loop over presets */
|
|
||||||
p2 = ((SFPreset *)(p->data))->zone;
|
|
||||||
while (p2)
|
|
||||||
{ /* loop over preset's zones */
|
|
||||||
free_zone(p2->data);
|
|
||||||
p2 = fluid_list_next(p2);
|
|
||||||
} /* free preset's zone list */
|
|
||||||
delete_fluid_list(((SFPreset *)(p->data))->zone);
|
|
||||||
FLUID_FREE(p->data); /* free preset chunk */
|
|
||||||
p = fluid_list_next(p);
|
|
||||||
}
|
|
||||||
delete_fluid_list(sf->preset);
|
|
||||||
sf->preset = NULL;
|
|
||||||
|
|
||||||
p = sf->inst;
|
|
||||||
while (p)
|
|
||||||
{ /* loop over instruments */
|
|
||||||
p2 = ((SFInst *)(p->data))->zone;
|
|
||||||
while (p2)
|
|
||||||
{ /* loop over inst's zones */
|
|
||||||
free_zone(p2->data);
|
|
||||||
p2 = fluid_list_next(p2);
|
|
||||||
} /* free inst's zone list */
|
|
||||||
delete_fluid_list(((SFInst *)(p->data))->zone);
|
|
||||||
FLUID_FREE(p->data);
|
|
||||||
p = fluid_list_next(p);
|
|
||||||
}
|
|
||||||
delete_fluid_list(sf->inst);
|
|
||||||
sf->inst = NULL;
|
|
||||||
|
|
||||||
p = sf->sample;
|
|
||||||
while (p)
|
|
||||||
{
|
|
||||||
FLUID_FREE(p->data);
|
|
||||||
p = fluid_list_next(p);
|
|
||||||
}
|
|
||||||
delete_fluid_list(sf->sample);
|
|
||||||
sf->sample = NULL;
|
|
||||||
|
|
||||||
FLUID_FREE(sf);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* free all elements of a zone (Preset or Instrument) */
|
/* free all elements of a zone (Preset or Instrument) */
|
||||||
static void free_zone(SFZone *zone)
|
static void free_zone(SFZone *zone)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue