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

多媒体编程

开发平台:

DOS

  1. /************************************************************************
  2.    emumidi.h  -- tables and includes required by emumidi.c
  3.    Copyright (C) 1994-1996 Nathan I. Laredo
  4.    This program is modifiable/redistributable under the terms
  5.    of the GNU General Public Licence.
  6.    You should have received a copy of the GNU General Public License
  7.    along with this program; if not, write to the Free Software
  8.    Foundation, Inc., 675 Mass Ave, Cambridge, MA  2139, USA.
  9.    Send your comments and all your spare pocket change to
  10.    laredo@gnu.ai.mit.edu (Nathan Laredo) or to PSC 1, BOX 709, 2401
  11.    Kelly Drive, Lackland AFB, TX 78236-5128, USA.
  12.  *************************************************************************/
  13. #include "playmidi.h"
  14. #ifdef linux
  15. #include <linux/ultrasound.h>
  16. #else
  17. #include <machine/ultrasound.h>
  18. #endif
  19. /*
  20.  * TABLE OF NEARLY EXACT FREQUENCIES FOR ALL MIDI NOTES (A=440Hz)
  21.  * the whole table is really not necessary, but it prevents some
  22.  * rounding errors by having it complete, and the cost of 128
  23.  * integers is cheaper than the cpu cost of multiple right shifts
  24.  * of a table of twelve frequencies, and definately cheaper than
  25.  * calculating freq = 13.75 * 2^((n + 4)/12) for each note value,
  26.  * which is how this table was created.
  27.  */
  28. unsigned int n_freq[128] =
  29. {
  30. /* C     C#    D     D#    E     F     F#    G     G#    A     A#    B */
  31.    16,   17,   18,   19,   21,   22,   23,   24,   26,   28,   29,   31,
  32.    33,   34,   37,   39,   41,   44,   46,   49,   52,   55,   58,   62,
  33.    65,   69,   73,   78,   82,   87,   92,   98,  103,  110,  117,  123,
  34.   131,  139,  147,  156,  165,  175,  185,  195,  207,  220,  233,  247,
  35.   262,  277,  294,  311,  330,  349,  370,  392,  415,  440,  466,  494,
  36.   523,  554,  587,  622,  659,  698,  740,  784,  831,  880,  932,  988,
  37.  1047, 1109, 1175, 1245, 1319, 1397, 1480, 1568, 1661, 1760, 1865, 1976,
  38.  2093, 2217, 2349, 2489, 2637, 2794, 2960, 3136, 3322, 3520, 3729, 3951,
  39.  4186, 4435, 4699, 4978, 5274, 5588, 5920, 6272, 6645, 7040, 7459, 7902,
  40.  8372, 8870, 9397, 9956,10548,11175,11840,12544,13290,14080,14917,15804,
  41. 16744,17740,18795,19912,21096,22351,23680,25088
  42. };
  43. /* MT-32 emulation translate table */
  44. int mt32pgm[128] =
  45. {
  46.    0,   1,   2,   4,   4,   5,   5,   3,  16,  16,  16,  16,  19,
  47.   19,  19,  21,   6,   6,   6,   7,   7,   7,   8,   8,  62,  57,
  48.   63,  58,  38,  38,  39,  39,  88,  33,  52,  35,  97, 100,  38,
  49.   39,  14, 102,  68, 103,  44,  92,  46,  80,  48,  49,  51,  45,
  50.   40,  40,  42,  42,  43,  46,  46,  24,  25,  28,  27, 104,  32,
  51.   32,  34,  33,  36,  37,  39,  35,  79,  73,  76,  72,  74,  75,
  52.   64,  65,  66,  67,  71,  71,  69,  70,  60,  22,  56,  59,  57,
  53.   63,  60,  60,  58,  61,  61,  11,  11,  99, 100,   9,  14,  13,
  54.   12, 107, 106,  77,  78,  78,  76, 111,  47, 117, 127, 115, 118,
  55.  116, 118, 126, 121, 121,  55, 124, 120, 125, 126, 127
  56. };