Exemple #1
0
/* saves a sample into the datafile format */
static int save_sample_in_datafile(DATAFILE *dat, AL_CONST int *fixed_prop, int pack, int pack_kids, int strip, int sort, int verbose, int extra, PACKFILE *f)
{
   SAMPLE *spl = (SAMPLE *)dat->dat;

   *allegro_errno = 0;

   pack_mputw((spl->stereo) ? -spl->bits : spl->bits, f);
   pack_mputw(spl->freq, f);
   pack_mputl(spl->len, f);
   if (spl->bits == 8) {
      pack_fwrite(spl->data, spl->len * ((spl->stereo) ? 2 : 1), f);
   }
   else {
      int i;

      for (i=0; i < (int)spl->len * ((spl->stereo) ? 2 : 1); i++) {
	 pack_iputw(((int16_t *)spl->data)[i], f);
      }
   }

   if (*allegro_errno)
      return FALSE;
   else
      return TRUE;
}
Exemple #2
0
int save_midi(char *filename, MIDI *midi)
{
    int c;
    long len;
    PACKFILE *fp;
    int num_tracks = 0;
    
    if(!midi)
        return 1;
        
    fp = pack_fopen_password(filename, F_WRITE,"");                       /* open the file */
    
    if(!fp)
        return 2;
        
    for(c=0; c<MIDI_TRACKS; c++)
        if(midi->track[c].len > 0)
            num_tracks++;
            
    pack_fwrite((void *) "MThd", 4, fp);                      /* write midi header */
    
    pack_mputl(6, fp);                                        /* header chunk length = 6 */
    
    pack_mputw((num_tracks==1) ? 0 : 1, fp);                  /* MIDI file type */
    
    pack_mputw(num_tracks, fp);                               /* number of tracks */
    
    pack_mputw(midi->divisions, fp);                          /* beat divisions (negatives?) */
    
    for(c=0; c<num_tracks; c++)                               /* write each track */
    {
        pack_fwrite((void *) "MTrk", 4, fp);                    /* write track header */
        
        len = midi->track[c].len;
        pack_mputl(len, fp);                                    /* length of track chunk */
        
        if(pack_fwrite(midi->track[c].data, len, fp) != len)
            goto err;
    }
    
    pack_fclose(fp);
    return 0;
    
    /* oh dear... */
err:
    pack_fclose(fp);
    delete_file(filename);
    return 3;
}