home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 3 / AACD03.BIN / AACD / Sound / SoX / Source / handlers.c < prev    next >
C/C++ Source or Header  |  1999-07-18  |  16KB  |  640 lines

  1. /*
  2.  * Originally created: July 5, 1991
  3.  * Copyright 1991 Lance Norskog And Sundry Contributors
  4.  * This source code is freely redistributable and may be used for
  5.  * any purpose.  This copyright notice must be maintained. 
  6.  * Lance Norskog And Sundry Contributors are not responsible for 
  7.  * the consequences of using this software.
  8.  */
  9.  
  10. #include "st.h"
  11.  
  12. /*
  13.  * Sound Tools file format and effect tables.
  14.  */
  15.  
  16. /* File format handlers. */
  17.  
  18. char *aiffnames[] = {
  19.     "aiff",
  20.     "aif",
  21.     (char *) 0
  22. };
  23. extern void aiffstartread();
  24. extern LONG aiffread();
  25. extern void aiffstopread();
  26. extern void aiffstartwrite();
  27. extern void aiffwrite();
  28. extern void aiffstopwrite();
  29.  
  30. char *alnames[] = {
  31.     "al",
  32.     (char *) 0
  33. };
  34. extern void alstartread();
  35. extern void alstartwrite();
  36.  
  37. #if    defined(ALSA_PLAYER)
  38. char *alsanames[] = {
  39.     "alsa",
  40.     (char *) 0
  41. };
  42. extern void alsastartread();
  43. extern void alsastartwrite();
  44. #endif
  45.  
  46. char *aunames[] = {
  47.     "au",
  48. #ifdef    NeXT
  49.     "snd",
  50. #endif
  51.     (char *) 0
  52. };
  53. extern void austartread();
  54. extern LONG auread();
  55. extern void austartwrite();
  56. extern void auwrite();
  57. extern void austopwrite();
  58.  
  59. char *autonames[] = {
  60.     "auto",
  61.     (char *) 0,
  62. };
  63.  
  64. extern void autostartread();
  65. extern void autostartwrite();
  66.  
  67. char *cdrnames[] = {
  68.     "cdr",
  69.     (char *) 0
  70. };
  71. extern void cdrstartread();
  72. extern LONG cdrread();
  73. extern void cdrstopread();
  74. extern void cdrstartwrite();
  75. extern void cdrwrite();
  76. extern void cdrstopwrite();
  77.  
  78. char *cvsdnames[] = {
  79.         "cvs",
  80.     "cvsd",
  81.     (char *)0
  82. };
  83. extern void cvsdstartread();
  84. extern LONG cvsdread();
  85. extern void cvsdstopread();
  86. extern void cvsdstartwrite();
  87. extern void cvsdwrite();
  88. extern void cvsdstopwrite();
  89.  
  90. char *datnames[] = {
  91.     "dat",
  92.     (char *) 0
  93. };
  94. extern void datstartread();
  95. extern LONG datread();
  96. extern void datstartwrite();
  97. extern void datwrite();
  98.  
  99. char *dvmsnames[] = {
  100.         "vms",
  101.     "dvms",
  102.     (char *)0
  103. };
  104. extern void dvmsstartread();
  105. extern void dvmsstartwrite();
  106. extern void dvmsstopwrite();
  107.  
  108. #ifdef HAVE_LIBGSM
  109. char *gsmnames[] = {
  110.         "gsm",
  111.     (char *) 0
  112. };
  113.  
  114. extern void gsmstartread();
  115. extern LONG gsmread();
  116. extern void gsmstopread();
  117. extern void gsmstartwrite();
  118. extern void gsmwrite();
  119. extern void gsmstopwrite();
  120. #endif
  121.  
  122. char *hcomnames[] = {
  123.     "hcom",
  124.     (char *) 0
  125. };
  126. extern void hcomstartread();
  127. extern LONG hcomread();
  128. extern void hcomstopread();
  129. extern void hcomstartwrite();
  130. extern void hcomwrite();
  131. extern void hcomstopwrite();
  132.  
  133. char *maudnames[] = {
  134.         "maud",
  135.         (char *) 0,
  136. };
  137. extern void maudstartread();
  138. extern LONG maudread();
  139. extern void maudstopread();
  140. extern void maudwrite();
  141. extern void maudstartwrite();
  142. extern void maudstopwrite();
  143.  
  144. #if    defined(OSS_PLAYER)
  145. char *ossdspnames[] = {
  146.     "ossdsp",
  147.     (char *) 0
  148. };
  149. extern void ossdspstartread();
  150. extern void ossdspstartwrite();
  151. #endif
  152.  
  153. char *rawnames[] = {
  154.     "raw",
  155.     (char *) 0
  156. };
  157. extern void rawstartread();
  158. extern LONG rawread();
  159. extern void rawstopread();
  160. extern void rawstartwrite();
  161. extern void rawwrite();
  162. extern void rawstopwrite();
  163.  
  164. #if    defined(BLASTER) || defined(SBLAST)
  165. char *sbdspnames[] = {
  166.     "sbdsp",
  167.     (char *) 0
  168. };
  169. extern void sbdspstartread();
  170. extern LONG sbdspread();
  171. extern void sbdspstopread();
  172. extern void sbdspstartwrite();
  173. extern void sbdspwrite();
  174. extern void sbdspstopwrite();
  175. #endif
  176.  
  177. char *sbnames[] = {
  178.     "sb",
  179.     (char *) 0
  180. };
  181. extern void sbstartread();
  182. extern void sbstartwrite();
  183.  
  184. char *sfnames[] = {
  185.     "sf",
  186.     (char *) 0
  187. };
  188. extern void sfstartread();
  189. extern void sfstartwrite();
  190.  
  191. char *smpnames[] = {
  192.     "smp",
  193.     (char *) 0,
  194. };
  195.  
  196. extern void smpstartread();
  197. extern LONG smpread();
  198. extern void smpwrite();
  199. extern void smpstartwrite();
  200. extern void smpstopwrite();
  201.  
  202. char *sndrnames[] = {
  203.     "sndr",
  204.     (char *) 0
  205. };
  206. extern void sndrstartwrite();
  207.  
  208. char *sndtnames[] = {
  209.     "sndt",
  210. #ifdef    DOS
  211.     "snd",
  212. #endif
  213.     (char *) 0
  214. }; 
  215. extern void sndtstartread();
  216. extern void sndtstartwrite();
  217. extern void sndtwrite();
  218. extern void sndtstopwrite();
  219.  
  220. #if    defined(SUNAUDIO_PLAYER)
  221. char *sunnames[] = {
  222.     "sunau",
  223.     (char *) 0
  224. };
  225. extern void sunstartread();
  226. extern void sunstartwrite();
  227. #endif
  228.  
  229. char *svxnames[] = {
  230.     "8svx",
  231.     (char *) 0
  232. };
  233. extern void svxstartread();
  234. extern LONG svxread();
  235. extern void svxstopread();
  236. extern void svxstartwrite();
  237. extern void svxwrite();
  238. extern void svxstopwrite();
  239.  
  240. char *swnames[] = {
  241.     "sw",
  242.     (char *) 0
  243. };
  244. extern void swstartread();
  245. extern void swstartwrite();
  246.  
  247. char *txwnames[] = {
  248.     "txw",
  249.     (char *)0
  250. };
  251. extern void txwstartread();
  252. extern LONG txwread();
  253. extern void txwstopread();
  254. extern void txwstartwrite();
  255. extern void txwwrite();
  256. extern void txwstopwrite();
  257.  
  258. char *ubnames[] = {
  259.     "ub",
  260.     "sou",
  261.     "fssd",
  262. #ifdef    MAC
  263.     "snd",
  264. #endif
  265.     (char *) 0
  266. };
  267. extern void ubstartread();
  268. extern void ubstartwrite();
  269.  
  270. char *ulnames[] = {
  271.     "ul",
  272.     (char *) 0
  273. };
  274. extern void ulstartread();
  275. extern void ulstartwrite();
  276.  
  277. char *uwnames[] = {
  278.     "uw",
  279.     (char *) 0
  280. };
  281. extern void uwstartread();
  282. extern void uwstartwrite();
  283.  
  284. char *vocnames[] = {
  285.     "voc",
  286.     (char *) 0
  287. };
  288. extern void vocstartread();
  289. extern LONG vocread();
  290. extern void vocstopread();
  291. extern void vocstartwrite();
  292. extern void vocwrite();
  293. extern void vocstopwrite();
  294.  
  295. char *wavnames[] = {
  296.     "wav",
  297.     (char *) 0
  298. };
  299. extern void wavstartread();
  300. extern LONG wavread();
  301. extern void wavstartwrite();
  302. extern void wavwrite();
  303. extern void wavstopwrite();
  304.  
  305. char *wvenames[] = {
  306.       "wve",
  307.       (char *) 0
  308. };
  309. extern void wvestartread();
  310. extern LONG wveread();
  311. extern void wvestartwrite();
  312. extern void wvewrite();
  313. extern void wvestopwrite();
  314.  
  315. extern void nothing();
  316. extern LONG nothing_success();
  317.  
  318. EXPORT format_t formats[] = {
  319.     {aiffnames, FILE_STEREO,
  320.         aiffstartread, aiffread, aiffstopread,       /* SGI/Apple AIFF */
  321.         aiffstartwrite, aiffwrite, aiffstopwrite},
  322.     {alnames, FILE_STEREO,
  323.         alstartread, rawread, rawstopread,        /* a-law byte raw */
  324.         alstartwrite, rawwrite, rawstopwrite},    
  325. #if    defined(ALSA_PLAYER)
  326.     {alsanames, FILE_STEREO,
  327.         alsastartread, rawread, rawstopread,      /* /dev/snd/pcmXX */
  328.         alsastartwrite, rawwrite, rawstopwrite},
  329. #endif
  330.     {aunames, FILE_STEREO,
  331.         austartread, auread, rawstopread,      /* SPARC .AU w/header */
  332.         austartwrite, auwrite, austopwrite},    
  333.     {autonames, FILE_STEREO,
  334.         autostartread, nothing_success, nothing,/* Guess from header */
  335.         autostartwrite, nothing, nothing},     /* patched run time */
  336.     {cdrnames, FILE_STEREO,
  337.         cdrstartread, cdrread, cdrstopread,          /* CD-R format */
  338.         cdrstartwrite, cdrwrite, cdrstopwrite},
  339.     {cvsdnames, 0,
  340.             cvsdstartread, cvsdread, cvsdstopread,       /* Cont. Variable */
  341.             cvsdstartwrite, cvsdwrite, cvsdstopwrite},    /* Slope Delta */
  342.     {datnames, 0,
  343.         datstartread, datread, nothing,     /* Text data samples */
  344.         datstartwrite, datwrite, nothing},
  345.     {dvmsnames, 0,
  346.             dvmsstartread, cvsdread, cvsdstopread,       /* Cont. Variable */
  347.             dvmsstartwrite, cvsdwrite, dvmsstopwrite},   /* Slope Delta */
  348. #ifdef HAVE_LIBGSM
  349.     {gsmnames, 0,
  350.             gsmstartread, gsmread, gsmstopread,            /* GSM 06.10 */
  351.             gsmstartwrite, gsmwrite, gsmstopwrite},
  352. #endif
  353.     {hcomnames, 0,
  354.         hcomstartread, hcomread, hcomstopread,      /* Mac FSSD/HCOM */
  355.         hcomstartwrite, hcomwrite, hcomstopwrite},
  356.         {maudnames, FILE_STEREO,                        /* Amiga MAUD */
  357.         maudstartread, maudread, maudstopread,
  358.         maudstartwrite, maudwrite, maudstopwrite},
  359. #if    defined(OSS_PLAYER)
  360.     /* OSS player. */
  361.     {ossdspnames, FILE_STEREO,
  362.         ossdspstartread, rawread, rawstopread,      /* /dev/dsp */
  363.         ossdspstartwrite, rawwrite, rawstopwrite},
  364. #endif
  365.     {rawnames, FILE_STEREO,
  366.         rawstartread, rawread, rawstopread,            /* Raw format */
  367.         rawstartwrite, rawwrite, rawstopwrite},
  368. #if    defined(BLASTER) || defined(SBLAST)
  369.     /* 386 Unix sound blaster player. */
  370.     {sbdspnames, FILE_STEREO,
  371.         sbdspstartread, sbdspread, sbdspstopread,      /* /dev/sbdsp */
  372.         sbdspstartwrite, sbdspwrite, sbdspstopwrite},    
  373. #endif
  374.     {sbnames, FILE_STEREO,
  375.         sbstartread, rawread, rawstopread,       /* signed byte raw */
  376.         sbstartwrite, rawwrite, rawstopwrite},    
  377.     {sfnames, FILE_STEREO,
  378.         sfstartread, rawread, rawstopread,       /* IRCAM Sound File */
  379.         sfstartwrite, rawwrite, rawstopwrite},
  380.     {smpnames, FILE_STEREO | FILE_LOOPS,
  381.         smpstartread, smpread, nothing,           /* SampleVision sound */
  382.         smpstartwrite, smpwrite, smpstopwrite},         /* Turtle Beach */
  383.     {sndrnames, FILE_STEREO,
  384.         sndtstartread, rawread, rawstopread,   /* Sounder Sound File */
  385.         sndrstartwrite, rawwrite, rawstopwrite},
  386.     {sndtnames, FILE_STEREO,
  387.         sndtstartread, rawread, rawstopread,   /* Sndtool Sound File */
  388.         sndtstartwrite, sndtwrite, sndtstopwrite},
  389. #if    defined(SUNAUDIO_PLAYER)
  390.     /* Sun /dev/audio player. */
  391.     {sunnames, FILE_STEREO,
  392.         sunstartread, rawread, rawstopread,            /* /dev/audio */
  393.         sunstartwrite, rawwrite, rawstopwrite},
  394. #endif
  395.     {svxnames, FILE_STEREO,
  396.         svxstartread, svxread, svxstopread,            /* Amiga 8SVX */
  397.         svxstartwrite, svxwrite, svxstopwrite},
  398.     {swnames, FILE_STEREO,
  399.         swstartread, rawread, rawstopread,        /* signed word raw */
  400.         swstartwrite, rawwrite, rawstopwrite},
  401.     {txwnames, 0,
  402.             txwstartread, txwread, txwstopread,      /* Yamaha TX16W and */
  403.             txwstartwrite, txwwrite, txwstopwrite},        /* SY99 waves */
  404.     {ubnames, FILE_STEREO,
  405.         ubstartread, rawread, rawstopread,     /* unsigned byte raw */
  406.         ubstartwrite, rawwrite, rawstopwrite},
  407.     {ulnames, FILE_STEREO,
  408.         ulstartread, rawread, rawstopread,        /* u-law byte raw */
  409.         ulstartwrite, rawwrite, rawstopwrite},    
  410.     {uwnames, FILE_STEREO,
  411.         uwstartread, rawread, rawstopread,     /* unsigned word raw */
  412.         uwstartwrite, rawwrite, rawstopwrite},    
  413.     {vocnames, FILE_STEREO,
  414.         vocstartread, vocread, vocstopread,    /* Sound Blaster .VOC */
  415.         vocstartwrite, vocwrite, vocstopwrite},
  416.     {wavnames, FILE_STEREO,
  417.         wavstartread, wavread, nothing,        /* Microsoft .wav */
  418.         wavstartwrite, wavwrite, wavstopwrite},    
  419.     {wvenames, 0,
  420.         wvestartread, wveread, rawstopread,            /* Psion .wve */
  421.         wvestartwrite, wvewrite, wvestopwrite},
  422.     {0, 0,
  423.      0, 0, 0, 0, 0, 0}
  424. };
  425.  
  426. /* Effects handlers. */
  427.  
  428. extern void null_drain();        /* dummy drain routine */
  429.  
  430. extern void avg_getopts();
  431. extern void avg_start();
  432. extern void avg_flow();
  433. extern void avg_stop();
  434.  
  435. extern void band_getopts();
  436. extern void band_start();
  437. extern void band_flow();
  438. extern void band_stop();
  439.  
  440. extern void chorus_getopts();
  441. extern void chorus_start();
  442. extern void chorus_flow();
  443. extern void chorus_drain();
  444. extern void chorus_stop();
  445.  
  446. extern void copy_getopts();
  447. extern void copy_start();
  448. extern void copy_flow();
  449. extern void copy_stop();
  450.  
  451. extern void cut_getopts();
  452. extern void cut_start();
  453. extern void cut_flow();
  454. extern void cut_stop();
  455.  
  456. extern void deemph_getopts();
  457. extern void deemph_start();
  458. extern void deemph_flow();
  459. extern void deemph_stop();
  460.  
  461. #ifdef    USE_DYN
  462. extern void dyn_getopts();
  463. extern void dyn_start();
  464. extern void dyn_flow();
  465. extern void dyn_stop();
  466. #endif
  467.  
  468. extern void echo_getopts();
  469. extern void echo_start();
  470. extern void echo_flow();
  471. extern void echo_drain();
  472. extern void echo_stop();
  473.  
  474. extern void echos_getopts();
  475. extern void echos_start();
  476. extern void echos_flow();
  477. extern void echos_drain();
  478. extern void echos_stop();
  479.  
  480. extern void flanger_getopts();
  481. extern void flanger_start();
  482. extern void flanger_flow();
  483. extern void flanger_drain();
  484. extern void flanger_stop();
  485.  
  486. extern void highp_getopts();
  487. extern void highp_start();
  488. extern void highp_flow();
  489. extern void highp_stop();
  490.  
  491. extern void lowp_getopts();
  492. extern void lowp_start();
  493. extern void lowp_flow();
  494. extern void lowp_stop();
  495.  
  496. extern void map_getopts();
  497. extern void map_start();
  498. extern void map_flow();
  499.  
  500. extern void mask_getopts();
  501. extern void mask_flow();
  502.  
  503. extern void phaser_getopts();
  504. extern void phaser_start();
  505. extern void phaser_flow();
  506. extern void phaser_drain();
  507. extern void phaser_stop();
  508.  
  509. extern void pick_getopts();
  510. extern void pick_start();
  511. extern void pick_flow();
  512. extern void pick_stop();
  513.  
  514. extern void poly_getopts();
  515. extern void poly_start();
  516. extern void poly_flow();
  517. extern void poly_drain();
  518. extern void poly_stop();
  519.  
  520. extern void rate_getopts();
  521. extern void rate_start();
  522. extern void rate_flow();
  523. extern void rate_stop();
  524.  
  525. extern void resample_getopts();
  526. extern void resample_start();
  527. extern void resample_flow();
  528. extern void resample_drain();
  529. extern void resample_stop();
  530.  
  531. extern void reverb_getopts();
  532. extern void reverb_start();
  533. extern void reverb_flow();
  534. extern void reverb_drain();
  535. extern void reverb_stop();
  536.  
  537. extern void reverse_getopts();
  538. extern void reverse_start();
  539. extern void reverse_flow();
  540. extern void reverse_drain();
  541. extern void reverse_stop();
  542.  
  543. extern void split_getopts();
  544. extern void split_start();
  545. extern void split_flow();
  546. extern void split_stop();
  547.  
  548. extern void stat_getopts();
  549. extern void stat_start();
  550. extern void stat_flow();
  551. extern void stat_stop();
  552.  
  553. extern void swap_getopts();
  554. extern void swap_start();
  555. extern void swap_flow();
  556. extern void swap_drain();
  557. extern void swap_stop();
  558.  
  559. extern void vibro_getopts();
  560. extern void vibro_start();
  561. extern void vibro_flow();
  562. extern void vibro_stop();
  563.  
  564. /*
  565.  * EFF_CHAN means that the number of channels can change.
  566.  * EFF_RATE means that the sample rate can change.
  567.  * The first effect which can handle a data rate change, stereo->mono, etc.
  568.  * is the default handler for that problem.
  569.  * 
  570.  * EFF_MCHAN just means that the effect is coded for multiple channels.
  571.  */
  572.  
  573. EXPORT effect_t effects[] = {
  574.     {"null", 0,             /* stand-in, never gets called */
  575.         nothing, nothing, nothing, null_drain, nothing},
  576.     {"avg", EFF_CHAN | EFF_MCHAN, 
  577.         avg_getopts, avg_start, avg_flow, null_drain, avg_stop},
  578.     {"band", 0, 
  579.         band_getopts, band_start, band_flow, null_drain, band_stop},
  580.     {"chorus", 0,
  581.             chorus_getopts, chorus_start, chorus_flow,
  582.      chorus_drain, chorus_stop},
  583.     {"copy", EFF_MCHAN, 
  584.         copy_getopts, copy_start, copy_flow, null_drain, nothing},
  585.     {"cut", EFF_MCHAN, 
  586.         cut_getopts, cut_start, cut_flow, null_drain, nothing},
  587.     {"deemph", EFF_MCHAN,
  588.             deemph_getopts, deemph_start, deemph_flow,
  589.             null_drain, deemph_stop},
  590. #ifdef    USE_DYN
  591.     {"dyn", 0, 
  592.         dyn_getopts, dyn_start, dyn_flow, null_drain, dyn_stop},
  593. #endif
  594.     {"echo", 0, 
  595.         echo_getopts, echo_start, echo_flow, echo_drain, echo_stop},
  596.     {"echos", 0, 
  597.         echos_getopts, echos_start, echos_flow,
  598.             echos_drain, echos_stop},
  599.     {"flanger", 0,
  600.             flanger_getopts, flanger_start, flanger_flow,
  601.             flanger_drain, flanger_stop},
  602.     {"highp", 0, 
  603.         highp_getopts, highp_start, highp_flow, null_drain,highp_stop},
  604.     {"lowp", 0, 
  605.         lowp_getopts, lowp_start, lowp_flow, null_drain, lowp_stop},
  606.     {"map", EFF_REPORT, 
  607.         map_getopts, map_start, map_flow, null_drain, nothing},
  608.     {"mask", EFF_MCHAN, 
  609.         mask_getopts, nothing, mask_flow, null_drain, nothing},
  610.     {"phaser", 0,
  611.             phaser_getopts, phaser_start, phaser_flow,
  612.             phaser_drain, phaser_stop},
  613.     {"pick", EFF_CHAN | EFF_MCHAN, 
  614.         pick_getopts, pick_start, pick_flow, null_drain, pick_stop},
  615.     {"polyphase", EFF_RATE,
  616.             poly_getopts, poly_start, poly_flow,
  617.             poly_drain, poly_stop},
  618.     {"rate", EFF_RATE, 
  619.         rate_getopts, rate_start, rate_flow, null_drain, nothing},
  620.     {"resample", EFF_RATE, 
  621.         resample_getopts, resample_start, resample_flow, 
  622.         resample_drain, resample_stop},
  623.     {"reverb", 0,
  624.             reverb_getopts, reverb_start, reverb_flow,
  625.             reverb_drain, reverb_stop},
  626.     {"reverse", 0, 
  627.         reverse_getopts, reverse_start, 
  628.         reverse_flow, reverse_drain, reverse_stop},
  629.     {"split", EFF_CHAN | EFF_MCHAN, 
  630.         split_getopts, split_start, split_flow, null_drain,split_stop},
  631.     {"stat", EFF_MCHAN | EFF_REPORT | EFF_RATE | EFF_CHAN,
  632.         stat_getopts, stat_start, stat_flow, null_drain, stat_stop},
  633.     {"swap", EFF_MCHAN,
  634.         swap_getopts, swap_start, swap_flow, swap_drain, swap_stop},
  635.     {"vibro", 0, 
  636.         vibro_getopts, vibro_start, vibro_flow, null_drain, nothing},
  637.     {0, 0, 0, 0, 0, 0, 0}
  638. };
  639.  
  640.