instrum.c
上传用户:nini_0081
上传日期:2022-07-21
资源大小:2628k
文件大小:25k
源码类别:

多媒体编程

开发平台:

DOS

  1. /*
  2.     TiMidity -- Experimental MIDI to WAVE converter
  3.     Copyright (C) 1995 Tuukka Toivonen <toivonen@clinet.fi>
  4.     This program is free software; you can redistribute it and/or modify
  5.     it under the terms of the GNU General Public License as published by
  6.     the Free Software Foundation; either version 2 of the License, or
  7.     (at your option) any later version.
  8.     This program is distributed in the hope that it will be useful,
  9.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  10.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  11.     GNU General Public License for more details.
  12.     You should have received a copy of the GNU General Public License
  13.     along with this program; if not, write to the Free Software
  14.     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  15.    instrum.c 
  16.    
  17.    Code to load and unload GUS-compatible instrument patches.
  18. */
  19. #include <stdio.h>
  20. #include <string.h>
  21. #include <stdlib.h>
  22. #include "config.h"
  23. #include "common.h"
  24. #include "instrum.h"
  25. #include "playmidi.h"
  26. #include "output.h"
  27. #include "ctrlmode.h"
  28. #include "resample.h"
  29. #include "tables.h"
  30. #include "filter.h"
  31. /* Some functions get aggravated if not even the standard banks are 
  32.    available. */
  33. static ToneBank standard_tonebank, standard_drumset;
  34. ToneBank 
  35.   *tonebank[MAXBANK]={&standard_tonebank},
  36.   *drumset[MAXBANK]={&standard_drumset};
  37. /* This is a special instrument, used for all melodic programs */
  38. InstrumentLayer *default_instrument=0;
  39. /* This is only used for tracks that don't specify a program */
  40. int default_program=DEFAULT_PROGRAM;
  41. int antialiasing_allowed=0;
  42. #ifdef FAST_DECAY
  43. int fast_decay=1;
  44. #else
  45. int fast_decay=0;
  46. #endif
  47. int current_tune_number = 0;
  48. int last_tune_purged = 0;
  49. int current_patch_memory = 0;
  50. int max_patch_memory = 60000000;
  51. static void purge_as_required(void);
  52. static void free_instrument(Instrument *ip)
  53. {
  54.   Sample *sp;
  55.   int i;
  56.   if (!ip) return;
  57.   if (!ip->contents)
  58.   for (i=0; i<ip->samples; i++)
  59.     {
  60.       sp=&(ip->sample[i]);
  61.       if (sp->data) free(sp->data);
  62.     }
  63.   free(ip->sample);
  64.   if (!ip->contents)
  65.   for (i=0; i<ip->right_samples; i++)
  66.     {
  67.       sp=&(ip->right_sample[i]);
  68.       if (sp->data) free(sp->data);
  69.     }
  70.   if (ip->right_sample)
  71.     free(ip->right_sample);
  72.   free(ip);
  73. }
  74. static void free_layer(InstrumentLayer *lp)
  75. {
  76.   InstrumentLayer *next;
  77.   current_patch_memory -= lp->size;
  78.   for (; lp; lp = next)
  79.    {
  80.      next = lp->next;
  81.      free_instrument(lp->instrument);
  82.      free(lp);
  83.    }
  84. }
  85. static void free_bank(int dr, int b)
  86. {
  87.   int i;
  88.   ToneBank *bank=((dr) ? drumset[b] : tonebank[b]);
  89.   for (i=0; i<MAXPROG; i++)
  90.   {
  91.     if (bank->tone[i].layer)
  92.     {
  93.   /* Not that this could ever happen, of course */
  94.   if (bank->tone[i].layer != MAGIC_LOAD_INSTRUMENT)
  95.   {
  96.     free_layer(bank->tone[i].layer);
  97.     bank->tone[i].layer=NULL;
  98.     bank->tone[i].last_used=-1;
  99.   }
  100.     }
  101.     if (bank->tone[i].name)
  102.     {
  103.       free(bank->tone[i].name);
  104.       bank->tone[i].name = NULL;
  105.     }
  106.   }
  107. }
  108. static void free_old_bank(int dr, int b, int how_old)
  109. {
  110.   int i;
  111.   ToneBank *bank=((dr) ? drumset[b] : tonebank[b]);
  112.   for (i=0; i<MAXPROG; i++)
  113.     if (bank->tone[i].layer && bank->tone[i].last_used < how_old)
  114.       {
  115. if (bank->tone[i].layer != MAGIC_LOAD_INSTRUMENT)
  116.   {
  117.     ctl->cmsg(CMSG_INFO, VERB_DEBUG,
  118. "Unloading %s %s[%d,%d] - last used %d.",
  119. (dr)? "drum" : "inst", bank->tone[i].name,
  120. i, b, bank->tone[i].last_used);
  121.     free_layer(bank->tone[i].layer);
  122.     bank->tone[i].layer=NULL;
  123.     bank->tone[i].last_used=-1;
  124.   }
  125.       }
  126. }
  127. int32 convert_envelope_rate_attack(uint8 rate, uint8 fastness)
  128. {
  129.   int32 r;
  130.   r=3-((rate>>6) & 0x3);
  131.   r*=3;
  132.   r = (int32)(rate & 0x3f) << r; /* 6.9 fixed point */
  133.   /* 15.15 fixed point. */
  134.   return (((r * 44100) / play_mode->rate) * control_ratio) 
  135.     << 10;
  136. }
  137. int32 convert_envelope_rate(uint8 rate)
  138. {
  139.   int32 r;
  140.   r=3-((rate>>6) & 0x3);
  141.   r*=3;
  142.   r = (int32)(rate & 0x3f) << r; /* 6.9 fixed point */
  143.   /* 15.15 fixed point. */
  144.   return (((r * 44100) / play_mode->rate) * control_ratio) 
  145.     << ((fast_decay) ? 10 : 9);
  146. }
  147. int32 convert_envelope_offset(uint8 offset)
  148. {
  149.   /* This is not too good... Can anyone tell me what these values mean?
  150.      Are they GUS-style "exponential" volumes? And what does that mean? */
  151.   /* 15.15 fixed point */
  152.   return offset << (7+15);
  153. }
  154. int32 convert_tremolo_sweep(uint8 sweep)
  155. {
  156.   if (!sweep)
  157.     return 0;
  158.   return
  159.     ((control_ratio * SWEEP_TUNING) << SWEEP_SHIFT) /
  160.       (play_mode->rate * sweep);
  161. }
  162. int32 convert_vibrato_sweep(uint8 sweep, int32 vib_control_ratio)
  163. {
  164.   if (!sweep)
  165.     return 0;
  166.   return
  167.     (int32) (FSCALE((double) (vib_control_ratio) * SWEEP_TUNING, SWEEP_SHIFT)
  168.      / (double)(play_mode->rate * sweep));
  169.   /* this was overflowing with seashore.pat
  170.       ((vib_control_ratio * SWEEP_TUNING) << SWEEP_SHIFT) /
  171.       (play_mode->rate * sweep); */
  172. }
  173. int32 convert_tremolo_rate(uint8 rate)
  174. {
  175.   return
  176.     ((SINE_CYCLE_LENGTH * control_ratio * rate) << RATE_SHIFT) /
  177.       (TREMOLO_RATE_TUNING * play_mode->rate);
  178. }
  179. int32 convert_vibrato_rate(uint8 rate)
  180. {
  181.   /* Return a suitable vibrato_control_ratio value */
  182.   return
  183.     (VIBRATO_RATE_TUNING * play_mode->rate) / 
  184.       (rate * 2 * VIBRATO_SAMPLE_INCREMENTS);
  185. }
  186. static void reverse_data(int16 *sp, int32 ls, int32 le)
  187. {
  188.   int16 s, *ep=sp+le;
  189.   sp+=ls;
  190.   le-=ls;
  191.   le/=2;
  192.   while (le--)
  193.     {
  194.       s=*sp;
  195.       *sp++=*ep;
  196.       *ep--=s;
  197.     }
  198. }
  199. /* 
  200.    If panning or note_to_use != -1, it will be used for all samples,
  201.    instead of the sample-specific values in the instrument file. 
  202.    For note_to_use, any value <0 or >127 will be forced to 0.
  203.  
  204.    For other parameters, 1 means yes, 0 means no, other values are
  205.    undefined.
  206.    TODO: do reverse loops right */
  207. static InstrumentLayer *load_instrument(const char *name, int font_type, int percussion,
  208.    int panning, int amp, int cfg_tuning, int note_to_use,
  209.    int strip_loop, int strip_envelope,
  210.    int strip_tail, int bank, int gm_num, int sf_ix)
  211. {
  212.   InstrumentLayer *lp, *lastlp, *headlp = 0;
  213.   Instrument *ip;
  214.   FILE *fp;
  215.   uint8 tmp[1024];
  216.   int i,j,noluck=0;
  217. #ifdef PATCH_EXT_LIST
  218.   static char *patch_ext[] = PATCH_EXT_LIST;
  219. #endif
  220.   int sf2flag = 0;
  221.   int right_samples = 0;
  222.   int stereo_channels = 1, stereo_layer;
  223.   int vlayer_list[19][4], vlayer, vlayer_count = 0;
  224.   if (!name) return 0;
  225.   
  226.   /* Open patch file */
  227.   if ((fp=open_file(name, 1, OF_NORMAL)) == NULL)
  228.     {
  229.       noluck=1;
  230. #ifdef PATCH_EXT_LIST
  231.       /* Try with various extensions */
  232.       for (i=0; patch_ext[i]; i++)
  233. {
  234.   if (strlen(name)+strlen(patch_ext[i])<PATH_MAX)
  235.     {
  236.               char path[PATH_MAX];
  237.       strcpy(path, name);
  238.       strcat(path, patch_ext[i]);
  239.       if ((fp=open_file(path, 1, OF_NORMAL)) != NULL)
  240. {
  241.   noluck=0;
  242.   break;
  243. }
  244.     }
  245. }
  246. #endif
  247.     }
  248.   
  249.   if (noluck)
  250.     {
  251.       ctl->cmsg(CMSG_ERROR, VERB_NORMAL, 
  252. "Instrument `%s' can't be found.", name);
  253.       return 0;
  254.     }
  255.       
  256.   /*ctl->cmsg(CMSG_INFO, VERB_NOISY, "Loading instrument %s", current_filename);*/
  257.   
  258.   /* Read some headers and do cursory sanity checks. There are loads
  259.      of magic offsets. This could be rewritten... */
  260.   if ((239 != fread(tmp, 1, 239, fp)) ||
  261.       (memcmp(tmp, "GF1PATCH110ID#000002", 22) &&
  262.        memcmp(tmp, "GF1PATCH100ID#000002", 22))) /* don't know what the
  263.       differences are */
  264.     {
  265.       ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "%s: not an instrument", name);
  266.       return 0;
  267.     }
  268. /* patch layout:
  269.  * bytes:  info: starts at offset:
  270.  * 22 id (see above) 0
  271.  * 60 copyright 22
  272.  *  1 instruments 82
  273.  *  1 voices 83
  274.  *  1 channels 84
  275.  *  2 number of waveforms 85
  276.  *  2 master volume 87
  277.  *  4 datasize 89
  278.  * 36   reserved, but now: 93
  279.  *  7 "SF2EXT" id 93
  280.  *  1 right samples        100
  281.  *     28 reserved        101
  282.  *  2 instrument number 129
  283.  * 16 instrument name 131
  284.  *  4 instrument size 147
  285.  *  1 number of layers 151
  286.  * 40 reserved 152
  287.  *  1 layer duplicate 192
  288.  *  1 layer number 193
  289.  *  4 layer size 194
  290.  *  1 number of samples 198
  291.  * 40 reserved 199
  292.  *  239
  293.  * THEN, for each sample, see below
  294.  */
  295.   if (!memcmp(tmp + 93, "SF2EXT", 6))
  296.     {
  297.     sf2flag = 1;
  298.     vlayer_count = tmp[152];
  299.     }
  300.   if (tmp[82] != 1 && tmp[82] != 0) /* instruments. To some patch makers, 
  301.        0 means 1 */
  302.     {
  303.       ctl->cmsg(CMSG_ERROR, VERB_NORMAL, 
  304.    "Can't handle patches with %d instruments", tmp[82]);
  305.       return 0;
  306.     }
  307.   if (tmp[151] != 1 && tmp[151] != 0) /* layers. What's a layer? */
  308.     {
  309.       ctl->cmsg(CMSG_ERROR, VERB_NORMAL, 
  310.    "Can't handle instruments with %d layers", tmp[151]);
  311.       return 0;
  312.     }
  313.   
  314.   if (sf2flag && vlayer_count > 0) {
  315. for (i = 0; i < 9; i++)
  316.   for (j = 0; j < 4; j++)
  317.     vlayer_list[i][j] = tmp[153+i*4+j];
  318. for (i = 9; i < 19; i++)
  319.   for (j = 0; j < 4; j++)
  320.     vlayer_list[i][j] = tmp[199+(i-9)*4+j];
  321.   }
  322.   else {
  323. for (i = 0; i < 19; i++)
  324.   for (j = 0; j < 4; j++)
  325.     vlayer_list[i][j] = 0;
  326. vlayer_list[0][0] = 0;
  327. vlayer_list[0][1] = 127;
  328. vlayer_list[0][2] = tmp[198];
  329. vlayer_list[0][3] = 0;
  330. vlayer_count = 1;
  331.   }
  332.   lastlp = 0;
  333.   for (vlayer = 0; vlayer < vlayer_count; vlayer++) {
  334.   lp=(InstrumentLayer *)safe_malloc(sizeof(InstrumentLayer));
  335.   lp->size = sizeof(InstrumentLayer);
  336.   lp->lo = vlayer_list[vlayer][0];
  337.   lp->hi = vlayer_list[vlayer][1];
  338.   ip=(Instrument *)safe_malloc(sizeof(Instrument));
  339.   lp->size += sizeof(Instrument);
  340.   lp->instrument = ip;
  341.   lp->next = 0;
  342.   if (lastlp) lastlp->next = lp;
  343.   else headlp = lp;
  344.   lastlp = lp;
  345.   if (sf2flag) ip->type = INST_SF2;
  346.   else ip->type = INST_GUS;
  347.   ip->samples = vlayer_list[vlayer][2];
  348.   ip->sample = (Sample *)safe_malloc(sizeof(Sample) * ip->samples);
  349.   lp->size += sizeof(Sample) * ip->samples;
  350.   ip->left_samples = ip->samples;
  351.   ip->left_sample = ip->sample;
  352.   right_samples = vlayer_list[vlayer][3];
  353.   ip->right_samples = right_samples;
  354.   if (right_samples)
  355.     {
  356.       ip->right_sample = (Sample *)safe_malloc(sizeof(Sample) * right_samples);
  357.       lp->size += sizeof(Sample) * right_samples;
  358.       stereo_channels = 2;
  359.     }
  360.   else ip->right_sample = 0;
  361.   ip->contents = 0;
  362.   ctl->cmsg(CMSG_INFO, VERB_NOISY, "%s%s[%d,%d] %s(%d-%d layer %d of %d)",
  363. (percussion)? "   ":"", name,
  364. (percussion)? note_to_use : gm_num, bank,
  365. (right_samples)? "(2) " : "",
  366. lp->lo, lp->hi, vlayer+1, vlayer_count);
  367.  for (stereo_layer = 0; stereo_layer < stereo_channels; stereo_layer++)
  368.  {
  369.   int sample_count = 0;
  370.   if (stereo_layer == 0) sample_count = ip->left_samples;
  371.   else if (stereo_layer == 1) sample_count = ip->right_samples;
  372.   for (i=0; i < sample_count; i++)
  373.     {
  374.       uint8 fractions;
  375.       int32 tmplong;
  376.       uint16 tmpshort;
  377.       uint16 sample_volume = 0;
  378.       uint8 tmpchar;
  379.       Sample *sp = 0;
  380.       uint8 sf2delay = 0;
  381. #define READ_CHAR(thing) 
  382.       if (1 != fread(&tmpchar, 1, 1, fp)) goto fail; 
  383.       thing = tmpchar;
  384. #define READ_SHORT(thing) 
  385.       if (1 != fread(&tmpshort, 2, 1, fp)) goto fail; 
  386.       thing = LE_SHORT(tmpshort);
  387. #define READ_LONG(thing) 
  388.       if (1 != fread(&tmplong, 4, 1, fp)) goto fail; 
  389.       thing = LE_LONG(tmplong);
  390. /*
  391.  *  7 sample name
  392.  *  1 fractions
  393.  *  4 length
  394.  *  4 loop start
  395.  *  4 loop end
  396.  *  2 sample rate
  397.  *  4 low frequency
  398.  *  4 high frequency
  399.  *  2 finetune
  400.  *  1 panning
  401.  *  6 envelope rates |
  402.  *  6 envelope offsets |  18 bytes
  403.  *  3 tremolo sweep, rate, depth |
  404.  *  3 vibrato sweep, rate, depth |
  405.  *  1 sample mode
  406.  *  2 scale frequency
  407.  *  2 scale factor
  408.  *  2 sample volume (??)
  409.  * 34 reserved
  410.  * Now: 1 delay
  411.  *  33 reserved
  412.  */
  413.       skip(fp, 7); /* Skip the wave name */
  414.       if (1 != fread(&fractions, 1, 1, fp))
  415. {
  416. fail:
  417.   ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "Error reading sample %d", i);
  418.   if (stereo_layer == 1)
  419.      {
  420.        for (j=0; j<i; j++)
  421.          free(ip->right_sample[j].data);
  422.        free(ip->right_sample);
  423.        i = ip->left_samples;
  424.      }
  425.   for (j=0; j<i; j++)
  426.     free(ip->left_sample[j].data);
  427.   free(ip->left_sample);
  428.   free(ip);
  429.   free(lp);
  430.   return 0;
  431. }
  432.       if (stereo_layer == 0) sp=&(ip->left_sample[i]);
  433.       else if (stereo_layer == 1) sp=&(ip->right_sample[i]);
  434.       READ_LONG(sp->data_length);
  435.       READ_LONG(sp->loop_start);
  436.       READ_LONG(sp->loop_end);
  437.       READ_SHORT(sp->sample_rate);
  438.       READ_LONG(sp->low_freq);
  439.       READ_LONG(sp->high_freq);
  440.       READ_LONG(sp->root_freq);
  441.       skip(fp, 2); /* Why have a "root frequency" and then "tuning"?? */
  442.       
  443.       READ_CHAR(tmp[0]);
  444.       if (panning==-1)
  445. sp->panning = (tmp[0] * 8 + 4) & 0x7f;
  446.       else
  447. sp->panning=(uint8)(panning & 0x7F);
  448.       sp->resonance=0;
  449.       sp->cutoff_freq=0;
  450.       sp->reverberation=0;
  451.       sp->chorusdepth=0;
  452.       sp->exclusiveClass=0;
  453.       sp->keyToModEnvHold=0;
  454.       sp->keyToModEnvDecay=0;
  455.       sp->keyToVolEnvHold=0;
  456.       sp->keyToVolEnvDecay=0;
  457.       if (cfg_tuning)
  458. {
  459.   double tune_factor = (double)(cfg_tuning)/1200.0;
  460.   tune_factor = pow(2.0, tune_factor);
  461.   sp->root_freq = (uint32)( tune_factor * (double)sp->root_freq );
  462. }
  463.       /* envelope, tremolo, and vibrato */
  464.       if (18 != fread(tmp, 1, 18, fp)) goto fail; 
  465.       if (!tmp[13] || !tmp[14])
  466. {
  467.   sp->tremolo_sweep_increment=
  468.     sp->tremolo_phase_increment=sp->tremolo_depth=0;
  469.   ctl->cmsg(CMSG_INFO, VERB_DEBUG, " * no tremolo");
  470. }
  471.       else
  472. {
  473.   sp->tremolo_sweep_increment=convert_tremolo_sweep(tmp[12]);
  474.   sp->tremolo_phase_increment=convert_tremolo_rate(tmp[13]);
  475.   sp->tremolo_depth=tmp[14];
  476.   ctl->cmsg(CMSG_INFO, VERB_DEBUG,
  477.        " * tremolo: sweep %d, phase %d, depth %d",
  478.        sp->tremolo_sweep_increment, sp->tremolo_phase_increment,
  479.        sp->tremolo_depth);
  480. }
  481.       if (!tmp[16] || !tmp[17])
  482. {
  483.   sp->vibrato_sweep_increment=
  484.     sp->vibrato_control_ratio=sp->vibrato_depth=0;
  485.   ctl->cmsg(CMSG_INFO, VERB_DEBUG, " * no vibrato");
  486. }
  487.       else
  488. {
  489.   sp->vibrato_control_ratio=convert_vibrato_rate(tmp[16]);
  490.   sp->vibrato_sweep_increment=
  491.     convert_vibrato_sweep(tmp[15], sp->vibrato_control_ratio);
  492.   sp->vibrato_depth=tmp[17];
  493.   ctl->cmsg(CMSG_INFO, VERB_DEBUG,
  494.        " * vibrato: sweep %d, ctl %d, depth %d",
  495.        sp->vibrato_sweep_increment, sp->vibrato_control_ratio,
  496.        sp->vibrato_depth);
  497. }
  498.       READ_CHAR(sp->modes);
  499.       READ_SHORT(sp->freq_center);
  500.       READ_SHORT(sp->freq_scale);
  501.       if (sf2flag)
  502.         {
  503.           READ_SHORT(sample_volume);
  504.   READ_CHAR(sf2delay);
  505.           READ_CHAR(sp->exclusiveClass);
  506.           skip(fp, 32);
  507. }
  508.       else
  509.         {
  510.           skip(fp, 36);
  511.         }
  512.       /* Mark this as a fixed-pitch instrument if such a deed is desired. */
  513.       if (note_to_use!=-1)
  514. sp->note_to_use=(uint8)(note_to_use);
  515.       else
  516. sp->note_to_use=0;
  517.       
  518.       /* seashore.pat in the Midia patch set has no Sustain. I don't
  519.          understand why, and fixing it by adding the Sustain flag to
  520.          all looped patches probably breaks something else. We do it
  521.          anyway. */
  522.  
  523.       if (sp->modes & MODES_LOOPING) 
  524. sp->modes |= MODES_SUSTAIN;
  525.       /* Strip any loops and envelopes we're permitted to */
  526.       if ((strip_loop==1) && 
  527.   (sp->modes & (MODES_SUSTAIN | MODES_LOOPING | 
  528. MODES_PINGPONG | MODES_REVERSE)))
  529. {
  530.   ctl->cmsg(CMSG_INFO, VERB_DEBUG, " - Removing loop and/or sustain");
  531.   sp->modes &=~(MODES_SUSTAIN | MODES_LOOPING | 
  532. MODES_PINGPONG | MODES_REVERSE);
  533. }
  534.       if (strip_envelope==1)
  535. {
  536.   if (sp->modes & MODES_ENVELOPE)
  537.     ctl->cmsg(CMSG_INFO, VERB_DEBUG, " - Removing envelope");
  538.   sp->modes &= ~MODES_ENVELOPE;
  539. }
  540.       else if (strip_envelope != 0)
  541. {
  542.   /* Have to make a guess. */
  543.   if (!(sp->modes & (MODES_LOOPING | MODES_PINGPONG | MODES_REVERSE)))
  544.     {
  545.       /* No loop? Then what's there to sustain? No envelope needed
  546.  either... */
  547.       sp->modes &= ~(MODES_SUSTAIN|MODES_ENVELOPE);
  548.       ctl->cmsg(CMSG_INFO, VERB_DEBUG, 
  549. " - No loop, removing sustain and envelope");
  550.     }
  551.   else if (!memcmp(tmp, "??????", 6) || tmp[11] >= 100) 
  552.     {
  553.       /* Envelope rates all maxed out? Envelope end at a high "offset"?
  554.  That's a weird envelope. Take it out. */
  555.       sp->modes &= ~MODES_ENVELOPE;
  556.       ctl->cmsg(CMSG_INFO, VERB_DEBUG, 
  557. " - Weirdness, removing envelope");
  558.     }
  559.   else if (!(sp->modes & MODES_SUSTAIN))
  560.     {
  561.       /* No sustain? Then no envelope.  I don't know if this is
  562.  justified, but patches without sustain usually don't need the
  563.  envelope either... at least the Gravis ones. They're mostly
  564.  drums.  I think. */
  565.       sp->modes &= ~MODES_ENVELOPE;
  566.       ctl->cmsg(CMSG_INFO, VERB_DEBUG, 
  567. " - No sustain, removing envelope");
  568.     }
  569. }
  570.       sp->attenuation = 0;
  571.       for (j=ATTACK; j<DELAY; j++)
  572. {
  573.   sp->envelope_rate[j]=
  574.     (j<3)? convert_envelope_rate_attack(tmp[j], 11) : convert_envelope_rate(tmp[j]);
  575.   sp->envelope_offset[j]= 
  576.     convert_envelope_offset(tmp[6+j]);
  577. }
  578.       if (sf2flag)
  579. {
  580.   if (sf2delay > 5) sf2delay = 5;
  581.   sp->envelope_rate[DELAY] = (int32)( (sf2delay*play_mode->rate) / 1000 );
  582. }
  583.       else
  584. {
  585.           sp->envelope_rate[DELAY]=0;
  586. }
  587.       sp->envelope_offset[DELAY]=0;
  588.       for (j=ATTACK; j<DELAY; j++)
  589. {
  590.   sp->modulation_rate[j]=sp->envelope_rate[j];
  591.   sp->modulation_offset[j]=sp->envelope_offset[j];
  592. }
  593.       sp->modulation_rate[DELAY] = sp->modulation_offset[DELAY] = 0;
  594.       sp->modEnvToFilterFc=0;
  595.       sp->modEnvToPitch=0;
  596.       sp->lfo_sweep_increment = 0;
  597.       sp->lfo_phase_increment = 0;
  598.       sp->modLfoToFilterFc = 0;
  599.       sp->vibrato_delay = 0;
  600.       /* Then read the sample data */
  601.       if (sp->data_length/2 > MAX_SAMPLE_SIZE)
  602.         {
  603.   goto fail;
  604. }
  605.       sp->data = safe_malloc(sp->data_length + 1);
  606.       lp->size += sp->data_length + 1;
  607.       if (1 != fread(sp->data, sp->data_length, 1, fp))
  608. goto fail;
  609.       
  610.       if (!(sp->modes & MODES_16BIT)) /* convert to 16-bit data */
  611. {
  612.   int32 i=sp->data_length;
  613.   uint8 *cp=(uint8 *)(sp->data);
  614.   uint16 *tmp,*newdta;
  615.   tmp=newdta=safe_malloc(sp->data_length*2 + 2);
  616.   while (i--)
  617.     *tmp++ = (uint16)(*cp++) << 8;
  618.   cp=(uint8 *)(sp->data);
  619.   sp->data = (sample_t *)newdta;
  620.   free(cp);
  621.   sp->data_length *= 2;
  622.   sp->loop_start *= 2;
  623.   sp->loop_end *= 2;
  624. }
  625. #if SDL_BYTEORDER == SDL_BIG_ENDIAN
  626.       else
  627. /* convert to machine byte order */
  628. {
  629.   int32 i=sp->data_length/2;
  630.   int16 *tmp=(int16 *)sp->data,s;
  631.   while (i--)
  632.     { 
  633.       s=LE_SHORT(*tmp);
  634.       *tmp++=s;
  635.     }
  636. }
  637. #endif
  638.       
  639.       if (sp->modes & MODES_UNSIGNED) /* convert to signed data */
  640. {
  641.   int32 i=sp->data_length/2;
  642.   int16 *tmp=(int16 *)sp->data;
  643.   while (i--)
  644.     *tmp++ ^= 0x8000;
  645. }
  646.       /* Reverse reverse loops and pass them off as normal loops */
  647.       if (sp->modes & MODES_REVERSE)
  648. {
  649.   int32 t;
  650.   /* The GUS apparently plays reverse loops by reversing the
  651.      whole sample. We do the same because the GUS does not SUCK. */
  652.   ctl->cmsg(CMSG_WARNING, VERB_NORMAL, "Reverse loop in %s", name);
  653.   reverse_data((int16 *)sp->data, 0, sp->data_length/2);
  654.   t=sp->loop_start;
  655.   sp->loop_start=sp->data_length - sp->loop_end;
  656.   sp->loop_end=sp->data_length - t;
  657.   sp->modes &= ~MODES_REVERSE;
  658.   sp->modes |= MODES_LOOPING; /* just in case */
  659. }
  660.       /* If necessary do some anti-aliasing filtering  */
  661.       if (antialiasing_allowed)
  662.   antialiasing(sp,play_mode->rate);
  663. #ifdef ADJUST_SAMPLE_VOLUMES
  664.       if (amp!=-1)
  665. sp->volume=(FLOAT_T)((amp) / 100.0);
  666.       else if (sf2flag)
  667. sp->volume=(FLOAT_T)((sample_volume) / 255.0);
  668.       else
  669. {
  670.   /* Try to determine a volume scaling factor for the sample.
  671.      This is a very crude adjustment, but things sound more
  672.      balanced with it. Still, this should be a runtime option. */
  673.   uint32 i, numsamps=sp->data_length/2;
  674.   uint32 higher=0, highcount=0;
  675.   int16 maxamp=0,a;
  676.   int16 *tmp=(int16 *)sp->data;
  677.   i = numsamps;
  678.   while (i--)
  679.     {
  680.       a=*tmp++;
  681.       if (a<0) a=-a;
  682.       if (a>maxamp)
  683. maxamp=a;
  684.     }
  685.   tmp=(int16 *)sp->data;
  686.   i = numsamps;
  687.   while (i--)
  688.     {
  689.       a=*tmp++;
  690.       if (a<0) a=-a;
  691.       if (a > 3*maxamp/4)
  692. {
  693.    higher += a;
  694.    highcount++;
  695. }
  696.     }
  697.   if (highcount) higher /= highcount;
  698.   else higher = 10000;
  699.   sp->volume = (32768.0 * 0.875) /  (double)higher ;
  700.   ctl->cmsg(CMSG_INFO, VERB_DEBUG, " * volume comp: %f", sp->volume);
  701. }
  702. #else
  703.       if (amp!=-1)
  704. sp->volume=(double)(amp) / 100.0;
  705.       else
  706. sp->volume=1.0;
  707. #endif
  708.       sp->data_length /= 2; /* These are in bytes. Convert into samples. */
  709.       sp->loop_start /= 2;
  710.       sp->loop_end /= 2;
  711.       sp->data[sp->data_length] = sp->data[sp->data_length-1];
  712.       /* Then fractional samples */
  713.       sp->data_length <<= FRACTION_BITS;
  714.       sp->loop_start <<= FRACTION_BITS;
  715.       sp->loop_end <<= FRACTION_BITS;
  716.     /* trim off zero data at end */
  717.     {
  718. int ls = sp->loop_start>>FRACTION_BITS;
  719. int le = sp->loop_end>>FRACTION_BITS;
  720. int se = sp->data_length>>FRACTION_BITS;
  721. while (se > 1 && !sp->data[se-1]) se--;
  722. if (le > se) le = se;
  723. if (ls >= le) sp->modes &= ~MODES_LOOPING;
  724. sp->loop_end = le<<FRACTION_BITS;
  725. sp->data_length = se<<FRACTION_BITS;
  726.     }
  727.       /* Adjust for fractional loop points. This is a guess. Does anyone
  728.  know what "fractions" really stands for? */
  729.       sp->loop_start |=
  730. (fractions & 0x0F) << (FRACTION_BITS-4);
  731.       sp->loop_end |=
  732. ((fractions>>4) & 0x0F) << (FRACTION_BITS-4);
  733.       /* If this instrument will always be played on the same note,
  734.  and it's not looped, we can resample it now. */
  735.       if (sp->note_to_use && !(sp->modes & MODES_LOOPING))
  736. pre_resample(sp);
  737. #ifdef LOOKUP_HACK
  738.       /* Squash the 16-bit data into 8 bits. */
  739.       {
  740. uint8 *gulp,*ulp;
  741. int16 *swp;
  742. int l=sp->data_length >> FRACTION_BITS;
  743. gulp=ulp=safe_malloc(l+1);
  744. swp=(int16 *)sp->data;
  745. while(l--)
  746.   *ulp++ = (*swp++ >> 8) & 0xFF;
  747. free(sp->data);
  748. sp->data=(sample_t *)gulp;
  749.       }
  750. #endif
  751.       
  752.       if (strip_tail==1)
  753. {
  754.   /* Let's not really, just say we did. */
  755.   ctl->cmsg(CMSG_INFO, VERB_DEBUG, " - Stripping tail");
  756.   sp->data_length = sp->loop_end;
  757. }
  758.     } /* end of sample loop */
  759.  } /* end of stereo layer loop */
  760.  } /* end of vlayer loop */
  761.   close_file(fp);
  762.   return headlp;
  763. }
  764. static int fill_bank(int dr, int b)
  765. {
  766.   int i, errors=0;
  767.   ToneBank *bank=((dr) ? drumset[b] : tonebank[b]);
  768.   if (!bank)
  769.     {
  770.       ctl->cmsg(CMSG_ERROR, VERB_NORMAL, 
  771.    "Huh. Tried to load instruments in non-existent %s %d",
  772.    (dr) ? "drumset" : "tone bank", b);
  773.       return 0;
  774.     }
  775.   for (i=0; i<MAXPROG; i++)
  776.     {
  777.       if (bank->tone[i].layer==MAGIC_LOAD_INSTRUMENT)
  778. {
  779.   if (!(bank->tone[i].name))
  780.     {
  781.       ctl->cmsg(CMSG_WARNING, (b!=0) ? VERB_VERBOSE : VERB_NORMAL,
  782.    "No instrument mapped to %s %d, program %d%s",
  783.    (dr)? "drum set" : "tone bank", b, i, 
  784.    (b!=0) ? "" : " - this instrument will not be heard");
  785.       if (b!=0)
  786. {
  787.   /* Mark the corresponding instrument in the default
  788.      bank / drumset for loading (if it isn't already) */
  789.   if (!dr)
  790.     {
  791.       if (!(standard_tonebank.tone[i].layer))
  792. standard_tonebank.tone[i].layer=
  793.   MAGIC_LOAD_INSTRUMENT;
  794.     }
  795.   else
  796.     {
  797.       if (!(standard_drumset.tone[i].layer))
  798. standard_drumset.tone[i].layer=
  799.   MAGIC_LOAD_INSTRUMENT;
  800.     }
  801. }
  802.       bank->tone[i].layer=0;
  803.       errors++;
  804.     }
  805.   else if (!(bank->tone[i].layer=
  806.      load_instrument(bank->tone[i].name, 
  807.            bank->tone[i].font_type,
  808.      (dr) ? 1 : 0,
  809.      bank->tone[i].pan,
  810.      bank->tone[i].amp,
  811.      bank->tone[i].tuning,
  812.      (bank->tone[i].note!=-1) ? 
  813.        bank->tone[i].note :
  814.        ((dr) ? i : -1),
  815.      (bank->tone[i].strip_loop!=-1) ?
  816.      bank->tone[i].strip_loop :
  817.      ((dr) ? 1 : -1),
  818.      (bank->tone[i].strip_envelope != -1) ? 
  819.      bank->tone[i].strip_envelope :
  820.      ((dr) ? 1 : -1),
  821.      bank->tone[i].strip_tail,
  822.      b,
  823.      ((dr) ? i + 128 : i),
  824.      bank->tone[i].sf_ix
  825.       )))
  826.     {
  827.       ctl->cmsg(CMSG_ERROR, VERB_NORMAL, 
  828.    "Couldn't load instrument %s (%s %d, program %d)",
  829.    bank->tone[i].name,
  830.    (dr)? "drum set" : "tone bank", b, i);
  831.       errors++;
  832.     }
  833.   else
  834.     { /* it's loaded now */
  835. bank->tone[i].last_used = current_tune_number;
  836. current_patch_memory += bank->tone[i].layer->size;
  837. purge_as_required();
  838. if (current_patch_memory > max_patch_memory) {
  839.        ctl->cmsg(CMSG_ERROR, VERB_NORMAL, 
  840.     "Not enough memory to load instrument %s (%s %d, program %d)",
  841.     bank->tone[i].name,
  842.     (dr)? "drum set" : "tone bank", b, i);
  843.        errors++;
  844.      free_layer(bank->tone[i].layer);
  845.      bank->tone[i].layer=0;
  846.      bank->tone[i].last_used=-1;
  847. }
  848. #if 0
  849.            if (check_for_rc()) {
  850.      free_layer(bank->tone[i].layer);
  851.      bank->tone[i].layer=0;
  852.      bank->tone[i].last_used=-1;
  853. return 0;
  854. }
  855. #endif
  856.     }
  857. }
  858.     }
  859.   return errors;
  860. }
  861. static void free_old_instruments(int how_old)
  862. {
  863.   int i=MAXBANK;
  864.   while(i--)
  865.     {
  866.       if (tonebank[i])
  867. free_old_bank(0, i, how_old);
  868.       if (drumset[i])
  869. free_old_bank(1, i, how_old);
  870.     }
  871. }
  872. static void purge_as_required(void)
  873. {
  874.   if (!max_patch_memory) return;
  875.   while (last_tune_purged < current_tune_number
  876. && current_patch_memory > max_patch_memory)
  877.     {
  878. last_tune_purged++;
  879. free_old_instruments(last_tune_purged);
  880.     }
  881. }
  882. int load_missing_instruments(void)
  883. {
  884.   int i=MAXBANK,errors=0;
  885.   while (i--)
  886.     {
  887.       if (tonebank[i])
  888. errors+=fill_bank(0,i);
  889.       if (drumset[i])
  890. errors+=fill_bank(1,i);
  891.     }
  892.   current_tune_number++;
  893.   return errors;
  894. }
  895. void free_instruments(void)
  896. {
  897.   int i=128;
  898.   while(i--)
  899.     {
  900.       if (tonebank[i])
  901. free_bank(0,i);
  902.       if (drumset[i])
  903. free_bank(1,i);
  904.     }
  905. }
  906. int set_default_instrument(const char *name)
  907. {
  908.   InstrumentLayer *lp;
  909. /*  if (!(lp=load_instrument(name, 0, -1, -1, -1, 0, 0, 0))) */
  910.   if (!(lp=load_instrument(name, FONT_NORMAL, 0, -1, -1, 0, -1, -1, -1, -1, 0, -1, -1)))
  911.     return -1;
  912.   if (default_instrument)
  913.     free_layer(default_instrument);
  914.   default_instrument=lp;
  915.   default_program=SPECIAL_PROGRAM;
  916.   return 0;
  917. }