home *** CD-ROM | disk | FTP | other *** search
/ Phoenix Heaven Sunny 2 / APPARE2.BIN / oh_towns / taropyon / he386 / ccisrc / tg300.c < prev    next >
Text File  |  1995-06-20  |  9KB  |  348 lines

  1. /*************************************************************************
  2. *    for YAMAHA TG300
  3. *************************************************************************/
  4.  
  5. #define    YAMAHA_ID    (0x43)    /* maker ID    */
  6. #define    TG300_ID    (0x2B)    /* model ID    */
  7.  
  8. int        TG300devNum = 0;    /* device number    0~15    */
  9.  
  10. char    *Tg300funcTbl[64] =
  11. {
  12.     "TG300_setDeviceNumber"      ,
  13.     "sysEx_TG300"                ,
  14.  
  15.     "exTG300_allParameterReset"  ,
  16.     "exTG300_masterTune"         ,
  17.     "exTG300_masterVolume"       ,
  18.     "exTG300_masterPan"          ,
  19.     "exTG300_masterCutoff"       ,
  20.     "exTG300_masterPModDep"      ,
  21.     "exTG300_varSendCtChg"       ,
  22.  
  23.     "exTG300_chorusType"         ,
  24.     "exTG300_variationType"      ,
  25.     "exTG300_preVariationType"   ,
  26.     "exTG300_preReverbType"      ,
  27.     "exTG300_reverbType"         ,
  28.     "exTG300_effectInput"        ,
  29.     "exTG300_dryLevel"           ,
  30.     "exTG300_effectReturn"       ,
  31.     "exTG300_effectSend"         ,
  32.     "exTG300_choParam"           ,
  33.     "exTG300_varParam"           ,
  34.     "exTG300_preVarParam"        ,
  35.     "exTG300_preRevParam"        ,
  36.     "exTG300_revParam"           ,
  37.  
  38.     "exTG300_elementReserve"     ,
  39.     "exTG300_bank"               ,
  40.     "exTG300_programNo"          ,
  41.     "exTG300_rcvChannel"         ,
  42.     "exTG300_monoPolyMode"       ,
  43.     "exTG300_keyAssign"          ,
  44.     "exTG300_partMode"           ,
  45.     "exTG300_noteShift"          ,
  46.     "exTG300_detune"             ,
  47.     "exTG300_volume"             ,
  48.     "exTG300_velSensDepth"       ,
  49.     "exTG300_velSensOffst"       ,
  50.     "exTG300_pan"                ,
  51.     "exTG300_mwControl"          ,
  52.     "exTG300_bendControl"        ,
  53.     "exTG300_catControl"         ,
  54.     "exTG300_patControl"         ,
  55.     "exTG300_ac1Control"         ,
  56.     "exTG300_ac2Control"         ,
  57.  
  58.     "exTG300_drumSetup"          ,
  59.  
  60.     "exTG300_voiceDataSet"       ,
  61.  
  62.     NULL
  63. };
  64.  
  65. int        TG300_macroInit( char *sqr )
  66. {
  67.     int            i;
  68.  
  69.     TG300devNum = 0;
  70.     for ( i = 0; Tg300funcTbl[i] != NULL; ++i )
  71.         MMac_extDefine( sqr, Tg300funcTbl[i], Tg300funcTbl[i], MMAC_ATT_EXT, NULL );
  72.     MMac_extDefine( sqr, "_TG300_MACRO_DEFINED", "", MMAC_ATT_NORMAL , NULL );
  73.     return (NORMAL);
  74. }
  75.  
  76. /*************************************************************************
  77. *    デバイスナンバの設定
  78. *-------------------------------------------------------------------------
  79. *    TG300_setDeviceNumber(n);
  80. *        n    …    1~16
  81. *************************************************************************/
  82.  
  83. int        TG300_setDeviceNumber( char *sqr, size_t bufSiz, char *buf, int argc, char **argv )
  84. {
  85.     int        n;
  86.  
  87.     if ( argc < 1 )
  88.     {
  89. _ERR:    MM_setErrMsg(sqr,"TG300 device number!");
  90.         return (ERR);
  91.     }
  92.     n = atoi(argv[0]) - 1;
  93.     if ( n < 0 || n > 15 )
  94.         goto _ERR;
  95.     TG300devNum = n;
  96.     return (0);
  97. }
  98.  
  99.  
  100. /*************************************************************************
  101. *    TG300 NATIVE PARAMETER CHANGE
  102. *************************************************************************/
  103.  
  104. int        tg300_excl( UCHAR *buf, UINT adr, size_t siz, UCHAR *dat )
  105. {
  106.     int        i, sum;
  107.  
  108.     buf[0] = 0xF0;
  109.     buf[1] = YAMAHA_ID;            /* maker ID   */
  110.     buf[2] = 0x10+TG300devNum;    /* device ID  */
  111.     buf[3] = TG300_ID;            /* model ID   */
  112.     buf[4] = (adr>>16);    buf[5] = (adr>>8);    buf[6] = (adr);
  113.     sum = buf[4] + buf[5] + buf[6];
  114.     for ( i = 0; i < siz; ++i )
  115.     {
  116.         buf[7+i] = dat[i];
  117.         sum += dat[i];
  118.     }
  119.     sum = (0x80 - (sum & 0x7F)) & 0x7F;
  120.     buf[7+siz] = sum;
  121.     buf[8+siz] = 0xF7;
  122.  
  123.     return (siz + 9);
  124. }
  125.  
  126. int        tg300_genMML( char *sqr, size_t bufSiz, char *buf, size_t adr, size_t siz, char *dat)
  127. {
  128.     int        ret;
  129.     char    excl[256], tmp[1024];
  130.  
  131.     ret = tg300_excl( excl, adr, siz, dat );
  132.     ret = make_sysEx( tmp, ret, excl );
  133.     if ( ret >= bufSiz )
  134.     {
  135.         MM_setErrMsg(sqr,_OUT_OF_STRING_SPACE);
  136.         return (ERR);
  137.     }
  138.     memcpy( buf, tmp, ret );
  139.     return (ret);
  140. }
  141.  
  142.  
  143. /*************************************************************************
  144. *    TG300 NATIVE SYSTEM EXCLUSIVE MESSAGE
  145. *-------------------------------------------------------------------------
  146. *    sysEx_TG300(adr,siz,p1[,p2...]);
  147. *************************************************************************/
  148.  
  149. int        sysEx_TG300( char *sqr, size_t bufSiz, char *buf, int argc, char **argv )
  150. {
  151.     char        dat[256];
  152.     unsigned    adr, siz;
  153.     int            i, ret;
  154.  
  155.     if ( argc < 3 )
  156.     {
  157.         MM_setErrMsg(sqr,"TG300 system exclusive error!");
  158.         return (ERR);
  159.     }
  160.     sscanf(argv[0],"%x",&adr);
  161.     siz = atoi(argv[1]);
  162.     if ( siz < 1 || argc < 2 + siz )
  163.         return (ERR);
  164.     for ( i = 0; i < siz; ++i )
  165.         dat[i] = atoi(argv[2+i]);
  166.  
  167.     return tg300_genMML( sqr, bufSiz, buf, adr, siz, dat );
  168. }
  169.  
  170. /*************************************************************************
  171. *    SYSTEM RESET
  172. *-------------------------------------------------------------------------
  173. *    exTG300_allParameterReset()
  174. *************************************************************************/
  175.  
  176. int        exTG300_allParameterReset( char *sqr, size_t bufSiz, char *buf, int argc, char **argv )
  177. {
  178.     char        dat[4];
  179.  
  180.     if ( argc != 0 )
  181.     {
  182.         MM_setErrMsg(sqr,"TG300 \"All Parameter Reset\" error!");
  183.         return(ERR);
  184.     }
  185.     dat[0] = 0;
  186.     return tg300_genMML( sqr, bufSiz, buf, 0x00007F, 1, dat );
  187. }
  188.  
  189.  
  190. /*************************************************************************
  191. *    MASTER TUNE
  192. *-------------------------------------------------------------------------
  193. *    exTG300_masterTune(tune)
  194. *        tune    …    -1024~1023
  195. *************************************************************************/
  196.  
  197. int        exTG300_masterTune( char *sqr, size_t bufSiz, char *buf, int argc, char **argv )
  198. {
  199.     char        dat[4];
  200.     int            tune;
  201.  
  202.     if ( argc != 1 )
  203.     {
  204. _ERR:    MM_setErrMsg(sqr,"TG300 \"MASTER TUNE\" error!");
  205.         return(ERR);
  206.     }
  207.     tune = atoi(argv[0]) + 1024;
  208.     if ( tune < 0 || tune > 0x7FF )
  209.         goto _ERR;
  210.     dat[0] = (tune>>12) & 0x0F;
  211.     dat[1] = (tune>> 8) & 0x0F;
  212.     dat[2] = (tune>> 4) & 0x0F;
  213.     dat[3] =  tune      & 0x0F;
  214.     return tg300_genMML( sqr, bufSiz, buf, 0x000000, 4, dat );
  215. }
  216.  
  217.  
  218. /*************************************************************************
  219. *    MASTER VOLUME
  220. *-------------------------------------------------------------------------
  221. *    exTG300_masterVolume(vol)
  222. *        vol    …    0~127
  223. *************************************************************************/
  224.  
  225. int        exTG300_masterVolume( char *sqr, size_t bufSiz, char *buf, int argc, char **argv )
  226. {
  227.     char    dat[4];
  228.     int        vol;
  229.  
  230.     if ( argc != 1 )
  231.     {
  232. _ERR:    MM_setErrMsg(sqr,"TG300 \"MASTER VOLUM\" error!");
  233.         return(ERR);
  234.     }
  235.     vol = atoi(argv[0]);
  236.     if ( vol < 0 || vol > 127 )
  237.         goto _ERR;
  238.     dat[0] = vol;
  239.     return tg300_genMML( sqr, bufSiz, buf, 0x000004, 1, dat );
  240. }
  241.  
  242.  
  243. /*************************************************************************
  244. *    MASTER PAN
  245. *-------------------------------------------------------------------------
  246. *    exTG300_masterPan(pan)
  247. *        pan    …    -63~63
  248. *************************************************************************/
  249.  
  250. int        exTG300_masterPan( char *sqr, size_t bufSiz, char *buf, int argc, char **argv )
  251. {
  252.     char    dat[32];
  253.     int        pan;
  254.  
  255.     if ( argc != 1 )
  256.     {
  257. _ERR:    MM_setErrMsg(sqr,"TG300 \"MASTER PAN\" error!");
  258.         return(ERR);
  259.     }
  260.     pan = atoi(argv[0]) + 64;
  261.     if ( pan < 1 || pan > 127 )
  262.         goto _ERR;
  263.     dat[0] = pan;
  264.     return tg300_genMML( sqr, bufSiz, buf, 0x000006, 1, dat );
  265. }
  266.  
  267.  
  268. /*************************************************************************
  269. *    MASTER CUTOFF
  270. *-------------------------------------------------------------------------
  271. *    exTG300_masterCutoff(cutoff)
  272. *        cutoff    …    -64~63
  273. *************************************************************************/
  274.  
  275. int        exTG300_masterCutoff( char *sqr, size_t bufSiz, char *buf, int argc, char **argv )
  276. {
  277.     char    dat[32];
  278.     int        v;
  279.  
  280.     if ( argc != 1 )
  281.     {
  282. _ERR:    MM_setErrMsg(sqr,"TG300 \"MASTER CUTOFF\" error!");
  283.         return(ERR);
  284.     }
  285.     v = atoi(argv[0]) + 64;
  286.     if ( v < 0 || v > 127 )
  287.         goto _ERR;
  288.     dat[0] = v;
  289.     return tg300_genMML( sqr, bufSiz, buf, 0x000007, 1, dat );
  290. }
  291.  
  292.  
  293. /*************************************************************************
  294. *    MASTER PITCH MODULATION DEPTH
  295. *-------------------------------------------------------------------------
  296. *    exTG300_masterPModDep(depth)
  297. *        depth    …    -64~63
  298. *************************************************************************/
  299.  
  300. int        exTG300_masterPModDep( char *sqr, size_t bufSiz, char *buf, int argc, char **argv )
  301. {
  302.     char    dat[32];
  303.     int        v;
  304.  
  305.     if ( argc != 1 )
  306.     {
  307. _ERR:    MM_setErrMsg(sqr,"TG300 \"MASTER PITCH MODULATION DEPTH\" error!");
  308.         return(ERR);
  309.     }
  310.     v = atoi(argv[0]) + 64;
  311.     if ( v < 0 || v > 127 )
  312.         goto _ERR;
  313.     dat[0] = v;
  314.     return tg300_genMML( sqr, bufSiz, buf, 0x000008, 1, dat );
  315. }
  316.  
  317.  
  318. /*************************************************************************
  319. *    VARIATION EFFECT SEND CONTROL CHANGE NUMBER
  320. *-------------------------------------------------------------------------
  321. *    exTG300_varSendCtChg(depth)
  322. *        depth    …    -64~63
  323. *************************************************************************/
  324.  
  325. int        exTG300_varSendCtChg( char *sqr, size_t bufSiz, char *buf, int argc, char **argv )
  326. {
  327.     char    dat[32];
  328.     int        v;
  329.  
  330.     if ( argc != 1 )
  331.     {
  332. _ERR:    MM_setErrMsg(sqr,"TG300 \"VARIATION EFFECT SEND CONTROL CHANGE NUMBER\" error!");
  333.         return(ERR);
  334.     }
  335.     v = atoi(argv[0]);
  336.     if ( v < 0 || v > 95 )
  337.         goto _ERR;
  338.     dat[0] = v;
  339.     return tg300_genMML( sqr, bufSiz, buf, 0x000009, 1, dat );
  340. }
  341.  
  342.  
  343. #include    "tg300me.c"    /* effect        */
  344. #include    "tg300mp.c"    /* part            */
  345. #include    "tg300ds.c"    /* drum setup    */
  346. #include    "tg300vm.c"    /* voice memory    */
  347.  
  348.