mikmod.texi
上传用户:wstnjxml
上传日期:2014-04-03
资源大小:7248k
文件大小:110k
源码类别:

Windows CE

开发平台:

C/C++

  1. input texinfo @c -*-texinfo-*-
  2. @c %**start of header
  3. @setfilename mikmod.info
  4. @settitle MikMod sound library
  5. @c %**end of header
  6. @ignore
  7.   MikMod Sound Library Documentation
  8.   $Id: mikmod.texi,v 1.2 2004/01/27 18:59:23 raph Exp $
  9. @end ignore
  10. @c comment this during modifications
  11. @finalout
  12. @c @iftex
  13. @c @afourpaper
  14. @c @end iftex
  15. @syncodeindex tp vr
  16. @set documentation-version 1.3
  17. @set documentation-date February 2004
  18. @set library-version 3.1.12
  19. @set authorname Miodrag Vallat
  20. @set authoraddress miod@@mikmod.org
  21. @c ========================================================== Copyright (info)
  22. @ifinfo
  23. Copyright @copyright{} 1998, 1999, 2000, 2001, 2002 Miodrag Vallat and others --- see
  24. file AUTHORS for complete list.
  25. This library is free software; you can redistribute it and/or modify
  26. it under the terms of the GNU Library General Public License as
  27. published by the Free Software Foundation; either version 2 of
  28. the License, or (at your option) any later version.
  29.  
  30. This program is distributed in the hope that it will be useful,
  31. but WITHOUT ANY WARRANTY; without even the implied warranty of
  32. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  33. GNU Library General Public License for more details.
  34.  
  35. You should have received a copy of the GNU Library General Public
  36. License along with this library; if not, write to the Free Software
  37. Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  38. @end ifinfo
  39. @c ========================================================== Title page
  40. @titlepage
  41. @title{MikMod Sound Library}
  42. @subtitle Documentation edition @value{documentation-version}
  43. @subtitle @value{documentation-date}
  44. @author @value{authorname}
  45. @author (@code{@value{authoraddress}})
  46. @page
  47. @vskip 0pt plus 1filll
  48. @c ========================================================== Copyright (TeX)
  49. Copyright @copyright{} 1998, 1999, 2000, 2001, 2002 Miodrag Vallat and others --- see
  50. file AUTHORS for complete list.
  51. This library is free software; you can redistribute it and/or modify
  52. it under the terms of the GNU Library General Public License as
  53. published by the Free Software Foundation; either version 2 of
  54. the License, or (at your option) any later version.
  55.  
  56. This program is distributed in the hope that it will be useful,
  57. but WITHOUT ANY WARRANTY; without even the implied warranty of
  58. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  59. GNU Library General Public License for more details.
  60.  
  61. You should have received a copy of the GNU Library General Public
  62. License along with this library; if not, write to the Free Software
  63. Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  64. @end titlepage
  65. @c ========================================================== File information
  66. @ifnottex
  67. @dircategory Programming
  68. @direntry
  69. * MikMod: (mikmod).            MikMod Sound Library.
  70. @end direntry
  71. @c ========================================================== Top node
  72. @node Top, Introduction, (dir), (dir)
  73. @top MikMod Sound Library
  74. @w{This manual documents the MikMod Sound Library, version @value{library-version}.}
  75. @menu
  76. * Introduction::          What is MikMod ?
  77. * Tutorial::              Your first steps with MikMod.
  78. * Using the Library::     A thematic presentation of the library.
  79. * Library Reference::     Detailed description of the functions and variables.
  80. * Index::
  81. @end menu
  82. @end ifnottex
  83. @c ========================================================== Introduction
  84. @node Introduction, Tutorial, Top, Top
  85. @chapter Introduction
  86. The MikMod sound library is an excellent way for a programmer to add music
  87. and sound effects to an application. It is a powerful and flexible library,
  88. with a simple and easy-to-learn API.
  89. Besides, the library is very portable and runs under a lot of Unices, as well
  90. as under OS/2, MacOS and Windows. Third party individuals also maintain ports
  91. on other systems, including MS-DOS, and BeOS.
  92. MikMod is able to play a wide range of module formats, as well as digital sound
  93. files. It can take advantage of particular features of your system, such as
  94. sound redirection over the network. And due to its modular nature, the library
  95. can be extended to support more sound or module formats, as well as new
  96. hardware or other sound output capabilities, as they appear.
  97. @c ========================================================== Tutorial
  98. @node Tutorial, Using the Library, Introduction, Top
  99. @chapter Tutorial
  100. This chapter will describe how to quickly incorporate MikMod's power into
  101. your programs. It doesn't cover everything, but that's a start and I hope
  102. it will help you understand the library philosophy.
  103. If you have a real tutorial to put here, you're welcome ! Please send it to
  104. me@enddots{}
  105. @menu
  106. * MikMod Concepts::         A few things you'll need to know.
  107. * A Skeleton Program::      The shortest MikMod program.
  108. * Playing Modules::         How to create a simple module player.
  109. * Playing Sound Effects::   How to play simple sound effects.
  110. * More Sound Effects::      How to play more complex sound effects.
  111. @end menu
  112. @c ========================================================== Concepts
  113. @node MikMod Concepts, A Skeleton Program, Tutorial, Tutorial
  114. @section MikMod Concepts
  115. MikMod's sound output is composed of several sound @emph{voices} which are
  116. mixed, either in software or in hardware, depending of your hardware
  117. configuration. Simple sounds, like sound effects, use only one voice, whereas
  118. sound modules, which are complex arrangements of sound effects, use several
  119. voices.
  120. MikMod's functions operate either globally, or at the voice level. Differences
  121. in the handling of sound effects and modules are kept minimal, at least for
  122. the programmer.
  123. The sound playback is done by a @emph{sound driver}. MikMod provides several
  124. sound drivers: different hardware drivers, and some software drivers to
  125. redirect sound in a file, or over the network. You can even add your own
  126. driver, register it to make it known by the library, and select it (this is
  127. exactly what the module plugin of xmms does).
  128. @c ========================================================== Skeleton
  129. @node A Skeleton Program, Playing Modules, MikMod Concepts, Tutorial
  130. @section A Skeleton Program
  131. @iftex
  132. @findex MikMod_Exit
  133. @findex MikMod_Init
  134. @findex MikMod_RegisterAllDrivers
  135. @end iftex
  136. To use MikMod in your program, there are a few steps required:
  137. @itemize @bullet
  138. @item Include @file{mikmod.h} in your program.
  139. @item Register the MikMod drivers you need.
  140. @item Initialize the library with MikMod_Init() before using any other MikMod
  141. function.
  142. @item Give up resources with MikMod_Exit() at the end of your program, or before
  143. when MikMod is not needed anymore.
  144. @item Link your application with the MikMod sound library.
  145. @end itemize
  146. Here's a program which meets all those conditions:
  147. @example
  148. /* MikMod Sound Library example program: a skeleton */
  149. #include <mikmod.h>
  150. main()
  151. @{
  152. /* register all the drivers */
  153. MikMod_RegisterAllDrivers();
  154. /* initialize the library */
  155. MikMod_Init("");
  156. /* we could play some sound here... */
  157. /* give up */
  158. MikMod_Exit();
  159. @}
  160. @end example
  161. This program would be compiled with the following command line:
  162. @code{cc -o example example.c `libmikmod-config --cflags` `libmikmod-config --libs`}
  163. Although this programs produces no useful result, many things happen when you
  164. run it. The call to @code{MikMod_RegisterAllDrivers} registers all the drivers
  165. embedded in the MikMod library. Then, @code{MikMod_Init} chooses the more
  166. adequate driver and initializes it. The program is now ready to produce sound.
  167. When sound is not needed any more, @code{MikMod_Exit} is used to relinquish
  168. memory and let other programs have access to the sound hardware.
  169. @c ========================================================== Modules
  170. @node Playing Modules, Playing Sound Effects, A Skeleton Program, Tutorial
  171. @section Playing Modules
  172. @iftex
  173. @findex MikMod_Exit
  174. @findex MikMod_Init
  175. @findex MikMod_RegisterAllDrivers
  176. @findex MikMod_RegisterAllLoaders
  177. @findex MikMod_Update
  178. @vindex MikMod_errno
  179. @findex MikMod_strerror
  180. @findex Player_Active
  181. @findex Player_Free
  182. @findex Player_Load
  183. @findex Player_Start
  184. @findex Player_Stop
  185. @end iftex
  186. Our program is not really useful if it doesn't produce sound. Let's suppose
  187. you've got this good old module, ``Beyond music'', in the file
  188. @file{beyond music.mod}. How about playing it ?
  189. To do this, we'll use the following code:
  190. @example
  191. /* MikMod Sound Library example program: a simple module player */
  192. #include <unistd.h>
  193. #include <mikmod.h>
  194. main()
  195. @{
  196.     MODULE *module;
  197.     /* register all the drivers */
  198.     MikMod_RegisterAllDrivers();
  199.     /* register all the module loaders */
  200.     MikMod_RegisterAllLoaders();
  201.     /* initialize the library */
  202.     md_mode |= DMODE_SOFT_MUSIC;
  203.     if (MikMod_Init("")) @{
  204.         fprintf(stderr, "Could not initialize sound, reason: %sn",
  205.                 MikMod_strerror(MikMod_errno));
  206.         return;
  207.     @}
  208.     /* load module */
  209.     module = Player_Load("beyond music.mod", 64, 0);
  210.     if (module) @{
  211.         /* start module */
  212.         Player_Start(module);
  213.         while (Player_Active()) @{
  214.             /* we're playing */
  215.             usleep(10000);
  216.             MikMod_Update();
  217.         @}
  218.         Player_Stop();
  219.         Player_Free(module);
  220.     @} else
  221.         fprintf(stderr, "Could not load module, reason: %sn",
  222.                 MikMod_strerror(MikMod_errno));
  223.     /* give up */
  224.     MikMod_Exit();
  225. @}
  226. @end example
  227. What's new here ? First, we've not only registered MikMod's device driver,
  228. but also the module loaders. MikMod comes with a large choice of module
  229. loaders, each one for a different module type. Since @emph{every} loader is
  230. called to determine the type of the module when we try to load them, you may
  231. want to register only a few of them to save time. In our case, we don't matter,
  232. so we happily register every module loader.
  233. Then, there's an extra line before calling @code{MikMod_Init}. We change the
  234. value of MikMod's variable @code{md_mode} to tell the library that we want the
  235. module to be processed by the software. If you're the happy owner of a GUS-type
  236. card, you could use the specific hardware driver for this card, but in this
  237. case you should not set the @code{DMODE_SOFT_MUSIC} flag.
  238. We'll ensure that @code{MikMod_Init} was successful. Note that, in case of
  239. error, MikMod provides the variable @code{MikMod_errno}, an equivalent of
  240. the C library @code{errno} for MikMod errors, and the function
  241. @code{MikMod_strerror}, an equivalent to @code{strerror}.
  242. Now onto serious business ! The module is loaded with the @code{Player_Load}
  243. function, which takes the name of the module file, and the number of voices
  244. afforded to the module. In this case, the module has only 4 channels, so 4
  245. voices, but complex Impulse Tracker modules can have a lot of voices (as they
  246. can have as many as 256 virtual channels with so-called ``new note actions'').
  247. Since empty voices don't cost time to be processed, it is safe to use a big
  248. value, such as 64 or 128. The third parameter is the ``curiosity'' of the
  249. loader: if nonzero, the loader will search for hidden parts in the module.
  250. However, only a few module formats can embed hidden or non played parts, so
  251. we'll use 0 here.
  252. Now that the module is ready to play, let's play it. We inform the player that
  253. the current module is @code{module} with @code{Player_Start}. Playback starts,
  254. but we have to update it on a regular basis. So there's a loop on the result
  255. of the @code{Player_Active} function, which will tell us if the module has
  256. finished. To update the sound, we simply call @code{MikMod_Update}.
  257. After the module has finished, we tell the player its job is done with
  258. @code{Player_Stop}, and we free the module with @code{Player_Free}.
  259. @c ========================================================== Sound effects
  260. @node Playing Sound Effects, More Sound Effects, Playing Modules, Tutorial
  261. @section Playing Sound Effects
  262. @iftex
  263. @findex MikMod_DisableOutput
  264. @findex MikMod_EnableOutput
  265. @findex MikMod_Exit
  266. @findex MikMod_Init
  267. @findex MikMod_RegisterAllDrivers
  268. @findex MikMod_SetNumVoices
  269. @findex MikMod_Update
  270. @findex Voice_Stopped
  271. @findex Sample_Free
  272. @findex Sample_Load
  273. @findex Sample_Play
  274. @end iftex
  275. MikMod is not limited to playing modules, it can also play sound effects, that
  276. is, module samples. It's a bit more complex than playing a module, because the
  277. module player does a lot of things for us, but here we'll get more control over
  278. what is actually played by the program. Let's look at an example:
  279. @example
  280. /* MikMod Sound Library example program: sound effects */
  281. #include <unistd.h>
  282. #include <mikmod.h>
  283. main()
  284. @{
  285.     int i;
  286.     /* sound effects */
  287.     SAMPLE *sfx1, *sfx2;
  288.     /* voices */
  289.     int v1, v2;
  290.     /* register all the drivers */
  291.     MikMod_RegisterAllDrivers();
  292.     /* initialize the library */
  293.     md_mode |= DMODE_SOFT_SNDFX;
  294.     if (MikMod_Init("")) @{
  295.         fprintf(stderr, "Could not initialize sound, reason: %sn",
  296.                 MikMod_strerror(MikMod_errno));
  297.         return;
  298.     @}
  299.     /* load samples */
  300.     sfx1 = Sample_Load("first.wav");
  301.     if (!sfx1) @{ 
  302.         MikMod_Exit();
  303.         fprintf(stderr, "Could not load the first sound, reason: %sn",
  304.                 MikMod_strerror(MikMod_errno));
  305.         return;
  306.     @}
  307.     sfx2 = Sample_Load("second.wav");
  308.     if (!sfx2) @{
  309.         Sample_Free(sfx1);
  310.         MikMod_Exit();
  311.         fprintf(stderr, "Could not load the second sound, reason: %sn",
  312.                 MikMod_strerror(MikMod_errno));
  313.         return;
  314.     @}
  315.     /* reserve 2 voices for sound effects */
  316.     MikMod_SetNumVoices(-1, 2);
  317.     /* get ready to play */
  318.     MikMod_EnableOutput();
  319.     /* play first sample */
  320.     v1 = Sample_Play(sfx1, 0, 0);
  321.     for(i = 0; i < 5; i++) @{
  322.         MikMod_Update();
  323.         usleep(100000);
  324.     @}
  325.     /* half a second later, play second sample */
  326.     v2 = Sample_Play(sfx2, 0, 0);
  327.     do @{
  328.         MikMod_Update();
  329.         usleep(100000);
  330.     @} while (!Voice_Stopped(v2));
  331.     MikMod_DisableOutput();
  332.     Sample_Free(sfx2);
  333.     Sample_Free(sfx1);
  334.     MikMod_Exit();
  335. @}
  336. @end example
  337. As in the previous example, we begin by registering the sound drivers and
  338. initializing the library. We also ask for software mixing by modifying the
  339. variable @code{md_mode}.
  340. It's time to load our files, with the @code{Sample_Load} function. Don't forget
  341. to test the return value --- it looks ugly here on such a small example, but
  342. it's a good practice@enddots{}
  343. Since we want to play two samples, we have to use at least two voices for this,
  344. so we reserve them with a @code{MikMod_SetNumVoices} call. The first parameter
  345. sets the number of module voices, and the second parameter the number of sound
  346. effect voices. We don't want to set the number of module voices here (it's part
  347. of the module player's duty), so we use the value @code{-1} to keep the current
  348. value, and we reserve two sound effect voices.
  349. Now we're ready to play, so we call @code{MikMod_EnableOutput} to make the
  350. driver ready. Sound effects are played by the @code{Sample_Play} function.
  351. You just have to specify which sample you want to play, the offset from which
  352. you want to start, and the playback flags. More on this later. The function
  353. returns the number of the voice associated to the sample.
  354. We play the first sample for half a second, then we start to play the second
  355. sample. Since we've reserved two channels, both samples play simultaneously. We
  356. use the @code{Voice_Stopped} function to stop the playback: it returns the
  357. current status of the voice argument, which is zero when the sample plays and
  358. nonzero when it has finished. So the @code{do} loop will stop exactly when
  359. the second sample is finished, regardless of the length of the first sample.
  360. To finish, we get rid of the samples with @code{Sample_Free}.
  361. @c ========================================================== More effects
  362. @node More Sound Effects, , Playing Sound Effects, Tutorial
  363. @section More Sound Effects
  364. @iftex
  365. @findex MikMod_Update
  366. @findex Sample_Play
  367. @findex Voice_SetFrequency
  368. @findex Voice_SetPanning
  369. @findex Voice_SetVolume
  370. @findex Voice_Stop
  371. @findex Voice_Stopped
  372. @end iftex
  373. Sound effects have some attributes that can be affected to control the playback.
  374. These are speed, panning, and volume. Given a voice number, you can affect these
  375. attributes with the @code{Voice_SetFrequency}, @code{Voice_SetPanning} and
  376. @code{Voice_SetVolume} functions.
  377. In the previous example, we'll replace the actual sound code, located between
  378. the calls to @code{MikMod_EnableOutput} and @code{MikMod_DisableOutput}, with
  379. the following code:
  380. @example
  381.     Sample_Play(sfx1, 0, 0);
  382.     for(i = 0; i < 5; i++) @{
  383.         MikMod_Update();
  384.         usleep(100000);
  385.     @}
  386.     v2 = Sample_Play(sfx2, 0, SFX_CRITICAL);
  387.     i = 0;
  388.     do @{
  389.         MikMod_Update();
  390.         usleep(100000);
  391.         v1 = Sample_Play(sfx1, 0, 0);
  392.         Voice_SetVolume(v1, 160);
  393.         Voice_SetFrequency(v1, (sfx1->speed * (100 + i)) / 100);
  394.         Voice_SetPanning(v2, (i++ & 1) ? PAN_LEFT : PAN_RIGHT);
  395.     @} while (!Voice_Stopped(v2));
  396. @end example
  397. The first thing you'll notice, is the @code{SFX_CRITICAL} flag used to play the
  398. second sample. Since the @code{do} loop will add another sample every 100
  399. @dmn{milliseconds}, and we reserved only two voices, the oldest voice will be
  400. cut each time this is necessary. Doing this would cut the second sample in the
  401. second iteration of the loop. However, since we flagged this sound as
  402. ``critical'', it won't be cut until it is finished or we stop it with a
  403. @code{Voice_Stop} call. So the second sample will play fine, whereas the first
  404. sample will be stopped every loop iteration.
  405. Then, we choose to play the first sample a bit lower, with
  406. @code{Voice_SetVolume}. Volume voices range from 0 (silence) to 256. In
  407. this case we play the sample at 160. To make the sound look weird, we also
  408. change its frequency with @code{Voice_SetFrequency}. The computation in the
  409. example code makes the frequency more and more high (starting from the sample
  410. frequency and then increasing from 1% each iteration).
  411. And to demonstrate the @code{Voice_SetPanning} function, we change the panning
  412. of the second sample at each iteration from the left to the right. The argument
  413. can be one of the standard panning @code{PAN_LEFT}, @code{PAN_RIGHT},
  414. @code{PAN_CENTER} and @code{PAN_SURROUND}@footnote{@code{PAN_SURROUND} will be
  415. mapped to @code{PAN_CENTER} if the library is initialized without surround
  416. sound, that is, if the variable @code{md_mode} doesn't have the bit
  417. @code{DMODE_SURROUND} set.}, or a numeric value between 0 (@code{PAN_LEFT}) and
  418. 255 (@code{PAN_RIGHT}).
  419. @c ========================================================== Using
  420. @node Using the Library, Library Reference, Tutorial, Top
  421. @chapter Using the Library
  422. This chapter describes the various parts of the library and their uses.
  423. @menu
  424. * Library Version::
  425. * Type Definitions::
  426. * Error Handling::
  427. * Library Initialization::
  428. * Samples and Voice Control::
  429. * Modules and Player Control::
  430. * Loading Data from Memory::
  431. @end menu
  432. @c ========================================================== Version
  433. @node Library Version, Type Definitions, Using the Library, Using the Library
  434. @section Library Version
  435. @iftex
  436. @findex MikMod_GetVersion
  437. @end iftex
  438. If your program is dynamically linked with the MikMod library, you should check
  439. which version of the library you're working with.
  440. To do this, the library defines a few constants and a function to help you
  441. determine if the current library is adequate for your needs or if it has to
  442. be upgraded.
  443. When your program includes @code{mikmod.h}, the following constants are
  444. defined:
  445. @itemize @bullet
  446. @item @code{LIBMIKMOD_VERSION_MAJOR} is equal to the major version number of
  447. the library.
  448. @item @code{LIBMIKMOD_VERSION_MINOR} is equal to the minor version number of
  449. the library.
  450. @item @code{LIBMIKMOD_REVISION} is equal to the revision number of the library.
  451. @item @code{LIBMIKMOD_VERSION} is the sum of @code{LIBMIKMOD_VERSION_MAJOR} shifted 16 times, @code{LIBMIKMOD_VERSION_MINOR} shifted 8 times, and
  452. @code{LIBMIKMOD_REVISION}.
  453. @end itemize
  454. So your program can tell with which version of the library it has been compiled
  455. this way:
  456. @example
  457. printf("Compiled with MikMod Sound Library version %ld.%ld.%ldn",
  458.        LIBMIKMOD_VERSION_MAJOR,
  459.        LIBMIKMOD_VERSION_MINOR,
  460.        LIBMIKMOD_REVISION);
  461. @end example
  462. The library defines the function @code{MikMod_GetVersion} which returns the
  463. value of LIBMIKMOD_VERSION for the library. If this value is greater than or
  464. equal to the value of LIBMIKMOD_VERSION for your program, your program will
  465. work; otherwise, you'll have to inform the user that he has to upgrade the
  466. library:
  467. @example
  468. @{
  469.     long engineversion = MikMod_GetVersion();
  470.     if (engineversion < LIBMIKMOD_VERSION) @{
  471.         printf("MikMod library version (%ld.%ld.%ld) is too old.n",
  472.                (engineversion >> 16) & 255,
  473.                (engineversion >> 8) & 255,
  474.                (engineversion) & 255);
  475.         printf("This programs requires at least version %ld.%ld.%ldn",
  476.                LIBMIKMOD_VERSION_MAJOR,
  477.                LIBMIKMOD_VERSION_MINOR,
  478.                LIBMIKMOD_REVISION);
  479.         puts("Please upgrade your MikMod library.");
  480.         exit(1);
  481.     @}
  482. @}
  483. @end example
  484. @c ========================================================== Types
  485. @node Type Definitions, Error Handling, Library Version, Using the Library
  486. @section Type Definitions
  487. @iftex
  488. @tindex BOOL
  489. @tindex CHAR
  490. @tindex SBYTE
  491. @tindex SLONG
  492. @tindex SWORD
  493. @tindex UBYTE
  494. @tindex ULONG
  495. @tindex UWORD
  496. @end iftex
  497. MikMod defines several data types to deal with modules and sample data.
  498. These types have the same memory size on every platform MikMod has been ported
  499. to.
  500. These types are:
  501. @itemize @bullet
  502. @item @code{CHAR} is a printable character. For now it is the same as the
  503. @code{char} type, but in the future it may be wide char (Unicode) on some
  504. platforms.
  505. @item @code{SBYTE} is a signed 8 bit number (can range from -128 to 127).
  506. @item @code{UBYTE} is an unsigned 8 bit number (can range from 0 to 255).
  507. @item @code{SWORD} is a signed 16 bit number (can range from -32768 to 32767).
  508. @item @code{UWORD} is an unsigned 16 bit number (can range from 0 to 65535).
  509. @item @code{SLONG} is a signed 32 bit number (can range from -2.147.483.648 to
  510. 2.147.483.647).
  511. @item @code{ULONG} is an unsigned 32 bit number (can range from 0 to
  512. 4.294.967.296).
  513. @item @code{BOOL} is a boolean value. A value of 0 means false, any other value
  514. means true.
  515. @end itemize
  516. @c ========================================================== Errors
  517. @node Error Handling, Library Initialization, Type Definitions, Using the Library
  518. @section Error Handling
  519. @iftex
  520. @findex MikMod_RegisterErrorHandler
  521. @vindex MikMod_critical
  522. @vindex MikMod_errno
  523. @vindex MikMod_strerror
  524. @end iftex
  525. Although MikMod does its best to do its work, there are times where it can't.
  526. For example, if you're trying to play a corrupted file, well, it can't.
  527. A lot of MikMod functions return pointers or @code{BOOL} values. If the pointer
  528. is @code{NULL} or the @code{BOOL} is 0 (false), an error has occurred.
  529. MikMod errors are returned in the variable @code{MikMod_errno}. Each possible
  530. error has a symbolic error code, beginning with @code{MMERR_}. For example, if
  531. MikMod can't open a file, @code{MikMod_errno} will receive the value
  532. @code{MMERR_OPENING_FILE}.
  533. You can get an appropriate error message to display from the function
  534. @code{MikMod_strerror}.
  535. There is a second error variable named @code{MikMod_critical}. As its name
  536. suggests, it is only set if the error lets the library in an unstable state.
  537. This variable can only be set by the functions @code{MikMod_Init}, 
  538. @code{MikMod_SetNumVoices} and @code{MikMod_EnableOutput}. If one of these
  539. functions return an error and @code{MikMod_critical} is set, the library is left
  540. in the uninitialized state (i.e. it was not initialized, or @code{MikMod_Exit}
  541. was called).
  542. If you prefer, you can use a callback function to get notified of errors. This
  543. function must be prototyped as @code{void MyFunction(void)}. Then, call
  544. @code{MikMod_RegisterHandler} with your function as argument to have it notified
  545. when an error occurs. There can only be one callback function registered, but
  546. @code{MikMod_RegisterHandler} will return you the previous handler, so you can
  547. chain handlers if you want to.
  548. @c ========================================================== Initialization
  549. @node Library Initialization, Samples and Voice Control, Error Handling, Using the Library
  550. @section Library Initialization and Core Functions
  551. @iftex
  552. @findex MikMod_Active
  553. @findex MikMod_DisableOutput
  554. @findex MikMod_EnableOutput
  555. @findex MikMod_Exit
  556. @findex MikMod_InfoDriver
  557. @findex MikMod_Init
  558. @findex MikMod_InitThreads
  559. @findex MikMod_Lock
  560. @findex MikMod_RegisterAllDrivers
  561. @findex MikMod_RegisterDriver
  562. @findex MikMod_Reset
  563. @findex MikMod_SetNumVoices
  564. @findex MikMod_Unlock
  565. @findex MikMod_Update
  566. @vindex md_device
  567. @vindex md_mixfreq
  568. @vindex md_mode
  569. @end iftex
  570. To initialize the library, you must register some sound drivers first. You can
  571. either register all the drivers embedded in the library for your platform with
  572. @code{MikMod_RegisterAllDrivers}, or register only some of them with
  573. @code{MikMod_RegisterDriver}. If you choose to register the drivers manually,
  574. you must be careful in their order, since @code{MikMod_Init} will try them in
  575. the order you registered them. The @code{MikMod_RegisterAllDrivers} function
  576. registers the network drivers first (for playing sound over the network), then
  577. the hardware drivers, then the disk writers, and in last resort, the nosound
  578. driver. Registering the nosound driver first would not be a very good
  579. idea@enddots{}
  580. You can get some printable information regarding the registered drivers with
  581. @code{MikMod_InfoDriver}; don't forget to call @code{free} on the returned
  582. string when you don't need it anymore.
  583. After you've registered your drivers, you can initialize the sound playback
  584. with @code{MikMod_Init}, passing specific information to the driver if
  585. necessary. If you set the variable @code{md_device} to zero, which
  586. is its default value, the driver will be autodetected, that is, the first driver
  587. in the list that is available on the system will be used; otherwise only
  588. the driver whose order in the list of the registered drivers is equal to
  589. @code{md_device} will be tried.  If your playback settings, in the variables
  590. @code{md_mixfreq} and @code{md_mode}, are not supported by the device,
  591. @code{MikMod_Init} will fail.
  592. You can then choose the number of voices you need with
  593. @code{MikMod_SetNumVoices}, and activate the playback with
  594. @code{MikMod_EnableOutput}.
  595. Don't forget to call @code{MikMod_Update} as often as possible to process the
  596. sound mixing. If necessary, fork a dedicated process to do this, or if the
  597. library is thread-safe on your system, use a dedicated thread.
  598. If you want to change playback settings, most of them can't be changed on the
  599. fly. You'll need to stop the playback and reinitialize the driver. Use
  600. @code{MikMod_Active} to check if there is still sound playing; in this case,
  601. call @code{MikMod_DisableOutput} to end playback. Then, change your settings
  602. and call @code{MikMod_Reset}. You're now ready to select your number of voices
  603. and restart playback.
  604. When your program ends, don't forget to stop playback and call
  605. @code{MikMod_Exit} to leave the sound hardware in a coherent state.
  606. On systems that have pthreads, libmikmod is thread-safe@footnote{Unless you
  607. explicitely choose to create a non thread-safe version of libmikmod at
  608. compile-time.}. You can check this in your programs with the
  609. @code{MikMod_InitThreads} function. If this function returns 1, the library is
  610. thread-safe.
  611. The main benefit of thread-safety is that @code{MikMod_Update} can be called
  612. from a separate thread, which often makes application design easier. However,
  613. several libmikmod global variables are accessible from all your threads, so
  614. when more than one thread need to access libmikmod variables, you'll have to
  615. protect these access with the @code{MikMod_Lock} and @code{MikMod_Unlock}
  616. functions. If libmikmod is not thread-safe, these functions are no-ops.
  617. @c ========================================================== Samples
  618. @node Samples and Voice Control, Modules and Player Control, Library Initialization, Using the Library
  619. @section Samples and Voice Control
  620. @iftex
  621. @findex Voice_GetFrequency
  622. @findex Voice_GetPanning
  623. @findex Voice_GetPosition
  624. @findex Voice_GetVolume
  625. @findex Voice_Play
  626. @findex Voice_Stop
  627. @findex Voice_Stopped
  628. @findex Voice_SetFrequency
  629. @findex Voice_SetPanning
  630. @findex Voice_SetVolume
  631. @findex Sample_Free
  632. @findex Sample_Load
  633. @findex Sample_LoadFP
  634. @findex Sample_Play
  635. @end iftex
  636. Currently, MikMod only supports uncompressed mono WAV files as samples. You can
  637. load a sample by calling @code{Sample_Load} with a filename, or by calling
  638. @code{Sample_LoadFP} with an open @code{FILE*} pointer. These functions return
  639. a pointer to a @code{SAMPLE} structure, or @code{NULL} in case of error.
  640. The @code{SAMPLE} structure has a few interesting fields:
  641. @itemize @minus
  642. @item @code{speed} contains the default frequency of the sample.
  643. @item @code{volume} contains the default volume of the sample, ranging from 0 (silence)
  644. to 64.
  645. @item @code{panning} contains the default panning position of the sample.
  646. @end itemize
  647. Altering one of those fields will affect all voices currently playing the
  648. sample. You can achieve the same result on a single voice with the functions
  649. @code{Voice_SetFrequency}, @code{Voice_SetVolume} and @code{Voice_SetPanning}.
  650. Since the same sample can be played with different frequency, volume and panning
  651. parameters on each voice, you can get voice specific information with
  652. @code{Voice_GetFrequency}, @code{Voice_GetVolume} and @code{Voice_GetPanning}.
  653. You can also make your sample loop by setting the fields @code{loopstart} and
  654. @code{loopend} and or'ing @code{flags} with @code{SF_LOOP}. To compute your loop
  655. values, the field @code{length} will be useful. However, you must know that
  656. all the sample length are expressed in samples, i.e. 8 bits for an 8 bit sample,
  657. and 16 bit for a 16 bit sample@dots{} Test @code{flags} for the value
  658. @code{SF_16BITS} to know this.
  659. Speaking of flags, if you're curious and want to know the original format of the
  660. sample on disk (since libmikmod does some work on the sample data internally),
  661. refer to the @code{inflags} field.
  662. If the common forward loop isn't enough, you can play with some other flags:
  663. @code{SF_BIDI} will make your sample loop ``ping pong'' (back and forth), and
  664. @code{SF_REVERSE} will make it play backwards.
  665. To play your sample, use the @code{Sample_Play} function. This function
  666. will return a voice number which enable you to use the @code{Voice_xx}
  667. functions.
  668. The sample will play until another sample takes over its voice (when you play
  669. more samples than you reserved sound effect voices), unless it has been flagged
  670. as @code{SFX_CRITICAL}. You can force it to stop with @code{Voice_Stop}, or you
  671. can force another sample to take over this voice with @code{Voice_Play};
  672. however @code{Voice_Play} doesn't let you flag the new sample as critical.
  673. Non looping samples will free their voice channel as soon as they are finished;
  674. you can know the current playback position of your sample with
  675. @code{Voice_GetPosition}. If it is zero, either the sample has finished playing
  676. or it is just beginning; use @code{Voice_Stopped} to know.
  677. When you don't need a sample anymore, don't forget to free its memory with
  678. @code{Sample_Free}.
  679. @c ========================================================== Module player
  680. @node Modules and Player Control, Loading Data from Memory, Samples and Voice Control, Using the Library
  681. @section Modules and Player Control
  682. @iftex
  683. @findex MikMod_InfoLoader
  684. @findex MikMod_RegisterAllLoaders
  685. @findex MikMod_RegisterLoader
  686. @findex MikMod_RegisterPlayer
  687. @findex Player_Active
  688. @findex Player_Free
  689. @findex Player_GetChannelVoice
  690. @findex Player_GetModule
  691. @findex Player_Load
  692. @findex Player_LoadFP
  693. @findex Player_LoadTitle
  694. @findex Player_LoadTitleFP
  695. @findex Player_Mute
  696. @findex Player_Muted
  697. @findex Player_NextPosition
  698. @findex Player_Paused
  699. @findex Player_PrevPosition
  700. @findex Player_SetPosition
  701. @findex Player_SetSpeed
  702. @findex Player_SetTempo
  703. @findex Player_SetVolume
  704. @findex Player_Start
  705. @findex Player_Stop
  706. @findex Player_ToggleMute
  707. @findex Player_TogglePause
  708. @findex Player_UnMute
  709. @end iftex
  710. As for the sound drivers, you have to register the module loaders you want to
  711. use for MikMod to be able to load modules. You can either register all the
  712. module loaders with @code{MikMod_RegisterAllLoaders}, or only a few of them with
  713. @code{MikMod_RegisterLoader}. Be careful if you choose this solution, as the
  714. 15 instrument MOD loader has to be registered last, since loaders are called in
  715. the order they were register to identify modules, and the detection of this
  716. format is not fully reliable, so other modules might be mistaken as 15
  717. instrument MOD files. 
  718. You can get some printable information regarding the registered loaders with
  719. @code{MikMod_InfoLoader}; don't forget to call @code{free} on the returned
  720. string when you don't need it anymore.
  721. Note that, contrary to the sound drivers, you can register module loaders at
  722. any time, it doesn't matter.
  723. For playlists, you might be interested in knowing the module title first, and
  724. @code{Player_LoadTitle} will give you this information. Don't forget to
  725. @code{free} the returned text when you don't need it anymore.
  726. You can load a module either with @code{Player_Load} and the name of the
  727. module, or with @code{Player_LoadFP} and an open @code{FILE*} pointer. These
  728. functions also expect a maximal number of voices, and a curiosity flag. Unless
  729. you have excellent reasons not to do so, choose a big limit, such as 64 or even
  730. 128 for complex Impulse Tracker modules. Both functions return a pointer to an
  731. @code{MODULE} structure, or @code{NULL} if an error occurs.
  732. You'll find some useful information in this structure:
  733. @itemize @minus
  734. @item @code{numchn} contains the number of module ``real'' channels.
  735. @item @code{numvoices} contains the number of voices reserved by the player for
  736. the real channels and the virtual channels (NNA).
  737. @item @code{numpas} and @code{numpat} contain the number of song positions and
  738. song patterns.
  739. @item @code{numins} and @code{numsmp} contain the number of instruments and
  740. samples.
  741. @item @code{songname} contains the song title.
  742. @item @code{modtype} contains the name of the tracker used to create the song.
  743. @item @code{comment} contains the song comment, if it has one.
  744. @item @code{sngtime} contains the time elapsed in the module, in
  745. @math{2^@minus{}10} @dmn{seconds} (not exactly a millisecond).
  746. @item @code{sngspd} and @code{bpm} contain the song speed and tempo.
  747. @item @code{realchn} contains the actual number of active channels.
  748. @item @code{totalchn} contains the actual number of active virtual channels,
  749. i.e. the sum of @code{realchn} and the number of NNA virtual channels.
  750. @end itemize
  751. Now that the module is loaded, you need to tell the module player that you want
  752. to play this particular module with @code{Player_Start} (the player can only
  753. play one module, but you can have several modules in memory). The playback
  754. begins. Should you forget which module is playing, @code{Player_GetModule} will
  755. return it to you.
  756. You can change the current song position with the functions
  757. @code{Player_NextPosition}, @code{Player_PrevPosition} and
  758. @code{Player_SetPosition}, the speed with @code{Player_SetSpeed} and
  759. @code{Player_SetTempo}, and the volume (ranging from 0 to 128) with
  760. @code{Player_SetVolume}.
  761. Playback can be paused or resumed with @code{Player_TogglePause}. Be sure to
  762. check with @code{Player_Paused} that it isn't already in the state you want !
  763. Fine player control is achieved by the functions @code{Player_Mute},
  764. @code{Player_UnMute} and @code{Player_ToggleMute} which can silence or resume
  765. a set of module channels. The function @code{Player_Muted} will return the
  766. state of a given channel. And if you want even more control, you can get the
  767. voice corresponding to a module channel with @code{Player_GetChannelVoice} and
  768. act directly on the voice.
  769. Modules play only once, but can loop indefinitely if they are designed to do so.
  770. You can change this behavior with the @code{wrap} and @code{loop} of the
  771. @code{MODULE} structure; the first one, if set, will make the module restart
  772. when it's finished, and the second one, if set, will prevent the module from
  773. jumping backwards.
  774. You can test if the module is still playing with @code{Player_Active}, and you
  775. can stop it at any time with @code{Player_Stop}. When the module isn't needed
  776. anymore, get rid of it with @code{Player_Free}.
  777. @c ========================================================== Mreaders
  778. @node Loading Data from Memory, ,Modules and Player Control, Using the Library
  779. @section Loading Data from Memory
  780. @iftex
  781. @tindex MREADER
  782. @tindex MWRITER
  783. @findex Player_LoadGeneric
  784. @findex Sample_LoadGeneric
  785. @end iftex
  786. If you need to load modules or sound effects from other places than plain
  787. files, you can use the @code{MREADER} and @code{MWRITER} objects to achieve
  788. this.
  789. The @code{MREADER} and @code{MWRITER} structures contain a list of function
  790. pointers, which emulate the behaviour of a regular @code{FILE *} object. In
  791. fact, all functions which take filenames or @code{FILE *} as arguments are only
  792. wrappers to a real function which takes an @code{MREADER} or an @code{MWRITER}
  793. argument.
  794. So, if you need to load a module from memory, or for a multi-file archive, for
  795. example, all you need is to build an adequate @code{MREADER} object, and use
  796. @code{Player_LoadGeneric} instead of @code{Player_Load} or
  797. @code{Player_LoadFP}. For samples, use @code{Sample_LoadGeneric} instead of
  798. @code{Sample_Load} or @code{Sample_LoadFP}.
  799. @c ========================================================== Reference
  800. @node Library Reference, Index, Using the Library, Top
  801. @chapter Library Reference
  802. This chapter describes in more detail all the functions and variables provided
  803. by the library. @xref{Type Definitions}, for the basic type reference.
  804. @menu
  805. * Variable Reference::
  806. * Structure Reference::
  807. * Error Reference::
  808. * Function Reference::
  809. * Loader Reference::
  810. * Driver Reference::
  811. @end menu
  812. @c ========================================================== Variable reference
  813. @node Variable Reference, Structure Reference, Library Reference, Library Reference
  814. @section Variable Reference
  815. @subsection Error Variables
  816. The following variables are set by the library to return error information.
  817. @table @code
  818. @vindex MikMod_errno
  819. @item int MikMod_errno
  820. When an error occurs, this variable contains the error code.
  821. @xref{Error Reference}, for more information.
  822. @vindex MikMod_critical
  823. @item BOOL MikMod_critical
  824. When an error occurs, this variable informs of the severity of the error. Its
  825. value has sense only if the value of @code{MikMod_errno} is different from zero.
  826. If the value of @code{MikMod_critical} is zero, the error wasn't fatal and the
  827. library is in a stable state. However, if it is nonzero, then the library can't
  828. be used and has reseted itself to the uninitialized state. This often means
  829. that the mixing parameters you choose were not supported by the driver, or that
  830. it doesn't has enough voices for your needs if you called
  831. @code{MikMod_SetNumVoices}.
  832. @end table
  833. @subsection Sound Settings
  834. The following variables control the sound output parameters and their changes
  835. take effect immediately.
  836. @table @code
  837. @vindex md_musicvolume
  838. @item UBYTE md_musicvolume
  839. Volume of the module. Allowed values range from
  840. 0 to 128. The default value is 128.
  841. @vindex md_pansep
  842. @item UBYTE md_pansep
  843. Stereo channels separation. Allowed values range
  844. from 0 (no separation, thus mono sound) to 128 (full channel separation). The
  845. default value is 128.
  846. @vindex md_reverb
  847. @item UBYTE md_reverb
  848. Amount of sound reverberation. Allowed values range
  849. from 0 (no reverberation) to 15 (a rough estimate for chaos@dots{}). The
  850. default value is 0.
  851. @vindex md_sndfxvolume
  852. @item UBYTE md_sndfxvolume
  853. Volume of the sound effects. Allowed values range
  854. from 0 to 128. The default value is 128.
  855. @vindex md_volume
  856. @item UBYTE md_volume
  857. Overall sound volume. Allowed values range from 0
  858. to 128. The default value is 128.
  859. @end table
  860. @subsection Driver Settings
  861. The following variables control more in-depth sound output parameters. Except
  862. for some @code{md_mode} flags, their changes do not have any effect until you
  863. call @code{MikMod_Init} or @code{MikMod_Reset}.
  864. @table @code
  865. @vindex md_device
  866. @item UWORD md_device
  867. This variable contains the order, in the list of the registered drivers, of the
  868. sound driver which will be used for sound playback. This order is one-based; if
  869. this variable is set to zero, the driver is autodetected, which means the list
  870. is tested until a driver is present on the system. The default value is 0, thus
  871. driver is autodetected.
  872. @vindex md_driver
  873. @item MDRIVER* md_driver
  874. This variable points to the driver which is being used for sound playback, and
  875. is undefined when the library is uninitialized (before @code{MikMod_Init} and
  876. after @code{MikMod_Exit}). This variable is for information only, you should
  877. never attempt to change its value. Use @code{md_driver} and @code{MikMod_Init}
  878. (or @code{MikMod_Reset}) instead.
  879. @vindex md_mixfreq
  880. @item UWORD md_mixfreq
  881. Sound playback frequency, in hertz. High values
  882. yield high sound quality, but need more computing power than lower values. The
  883. default value is 44100 Hz, which is compact disc quality. Other common values
  884. are 22100 Hz (radio quality), 11025 Hz (phone quality), and 8000 Hz (mu-law
  885. quality).
  886. @vindex md_mode
  887. @item UWORD md_mode
  888. This variable is a combination of several flags, to select which output mode
  889. to select.
  890. The following flags have a direct action to the sound output (i.e. changes take
  891. effect immediately):
  892. @table @samp
  893. @item DMODE_INTERP
  894. This flag, if set, enables the interpolated mixers. Interpolated mixing gives
  895. better sound but takes a bit more time than standard mixing. If the library
  896. is built with the high quality mixer, interpolated mixing is always enabled,
  897. regardless of this flag.
  898. @item DMODE_REVERSE
  899. This flag, if set, exchanges the left and right stereo channels.
  900. @item DMODE_SURROUND
  901. This flag, if set, enables the surround mixers. Since surround mixing works
  902. only for stereo sound, this flag has no effect if the sound playback is in
  903. mono.
  904. @end table
  905. @*The following flags aren't taken in account until the sound driver is changed
  906. or reset:
  907. @table @samp
  908. @item DMODE_16BIT
  909. This flag, if set, selects 16 bit sound mode. This mode yields better sound
  910. quality, but needs twice more mixing time.
  911. @item DMODE_HQMIXER
  912. This flag, if set, selects the high-quality software mixer. This mode yields
  913. better sound quality, but needs more mixing time. Of course, this flag has no
  914. effect if no @code{DMODE_SOFT_xx} flag is set.
  915. @item DMODE_SOFT_MUSIC
  916. This flag, if set, selects software mixing of the module.
  917. @item DMODE_SOFT_SNDFX
  918. This flag, if set, selects software mixing of the sound effects.
  919. @item DMODE_STEREO
  920. This flag, if set, selects stereo sound.
  921. @end table
  922. @*The default value of this variable is @samp{DMODE_STEREO | DMODE_SURROUND |
  923. DMODE_16BITS | DMODE_SOFT_MUSIC | DMODE_SOFT_SNDFX}.
  924. @end table
  925. @c ========================================================== Structure reference
  926. @node Structure Reference, Error Reference, Variable Reference, Library Reference
  927. @section Structure Reference
  928. Only the useful fields are described here; if a structure field is not
  929. described, you must assume that it's an internal field which must not be
  930. modified.
  931. @subsection Drivers
  932. @tindex MDRIVER
  933. The @code{MDRIVER} structure is not meant to be used by anything else than the
  934. core of the library, but its first four fields contain useful information for
  935. your programs:
  936. @table @code
  937. @item CHAR* Name
  938. Name of the driver, usually never more than 20 characters.
  939. @item CHAR* Description
  940. Description of the driver, usually never more than 50 characters.
  941. @item UBYTE HardVoiceLimit
  942. Maximum number of hardware voices for this driver, 0 if the driver has no
  943. hardware mixing support.
  944. @item UBYTE SoftVoiceLimit
  945. Maximum number of software voices for this driver, 0 if the driver has no
  946. software mixing support.
  947. @item CHAR* Alias
  948. A short name for the driver, without spaces, usually never more than 10
  949. characters.
  950. @end table
  951. @subsection Modules
  952. @tindex MODULE
  953. The @code{MODULE} structure gathers all the necessary information needed to
  954. play a module file, regardless of its initial format.
  955. @subsubsection General Module Information
  956. The fields described in this section contain general information about the
  957. module and should not be modified.
  958. @table @code
  959. @item CHAR* songname
  960. Name of the module.
  961. @item CHAR* modtype
  962. Type of the module (which tracker format).
  963. @item CHAR* comment
  964. Either the module comments, or NULL if the module doesn't have comments.
  965. @end table
  966. @table @code
  967. @item UWORD flags
  968. Several module flags or'ed together.
  969. @table @samp
  970. @item UF_ARPMEM
  971. If set, arpeggio effects have memory.
  972. @item UF_BGSLIDES
  973. If set, volume slide effects continue until a new note or a new effect is played.
  974. @item UF_HIGHBPM
  975. If set, the module is allowed to have its tempo value (bpm) over 255.
  976. @item UF_INST
  977. If set, the module has instruments and samples; otherwise, the
  978. module has only samples.
  979. @item UF_LINEAR
  980. If set, slide periods are linear; otherwise, they are logarithmic.
  981. @item UF_NNA
  982. If set, module uses new note actions (NNA) and the @code{numvoices} field is
  983. valid.
  984. @item UF_NOWRAP
  985. If set, pattern break on the last pattern does not continue to the first
  986. pattern.
  987. @item UF_S3MSLIDES
  988. If set, module uses old-S3M style volume slides (slides processed every tick);
  989. otherwise, it uses the standard style (slides processed every tick except the
  990. first).
  991. @item UF_XMPERIODS
  992. If set, module uses XM-type periods; otherwise, it uses Amiga periods.
  993. @item UF_FT2QUIRKS
  994. If set, module player will reproduce some FastTracker 2 quirks during playback.
  995. @item UF_PANNING
  996. If set, module use panning commands.
  997. @end table
  998. @item UBYTE numchn
  999. The number of channels in the module.
  1000. @item UBYTE numvoices
  1001. If the module uses NNA, and this variable is not zero, it contains the limit
  1002. of module voices; otherwise, the limit is set to the @code{maxchan} parameter
  1003. of the @code{Player_Loadxx} functions.
  1004. @item UWORD numpos
  1005. The number of sound positions in the module.
  1006. @item UWORD numpat
  1007. The number of patterns.
  1008. @item UWORD numins
  1009. The number of instruments.
  1010. @item UWORD numsmp
  1011. The number of samples.
  1012. @end table
  1013. @table @code
  1014. @item INSTRUMENT* instruments
  1015. Points to an array of instrument structures.
  1016. @item SAMPLE* samples
  1017. Points to an array of sample structures.
  1018. @end table
  1019. @table @code
  1020. @item UBYTE realchn
  1021. During playback, this variable contains the number of active channels (not
  1022. counting NNA channels).
  1023. @item UBYTE totalchn
  1024. During playback, this variable contains the total number of channels (including
  1025. NNA channels).
  1026. @item ULONG sngtime
  1027. Elapsed song time, in @math{2^@minus{}10} @dmn{seconds} units (not exactly a
  1028. millisecond). To convert this value to seconds, divide by 1024, not 1000 !
  1029. @end table
  1030. @subsubsection Playback Settings
  1031. The fields described here control the module playback and can be modified at
  1032. any time, unless otherwise specified.
  1033. @table @code
  1034. @item UBYTE initspeed
  1035. The initial speed of the module (Protracker compatible). Valid range is 1-32.
  1036. @item UBYTE inittempo
  1037. The initial tempo of the module (Protracker compatible). Valid range is
  1038. 32-255.
  1039. @item UBYTE initvolume
  1040. The initial overall volume of the module. Valid range is 0-128.
  1041. @item UWORD panning[]
  1042. The current channel panning positions. Only the first @code{numchn} values are
  1043. defined.
  1044. @item UBYTE chanvol[]
  1045. The current channel volumes. Only the first @code{numchn} values are defined.
  1046. @item UWORD bpm
  1047. The current tempo of the module. Use @code{Player_SetTempo} to change its value.
  1048. @item UBYTE sngspd
  1049. The current speed of the module. Use @code{Player_SetSpeed} to change its value.
  1050. @item UBYTE volume
  1051. The current overall volume of the module, in range 0-128. Use
  1052. @code{Player_SetVolume} to change its value.
  1053. @end table
  1054. @table @code
  1055. @item BOOL extspd
  1056. If zero, Protracker extended speed effect (in-module tempo modification) is
  1057. not processed. The default value is 1, which causes this effect to be processed.
  1058. However, some old modules might not play correctly if this effect is not
  1059. neutralized.
  1060. @item BOOL panflag
  1061. If zero, panning effects are not processed. The default value is 1, which cause
  1062. all panning effects to be processed. However, some old modules might not play
  1063. correctly if panning is not neutralized.
  1064. @item BOOL wrap
  1065. If nonzero, module wraps to its restart position when it is finished, to
  1066. play continuously. Default value is zero (play only once).
  1067. @item UBYTE reppos
  1068. The restart position of the module, when it wraps.
  1069. @item BOOL loop
  1070. If nonzero, all in-module loops are processed; otherwise, backward loops which
  1071. decrease the current position are not processed (i.e. only forward loops, and
  1072. backward loops in the same pattern, are processed). This ensures that the module
  1073. never loops endlessly. The default value is 1 (all loops are processed).
  1074. @item BOOL fadeout
  1075. If nonzero, volume fades out during when last position of the module is being
  1076. played. Default value us zero (no fadeout).
  1077. @end table
  1078. @table @code
  1079. @item UWORD patpos
  1080. Current position (row) in the pattern being played. Must not be changed.
  1081. @item SWORD sngpos
  1082. Current song position. Do not change this variable directly, use
  1083. @code{Player_NextPosition}, @code{Player_PrevPosition} or
  1084. @code{Player_SetPosition} instead.
  1085. @end table
  1086. @table @code
  1087. @item SWORD relspd
  1088. Relative playback speed. The value of this variable is added to the module
  1089. tempo to define the actual playback speed. The default value is 0, which make
  1090. modules play at their intended speed.
  1091. @end table
  1092. @subsection Module Instruments
  1093. @tindex INSTRUMENT
  1094. Although the @code{INSTRUMENT} structure is intended for internal use, you
  1095. might need to know its name:
  1096. @table @code
  1097. @item CHAR* insname
  1098. The instrument text, theoretically its name, but often a message line.
  1099. @end table
  1100. @subsection Samples
  1101. @tindex SAMPLE
  1102. The @code{SAMPLE} structure is used for sound effects and module samples as
  1103. well. You can play with the following fields:
  1104. @table @code
  1105. @item SWORD panning
  1106. Panning value of the sample. Valid values range from PAN_LEFT (0) to
  1107. PAN_RIGHT (255), or PAN_SURROUND.
  1108. @item ULONG speed
  1109. Playing frequency of the sample, it hertz.
  1110. @item UBYTE volume
  1111. Sample volume. Valid range is 0-64.
  1112. @item UWORD flags
  1113. Several format flags or'ed together describing the format of the sample in
  1114. memory.
  1115. Format flags:
  1116. @table @samp
  1117. @item SF_16BITS
  1118. If set, sample data is 16 bit wide; otherwise, it is 8 bit wide.
  1119. @item SF_BIG_ENDIAN
  1120. If set, sample data is in big--endian (Motorola) format; otherwise, it is in
  1121. little--endian (Intel) format.
  1122. @item SF_DELTA
  1123. If set, sample is stored as delta values (differences between two consecutive
  1124. samples); otherwise, sample is stored as sample values.
  1125. @item SF_ITPACKED
  1126. If set, sample data is packed with Impulse Tracker's compression method;
  1127. otherwise, sample is not packed.
  1128. @item SF_SIGNED
  1129. If set, sample data is made of signed values; otherwise, it is made of
  1130. unsigned values.
  1131. @item SF_STEREO
  1132. If set, sample data is stereo (two channels); otherwise, it is mono.
  1133. @end table
  1134. @*Playback flags:
  1135. @table @samp
  1136. @item SF_BIDI
  1137. If set, sample loops ``ping pong'' (back and forth).
  1138. @item SF_LOOP
  1139. If set, sample loops forward.
  1140. @item SF_REVERSE
  1141. If set, sample plays backwards.
  1142. @end table
  1143. @item UWORD inflags
  1144. Same as ``flags'', but describing the format of the sample on disk.
  1145. @item ULONG length
  1146. Length of the sample, in @emph{samples}. The length of a sample is 8 bits
  1147. (1 byte) for a 8 bit sample, and 16 bits (2 bytes) for a 16 bit sample.
  1148. @item ULONG loopstart
  1149. Loop starting position, relative to the start of the sample, in samples.
  1150. @item ULONG loopend
  1151. Loop ending position, relative to the start of the sample, in samples.
  1152. @end table
  1153. @subsection MREADER
  1154. @tindex MREADER
  1155. The @code{MREADER} contains the following function pointers:
  1156. @table @code
  1157. @item BOOL (*Seek)(struct MREADER*, long offset, int whence)
  1158. This function should have the same behaviour as @code{fseek}, with offset 0
  1159. meaning the start of the object (module, sample) being loaded.
  1160. @item long (*Tell)(struct MREADER*)
  1161. This function should have the same behaviour as @code{ftell}, with offset 0
  1162. meaning the start of the object being loaded.
  1163. @item BOOL (*Read)(struct MREADER*, void *dest, size_t length)
  1164. This function should copy @code{length} bytes of data into @code{dest}, and
  1165. return zero if an error occured, and any nonzero value otherwise. Note that an
  1166. end-of-file condition will not be considered as an error in this case.
  1167. @item int (*Get)(struct MREADER*)
  1168. This function should have the same behaviour as @code{fgetc}.
  1169. @item BOOL (*Eof)(struct MREADER*)
  1170. This function should have the same behaviour as @code{feof}.
  1171. @end table
  1172. For an example of how to build an @code{MREADER} object, please refer to the
  1173. @code{MFILEREADER} object in file @code{mmio/mmio.c} in the library sources.
  1174. @subsection MWRITER
  1175. @tindex MWRITER
  1176. The @code{MREADER} contains the following function pointers:
  1177. @table @code
  1178. @item BOOL (*Seek)(struct MWRITER*, long offset, int whence);
  1179. This function should have the same behaviour as @code{fseek}, with offset 0
  1180. meaning the start of the object being written.
  1181. @item long (*Tell)(struct MWRITER*);
  1182. This function should have the same behaviour as @code{ftell}, with offset 0
  1183. meaning the start of the object being written.
  1184. @item BOOL (*Write)(struct MWRITER*, void *dest, size_t length);
  1185. This function should copy @code{length} bytes of data from @code{dest}, and
  1186. return zero if an error occured, and any nonzero value otherwise.
  1187. @item BOOL (*Put)(struct MWRITER*, int data);
  1188. This function should have the same behaviour as @code{fputc}.
  1189. @end table
  1190. For an example of how to build an @code{MWRITER} object, please refer to the
  1191. @code{MFILEWRITER} object in file @code{mmio/mmio.c} in the library sources.
  1192. @c ========================================================== Error reference
  1193. @node Error Reference, Function Reference, Structure Reference, Library Reference
  1194. @section Error Reference
  1195. The following errors are currently defined:
  1196. @subsection General Errors
  1197. @table @samp
  1198. @item MMERR_DYNAMIC_LINKING
  1199. This error occurs when a specific driver was requested, but the support shared
  1200. library couldn't be loaded. Currently, the only drivers which can yield this
  1201. error are the ALSA, EsounD and Ultra drivers.
  1202. @item MMERR_OPENING_FILE
  1203. This error occurs when a file can not be opened, either for read access from a
  1204. @code{xx_Loadxx} function, or for write access from the disk writer drivers.
  1205. @item MMERR_OUT_OF_MEMORY
  1206. This error occurs when there is not enough virtual memory available to complete
  1207. the operation, or there is enough memory but the calling process would exceed
  1208. its memory limit. MikMod does not do any resource tuning, your program has to
  1209. use the @code{setrlimit} function to do this if it needs to load very huge
  1210. samples.
  1211. @end table
  1212. @subsection Sample Errors
  1213. @table @samp
  1214. @item MMERR_SAMPLE_TOO_BIG
  1215. This error occurs when the memory allocation of the sample data yields the
  1216. error @code{MMERR_OUT_OF_MEMORY}.
  1217. @item MMERR_OUT_OF_HANDLES
  1218. This error occurs when your program reaches the limit of loaded samples,
  1219. currently defined as 384, which should be sufficient for most cases.
  1220. @item MMERR_UNKNOWN_WAVE_TYPE
  1221. This error occurs when you're trying to load a sample which format is not
  1222. recognized.
  1223. @end table
  1224. @subsection Module Errors
  1225. @table @samp
  1226. @item MMERR_ITPACK_INVALID_DATA
  1227. This error occurs when a compressed module sample is corrupt.
  1228. @item MMERR_LOADING_HEADER
  1229. This error occurs when you're trying to load a module which has a corrupted
  1230. header, or is truncated.
  1231. @item MMERR_LOADING_PATTERN
  1232. This error occurs when you're trying to load a module which has corrupted
  1233. pattern data, or is truncated.
  1234. @item MMERR_LOADING_SAMPLEINFO
  1235. This error occurs when you're trying to load a module which has corrupted
  1236. sample information, or is truncated.
  1237. @item MMERR_LOADING_TRACK
  1238. This error occurs when you're trying to load a module which has corrupted
  1239. track data, or is truncated.
  1240. @item MMERR_MED_SYNTHSAMPLES
  1241. This error occurs when you're trying to load a MED module which has synthsounds
  1242. samples, which are currently not supported.@footnote{You can force libmikmod to
  1243. load the module (without the synthsounds, of course) by setting the
  1244. @code{curious} parameter to @code{1} when invoking @code{Player_Loadxx}.}
  1245. @item MMERR_NOT_A_MODULE
  1246. This error occurs when you're trying to load a module which format is not
  1247. recognized.
  1248. @item MMERR_NOT_A_STREAM
  1249. This error occurs when you're trying to load a sample with a sample which format
  1250. is not recognized.
  1251. @end table
  1252. @subsection Driver Errors
  1253. @ifnottex
  1254. @subsubsection Generic Driver Errors
  1255. @end ifnottex
  1256. @iftex
  1257. Generic driver errors
  1258. @end iftex
  1259. @table @samp
  1260. @item MMERR_16BIT_ONLY
  1261. This error occurs when the sound device doesn't support non-16 bit linear
  1262. sound output, which are the requested settings.
  1263. @item MMERR_8BIT_ONLY
  1264. This error occurs when the sound device doesn't support non-8 bit linear
  1265. sound output, which are the requested settings.
  1266. @item MMERR_DETECTING_DEVICE
  1267. This error occurs when the driver's sound device has not been detected.
  1268. @item MMERR_INITIALIZING_MIXER
  1269. This error occurs when MikMod's internal software mixer could not be initialized
  1270. properly.
  1271. @item MMERR_INVALID_DEVICE
  1272. This error occurs when the driver number (in @code{md_device}) is out of range.
  1273. @item MMERR_NON_BLOCK
  1274. This error occurs when the driver is unable to set the audio device in non
  1275. blocking mode.
  1276. @item MMERR_OPENING_AUDIO
  1277. This error occurs when the driver can not open sound device.
  1278. @item MMERR_STEREO_ONLY
  1279. This error occurs when the sound device doesn't support mono sound output, which
  1280. is the requested setting.
  1281. @item MMERR_ULAW
  1282. This error occurs when the sound device only supports uLaw output (which
  1283. implies mono, 8 bit, and 8000 Hz sampling rate), which isn't the requested
  1284. setting.
  1285. @end table
  1286. @ifnottex
  1287. @subsubsection AudioFile Driver Specific Error
  1288. @end ifnottex
  1289. @iftex
  1290. AudioFile driver specific error
  1291. @end iftex
  1292. @table @samp
  1293. @item MMERR_AF_AUDIO_PORT
  1294. This error occurs when the AudioFile driver can not find a suitable AudioFile
  1295. port.
  1296. @end table
  1297. @ifnottex
  1298. @subsubsection AIX Driver Specific Errors
  1299. @end ifnottex
  1300. @iftex
  1301. AIX driver specific errors
  1302. @end iftex
  1303. @table @samp
  1304. @item MMERR_AIX_CONFIG_CONTROL
  1305. This error occurs when the ``Control'' step of the device configuration has
  1306. failed.
  1307. @item MMERR_AIX_CONFIG_INIT
  1308. This error occurs when the ``Init'' step of the device configuration has failed.
  1309. @item MMERR_AIX_CONFIG_START
  1310. This error occurs when the ``Start'' step of the device configuration has failed.
  1311. @end table
  1312. @ifnottex
  1313. @subsubsection Ultra Driver Specific Errors
  1314. @end ifnottex
  1315. @iftex
  1316. Ultra driver specific errors
  1317. @end iftex
  1318. @table @samp
  1319. @item MMERR_GUS_RESET
  1320. This error occurs when the sound device couldn't be reset.
  1321. @item MMERR_GUS_SETTINGS
  1322. This error occurs because the sound device only works in 16 bit linear stereo
  1323. sound at 44100 Hz, which is not the requested settings.
  1324. @item MMERR_GUS_TIMER
  1325. This error occurs when the ultra driver could not setup the playback timer.
  1326. @end table
  1327. @ifnottex
  1328. @subsubsection HP-UX Driver Specific Errors
  1329. @end ifnottex
  1330. @iftex
  1331. HP-UX driver specific errors
  1332. @end iftex
  1333. @table @samp
  1334. @item MMERR_HP_AUDIO_DESC
  1335. This error occurs when the HP driver can not get the audio hardware description.
  1336. @item MMERR_HP_AUDIO_OUTPUT
  1337. This error occurs when the HP driver can not select the audio output.
  1338. @item MMERR_HP_BUFFERSIZE
  1339. This error occurs when the HP driver can not set the transmission buffer size.
  1340. @item MMERR_HP_CHANNELS
  1341. This error occurs when the HP driver can not set the requested number of
  1342. channels.
  1343. @item MMERR_HP_SETSAMPLESIZE
  1344. This error occurs when the HP driver can not set the requested sample size.
  1345. @item MMERR_HP_SETSPEED
  1346. This error occurs when the HP driver can not set the requested sample rate.
  1347. @end table
  1348. @ifnottex
  1349. @subsubsection Open Sound System Driver Specific Errors
  1350. @end ifnottex
  1351. @iftex
  1352. Open Sound System driver specific errors
  1353. @end iftex
  1354. @table @samp
  1355. @item MMERR_OSS_SETFRAGMENT
  1356. This error occurs when the OSS driver can not set audio fragment size.
  1357. @item MMERR_OSS_SETSAMPLESIZE
  1358. This error occurs when the OSS driver can not set the requested sample size.
  1359. @item MMERR_OSS_SETSPEED
  1360. This error occurs when the OSS driver can not set the requested sample rate.
  1361. @item MMERR_OSS_SETSTEREO
  1362. This error occurs when the OSS driver can not set the requested number of
  1363. channels.
  1364. @end table
  1365. @ifnottex
  1366. @subsubsection SGI Driver Specific Errors
  1367. @end ifnottex
  1368. @iftex
  1369. SGI driver specific errors
  1370. @end iftex
  1371. @table @samp
  1372. @item MMERR_SGI_MONO
  1373. This error occurs when the hardware only supports stereo sound.
  1374. @item MMERR_SGI_SPEED
  1375. This error occurs when the hardware does not support the requested sample rate.
  1376. @item MMERR_SGI_STEREO
  1377. This error occurs when the hardware only supports mono sound.
  1378. @item MMERR_SGI_16BIT
  1379. This error occurs when the hardware only supports 16 bit sound.
  1380. @item MMERR_SGI_8BIT
  1381. This error occurs when the hardware only supports 8 bit sound.
  1382. @end table
  1383. @ifnottex
  1384. @subsubsection Sun Driver Specific Error
  1385. @end ifnottex
  1386. @iftex
  1387. Sun driver specific error
  1388. @end iftex
  1389. @table @samp
  1390. @item MMERR_SUN_INIT
  1391. This error occurs when the sound device initialization failed.
  1392. @end table
  1393. @ifnottex
  1394. @subsubsection OS/2 Driver Specific Errors
  1395. @end ifnottex
  1396. @iftex
  1397. OS/2 driver specific errors
  1398. @end iftex
  1399. @table @samp
  1400. @item MMERR_OS2_MIXSETUP
  1401. This error occurs when the DART driver can not set the mixing parameters.
  1402. @item MMERR_OS2_SEMAPHORE
  1403. This error occurs when the MMPM/2 driver can not create the semaphores needed
  1404. for playback.
  1405. @item MMERR_OS2_THREAD
  1406. This error occurs when the MMPM/2 driver can not create the thread needed for
  1407. playback.
  1408. @item MMERR_OS2_TIMER
  1409. This error occurs when the MMPM/2 driver can not create the timer needed for
  1410. playback.
  1411. @end table
  1412. @ifnottex
  1413. @subsubsection DirectX Driver Specific Errors
  1414. @end ifnottex
  1415. @iftex
  1416. DirectX Driver Specific Errors
  1417. @end iftex
  1418. @table @samp
  1419. @item MMERR_DS_BUFFER
  1420. This error occurs when the DirectX driver can not allocate the playback buffers.
  1421. @item MMERR_DS_EVENT
  1422. This error occurs when the DirectX driver can not register the playback event.
  1423. @item MMERR_DS_FORMAT
  1424. This error occurs when the DirectX driver can not set the playback format.
  1425. @item MMERR_DS_NOTIFY
  1426. This error occurs when the DirectX driver can not register the playback
  1427. callback.
  1428. @item MMERR_DS_PRIORITY
  1429. This error occurs when the DirectX driver can not set the playback priority.
  1430. @item MMERR_DS_THREAD
  1431. This error occurs when the DirectX driver can not create the playback thread.
  1432. @item MMERR_DS_UPDATE
  1433. This error occurs when the DirectX driver can not initialize the playback
  1434. thread.
  1435. @end table
  1436. @ifnottex
  1437. @subsubsection Windows Multimedia API Driver Specific Errors
  1438. @end ifnottex
  1439. @iftex
  1440. Windows Multimedia API Driver Specific Errors
  1441. @end iftex
  1442. @table @samp
  1443. @item MMERR_WINMM_ALLOCATED
  1444. This error occurs when the playback resource is already allocated by another
  1445. application.
  1446. @item MMERR_WINMM_DEVICEID
  1447. This error occurs when the Multimedia API Driver is given an invalid audio
  1448. device identificator.
  1449. @item MMERR_WINMM_FORMAT
  1450. This error occurs when the playback output format is not supported by the audio
  1451. device.
  1452. @item MMERR_WINMM_HANDLE
  1453. This error occurs when the Multimedia API Driver is given an invalid handle.
  1454. @item MMERR_WINMM_UNKNOWN
  1455. This error should not occur ! If you get this error, please contact the
  1456. libmikmod development mailing list.
  1457. @end table
  1458. @ifnottex
  1459. @subsubsection MacOS Driver Specific Errors
  1460. @end ifnottex
  1461. @iftex
  1462. MacOS Driver Specific Errors
  1463. @end iftex
  1464. @table @samp
  1465. @item MMERR_MAC_SPEED
  1466. This error occurs when the playback speed is not supported by the audio device.
  1467. @item MMERR_MAC_START
  1468. This error occurs when the MacOS driver can not start playback.
  1469. @end table
  1470. @c ========================================================== Function reference
  1471. @node Function Reference, Library Core Functions, Error Reference, Library Reference
  1472. @section Function Reference
  1473. @menu
  1474. * Library Core Functions::      MikMod_xx functions.
  1475. * Module Player Functions::     Player_xx functions.
  1476. * Sample Functions::            Sample_xx functions.
  1477. * Voice Functions::             Voice_xx functions.
  1478. @end menu
  1479. @c ========================================================== MikMod_xx
  1480. @node Library Core Functions, Module Player Functions, Function Reference, Function Reference
  1481. @subsection Library Core Functions
  1482. @ifnottex
  1483. @subsubsection MikMod_Active
  1484. @end ifnottex
  1485. @findex MikMod_Active
  1486. @code{BOOL MikMod_Active(void)}
  1487. @table @i
  1488. @item Description
  1489. This function returns whether sound output is enabled or not.
  1490. @item Result
  1491. @itemx 0
  1492. Sound output is disabled.
  1493. @item 1
  1494. Sound output is enabled.
  1495. @item Notes
  1496. Calls to @code{MikMod_Update} will be ignored when sound output is disabled.
  1497. @item See also
  1498. @code{MikMod_DisableOutput}, @code{MikMod_EnableOutput}.
  1499. @end table
  1500. @ifnottex
  1501. @subsubsection MikMod_DisableOutput
  1502. @end ifnottex
  1503. @findex MikMod_DisableOutput
  1504. @code{void MikMod_DisableOutput(void)}
  1505. @table @i
  1506. @item Description
  1507. This function stops the sound mixing.
  1508. @item Notes
  1509. Calls to @code{MikMod_Update} will be ignored when sound output is disabled.
  1510. @item See also
  1511. @code{MikMod_Active}, @code{MikMod_EnableOutput}.
  1512. @end table
  1513. @ifnottex
  1514. @subsubsection MikMod_EnableOutput
  1515. @end ifnottex
  1516. @findex MikMod_EnableOutput
  1517. @code{BOOL MikMod_EnableOutput(void)}
  1518. @table @i
  1519. @item Description
  1520. This function starts the sound mixing.
  1521. @item Result
  1522. @itemx 0
  1523. Sound mixing is ready.
  1524. @itemx nonzero
  1525. An error occurred during the operation.
  1526. @item Notes
  1527. Calls to @code{MikMod_Update} will be ignored when sound output is disabled.
  1528. @item See also
  1529. @code{MikMod_Active}, @code{MikMod_DisableOutput}.
  1530. @end table
  1531. @ifnottex
  1532. @subsubsection MikMod_Exit
  1533. @end ifnottex
  1534. @findex MikMod_Exit
  1535. @code{void MikMod_Exit(void)}
  1536. @table @i
  1537. @item Description
  1538. This function deinitializes the sound hardware and frees all the memory and
  1539. resources used by MikMod.
  1540. @item See also
  1541. @code{MikMod_Init}, @code{MikMod_Reset}.
  1542. @end table
  1543. @ifnottex
  1544. @subsubsection MikMod_GetVersion
  1545. @end ifnottex
  1546. @findex MikMod_GetVersion
  1547. @code{long MikMod_GetVersion(void)}
  1548. @table @i
  1549. @item Description
  1550. This function returns the version number of the library.
  1551. @item Result
  1552. The version number, encoded as follows:
  1553. @code{(maj<<16)|(min<<8)|(rev)},
  1554. where @samp{maj} is the major version number, @samp{min} is the minor version
  1555. number, and @samp{rev} is the revision number.
  1556. @end table
  1557. @ifnottex
  1558. @subsubsection MikMod_InfoDriver
  1559. @end ifnottex
  1560. @findex MikMod_InfoDriver
  1561. @code{CHAR* MikMod_InfoDriver(void)}
  1562. @table @i
  1563. @item Description
  1564. This function returns a formatted list of the registered drivers in a buffer.
  1565. @item Result
  1566. A pointer to a text buffer, or @code{NULL} if no drivers are registered.
  1567. @item Notes
  1568. The buffer is created with @code{malloc}; the caller must free it when it is
  1569. no longer necessary.
  1570. @item See also
  1571. @code{MikMod_RegisterDriver}, @code{MikMod_RegisterAllDrivers}.
  1572. @end table
  1573. @ifnottex
  1574. @subsubsection MikMod_InfoLoader
  1575. @end ifnottex
  1576. @findex MikMod_InfoLoader
  1577. @code{CHAR* MikMod_InfoLoader(void)}
  1578. @table @i
  1579. @item Description
  1580. This function returns a formatted list of the registered module loaders in a
  1581. buffer.
  1582. @item Result
  1583. A pointer to a text buffer, or @code{NULL} if no loaders are registered.
  1584. @item Notes
  1585. The buffer is created with @code{malloc}; the caller must free it when it is
  1586. no longer necessary.
  1587. @item See also
  1588. @code{MikMod_RegisterLoader}, @code{MikMod_RegisterAllLoaders}.
  1589. @end table
  1590. @ifnottex
  1591. @subsubsection MikMod_Init
  1592. @end ifnottex
  1593. @findex MikMod_Init
  1594. @code{BOOL MikMod_Init(CHAR *parameters)}
  1595. @table @i
  1596. @item Description
  1597. This function performs the library initialization, including the sound driver
  1598. choice and configuration, and all the necessary memory allocations.
  1599. @item Parameters
  1600. @itemx parameters
  1601. Optional parameters given to the sound driver. These parameters are ignored if
  1602. the value of @code{md_device} is zero (autodetection).
  1603. @item Result
  1604. @itemx 0
  1605. Initialization was successful.
  1606. @itemx nonzero
  1607. An error occurred during initialization.
  1608. @item Notes
  1609. When the initialization fails, the library uses the nosound sound driver to
  1610. let other the other MikMod functions work without crashing the application.
  1611. @item See also
  1612. @code{MikMod_Exit}, @code{MikMod_InitThreads}, @code{MikMod_Reset}.
  1613. @end table
  1614. @ifnottex
  1615. @subsubsection MikMod_InitThreads
  1616. @end ifnottex
  1617. @findex MikMod_InitThreads
  1618. @code{BOOL MikMod_InitThreads(void)}
  1619. @table @i
  1620. @item Description
  1621. This function returns whether libmikmod is thread-safe.
  1622. @item Result
  1623. @itemx 0
  1624. The library is not thread-safe.
  1625. @itemx 1
  1626. The library is thread-safe.
  1627. @item Notes
  1628. This function should be called before any call to @code{MikMod_Lock} or
  1629. @code{MikMod_Unlock} is made.
  1630. @item See also
  1631. @code{MikMod_Lock}, @code{MikMod_Unlock}.
  1632. @end table
  1633. @ifnottex
  1634. @subsubsection MikMod_Lock
  1635. @end ifnottex
  1636. @findex MikMod_Lock
  1637. @code{void MikMod_Lock(void)}
  1638. @table @i
  1639. @item Description
  1640. This function obtains exclusive access to libmikmod's variables.
  1641. @item Notes
  1642. This function locks an internal mutex. If the mutex is already locked, it will
  1643. block the calling thread until the mutex is unlocked.@*
  1644. Every @code{MikMod_Unlock} call should be associated to a @code{MikMod_Lock}
  1645. call. To be sure this is the case, we advise you to define and use the
  1646. following macros:@*
  1647. @code{#define MIKMOD_LOCK MikMod_Lock();@{}@*
  1648. @code{#define MIKMOD_UNLOCK @}MikMod_Unlock();}@*
  1649. The function @code{MikMod_InitThreads} must have been invoked before any call
  1650. to @code{MikMod_Lock} in made.@*
  1651. @item See also
  1652. @code{MikMod_InitThreads}, @code{MikMod_Unlock}.
  1653. @end table
  1654. @ifnottex
  1655. @subsubsection MikMod_RegisterAllDrivers
  1656. @end ifnottex
  1657. @findex MikMod_RegisterAllDrivers
  1658. @code{void MikMod_RegisterAllDrivers(void)}
  1659. @table @i
  1660. @item Description
  1661. This function registers all the available drivers.
  1662. @item See also
  1663. @code{MikMod_InfoDriver}, @code{MikMod_RegisterDriver}.
  1664. @end table
  1665. @ifnottex
  1666. @subsubsection MikMod_RegisterAllLoaders
  1667. @end ifnottex
  1668. @findex MikMod_RegisterAllLoaders
  1669. @code{void MikMod_RegisterAllLoaders(void)}
  1670. @table @i
  1671. @item Description
  1672. This function registers all the available module loaders.
  1673. @item See also
  1674. @code{MikMod_InfoLoader}, @code{MikMod_RegisterLoader}.
  1675. @end table
  1676. @ifnottex
  1677. @subsubsection MikMod_RegisterDriver
  1678. @end ifnottex
  1679. @findex MikMod_RegisterDriver
  1680. @code{void MikMod_RegisterDriver(struct MDRIVER* newdriver)}
  1681. @table @i
  1682. @item Description
  1683. This function adds the specified driver to the internal list of usable
  1684. drivers.
  1685. @item Parameters
  1686. @itemx newdriver
  1687. A pointer to the @code{MDRIVER} structure identifying the driver.
  1688. @item Notes
  1689. It is safe to register the same driver several times, although it will not
  1690. be duplicated in the list.@*
  1691. You should register all the drivers you need before calling @code{MikMod_Init}.
  1692. If you want to register all the available drivers, use
  1693. @code{MikMod_RegisterAllDrivers} instead.
  1694. @item See also
  1695. @code{MikMod_InfoDriver}, @code{MikMod_RegisterAllDrivers}.
  1696. @end table
  1697. @ifnottex
  1698. @subsubsection MikMod_RegisterErrorHandler
  1699. @end ifnottex
  1700. @findex MikMod_RegisterErrorHandler
  1701. @code{MikMod_handler_t MikMod_RegisterErrorHandler(MikMod_handler_t newhandler)}
  1702. @table @i
  1703. @item Description
  1704. This function selects the function which should be called in case of error.
  1705. @item Parameters
  1706. @itemx newhandler
  1707. The new error callback function.
  1708. @item Result
  1709. The previous error callback function, or @code{NULL} if there was none.
  1710. @item Notes
  1711. @code{MikMod_handler_t} is defined as @code{void(*function)(void)}, this means
  1712. your error function has the following prototype:
  1713. @code{void MyErrorHandler(void)}@*
  1714. The error callback function is called when errors are detected, but not
  1715. always immediately (the library has to resume to a stable state before calling
  1716. your callback).
  1717. @end table
  1718. @ifnottex
  1719. @subsubsection MikMod_RegisterLoader
  1720. @end ifnottex
  1721. @findex MikMod_RegisterLoader
  1722. @code{void MikMod_RegisterLoader(struct MLOADER* newloader)}
  1723. @table @i
  1724. @item Description
  1725. This function adds the specified module loader to the internal list of usable
  1726. module loaders.
  1727. @item Parameters
  1728. @itemx newloader
  1729. A pointer to the @code{MLOADER} structure identifying the loader.
  1730. @item Notes
  1731. It is safe to register the same loader several times, although it will not be
  1732. duplicated in the list.@*
  1733. You should register all the loaders you need before calling @code{Player_Load}
  1734. or @code{Player_LoadFP}. If you want to register all the available module
  1735. loaders, use @code{MikMod_RegisterAllLoaders} instead.@*
  1736. The 15 instrument module loader (@code{load_m15}) should always be registered
  1737. last.
  1738. @item See also
  1739. @code{MikMod_InfoLoader}, @code{MikMod_RegisterAllLoaders}.
  1740. @end table
  1741. @ifnottex
  1742. @subsubsection MikMod_RegisterPlayer
  1743. @end ifnottex
  1744. @findex MikMod_RegisterPlayer
  1745. @code{MikMod_player_t MikMod_RegisterPlayer(MikMod_player_t newplayer)}
  1746. @table @i
  1747. @item Description
  1748. This function selects the function which should be used to process module
  1749. playback.
  1750. @item Parameters
  1751. @itemx newplayer
  1752. The new playback function
  1753. @item Result
  1754. The previous playback function.
  1755. @item Notes
  1756. @code{MikMod_player_t} is defined as @code{void(*function)(void)}, this means
  1757. your player function has the following prototype:
  1758. @code{void MyPlayer(void)}@*
  1759. The player function is called every module tick to process module playback.
  1760. The rate at which the player function is called is controlled by the sound
  1761. driver, and is computed by the following equation:@*
  1762. @math{(bpm*50)/125} calls per second, which means every @math{125000/(bpm*50)}
  1763. @dmn{milliseconds}. The @code{bpm} value is the tempo of the module and can
  1764. change from its initial value when requested by the module.@*
  1765. When changing the playback function, you should make sure that you chain to the
  1766. default MikMod playback function, otherwise you won't get module sound
  1767. anymore@enddots{}
  1768. @item Example
  1769. @smallexample
  1770.     MikMod_player_t oldroutine;
  1771.     void MyPlayer(void)
  1772.     @{
  1773.         oldroutine();
  1774.         /* your stuff here */
  1775.         @dots{}
  1776.     @}
  1777.     main()
  1778.     @{
  1779.         @dots{}
  1780.         /* Register our player */
  1781.         oldroutine = MikMod_RegisterPlayer(MyPlayer);
  1782.         @dots{}
  1783.     @}
  1784. @end smallexample
  1785. @end table
  1786. @ifnottex
  1787. @subsubsection MikMod_Reset
  1788. @end ifnottex
  1789. @findex MikMod_Reset
  1790. @code{BOOL MikMod_Reset(CHAR *parameters)}
  1791. @table @i
  1792. @item Description
  1793. This function resets MikMod and reinitialize the sound hardware.
  1794. @item Parameters
  1795. @itemx parameters
  1796. Optional parameters given to the sound driver. If you set the value of
  1797. @code{md_device} to zero (autodetect), these parameters are ignored.
  1798. @item Result
  1799. @itemx 0
  1800. Reinitialization was successful.
  1801. @itemx nonzero
  1802. An error occurred during reinitialization.
  1803. @item Notes
  1804. Use this function when you have changed the global configuration variables:
  1805. @code{md_device} and @code{md_mixfreq}, or one of the @code{md_mode} flags
  1806. which require sound reinitialization. Sound playback will continue as soon as
  1807. the driver is ready.
  1808. @item See also
  1809. @code{MikMod_Exit}, @code{MikMod_Init}.
  1810. @end table
  1811. @ifnottex
  1812. @subsubsection MikMod_SetNumVoices
  1813. @end ifnottex
  1814. @findex MikMod_SetNumVoices
  1815. @code{BOOL MikMod_SetNumVoices(int musicvoices, int samplevoices)}
  1816. @table @i
  1817. @item Description
  1818. This function sets the number of mixed voices which can be used for music
  1819. and sound effects playback.
  1820. @item Parameters
  1821. @itemx musicvoices
  1822. The number of voices to reserve for music playback.
  1823. @item samplevoices
  1824. The number of voices to reserve for sound effects.
  1825. @item Result
  1826. @itemx 0
  1827. Initialization was successful.
  1828. @itemx nonzero
  1829. An error occurred during initialization.
  1830. @item Notes
  1831. A value of @code{-1} for any of the parameters will retain the current number
  1832. of reserved voices.@*
  1833. The maximum number of voices vary from driver to driver (hardware drivers
  1834. often have a limit of 32 to 64 voices, whereas the software drivers handle
  1835. 255 voices). If your settings exceed the driver's limit, they will be truncated.
  1836. @item See also
  1837. @code{MikMod_Init}, @code{MikMod_Reset}.
  1838. @end table
  1839. @ifnottex
  1840. @subsubsection MikMod_Unlock
  1841. @end ifnottex
  1842. @findex MikMod_Unlock
  1843. @code{void MikMod_Unlock(void)}
  1844. @table @i
  1845. @item Description
  1846. This function relinquishes exclusive access to libmikmod's variables.
  1847. @item Notes
  1848. This function unlocks an internal mutex, so that other threads waiting for the
  1849. lock can be resumed.@*
  1850. Every @code{MikMod_Unlock} call should be associated to a @code{MikMod_Lock}
  1851. call. To be sure this is the case, we advise you to define and use the
  1852. following macros:@*
  1853. @code{#define MIKMOD_LOCK MikMod_Lock();@{}@*
  1854. @code{#define MIKMOD_UNLOCK @}MikMod_Unlock();}@*
  1855. The function @code{MikMod_InitThreads} must have been invoked before any call
  1856. to @code{MikMod_Unlock} in made.@*
  1857. @item See also
  1858. @code{MikMod_InitThreads}, @code{MikMod_Lock}.
  1859. @end table
  1860. @ifnottex
  1861. @subsubsection MikMod_Update
  1862. @end ifnottex
  1863. @findex MikMod_Update
  1864. @code{void MikMod_Update(void)}
  1865. @table @i
  1866. @item Description
  1867. This routine should be called on a regular basis to update the sound.
  1868. @item Notes
  1869. The sound output buffer is filled each time this function is called; if you
  1870. use a large buffer, you don't need to call this routine as frequently as with
  1871. a smaller buffer, but you get a bigger shift between the sound being played
  1872. and the reported state of the player, since the player is always a buffer
  1873. ahead of the playback.@*
  1874. If you play low quality sound (for example, mono 8 bit 11@dmn{kHz} sound), you
  1875. only need to call this routine a few times per second. However, for high quality
  1876. sound (stereo 16 bit 44@dmn{kHz}), this rate increases to a few hundred times
  1877. per second, but never more, due to the minimal buffer size constraint imposed
  1878. to the sound drivers.@*
  1879. If you plan on modifying voice information with the @code{Voice_xx} functions,
  1880. you should do this before calling @code{MikMod_Update}.
  1881. @end table
  1882. @ifnottex
  1883. @subsubsection MikMod_strerror
  1884. @end ifnottex
  1885. @findex MikMod_strerror
  1886. @code{char* MikMod_strerror(int errno)}
  1887. @table @i
  1888. @item Description
  1889. This function associates a descriptive message to an error code.
  1890. @item Parameters
  1891. @itemx errno
  1892. The MikMod error code.
  1893. @item Result
  1894. A pointer to a string describing the error.
  1895. @end table
  1896. @c ========================================================== Player_xx
  1897. @node Module Player Functions, Sample Functions, Library Core Functions, Function Reference
  1898. @subsection Module Player Functions
  1899. @ifnottex
  1900. @subsubsection Player_Active
  1901. @end ifnottex
  1902. @findex Player_Active
  1903. @code{BOOL Player_Active(void)}
  1904. @table @i
  1905. @item Description
  1906. This function returns whether the module player is active or not.
  1907. @item Result
  1908. @itemx 0
  1909. No module is playing.
  1910. @itemx nonzero
  1911. A module is currently playing.
  1912. @item Notes
  1913. This function will still report that the player is active if the playing module
  1914. is paused.
  1915. @item See also
  1916. @code{Player_Paused}, @code{Player_TogglePause}, @code{Player_Start}, @code{Player_Stop}
  1917. @end table
  1918. @ifnottex
  1919. @subsubsection Player_Free
  1920. @end ifnottex
  1921. @findex Player_Free
  1922. @code{void Player_Free(MODULE* module)}
  1923. @table @i
  1924. @item Description
  1925. This function stops the module if it is playing and unloads it from memory.
  1926. @item Parameters
  1927. @itemx module
  1928. The module to free.
  1929. @item See also
  1930. @code{Player_Load}, @code{Player_LoadFP}.
  1931. @end table
  1932. @ifnottex
  1933. @subsubsection Player_GetChannelVoice
  1934. @end ifnottex
  1935. @findex Player_GetChannelVoice
  1936. @code{int Player_GetChannelVoice(UBYTE channel)}
  1937. @table @i
  1938. @item Description
  1939. This function determines the voice corresponding to the specified module
  1940. channel.
  1941. @item Parameters
  1942. @itemx channel
  1943. The module channel to use.
  1944. @item Result
  1945. The number of the voice corresponding to the module channel.
  1946. @item Notes
  1947. If the module channel has NNAs, the number will correspond to the main channel
  1948. voice.
  1949. @item See also
  1950. @code{Voice_SetPanning}, @code{Voice_SetVolume}, @code{Player_Mute}, @code{Player_ToggleMute}, @code{Player_Unmute}.
  1951. @end table
  1952. @ifnottex
  1953. @subsubsection Player_GetModule
  1954. @end ifnottex
  1955. @findex Player_GetModule
  1956. @code{MODULE* Player_GetModule(void)}
  1957. @table @i
  1958. @item Description
  1959. This function returns the module currently being played.
  1960. @item Result
  1961. A pointer to the @code{MODULE} being played, or @code{NULL} if no module is
  1962. playing.
  1963. @item See also
  1964. @code{Player_Stop}, @code{Player_Start}.
  1965. @end table
  1966. @ifnottex
  1967. @subsubsection Player_Load
  1968. @end ifnottex
  1969. @findex Player_Load
  1970. @code{MODULE* Player_Load(CHAR* filename, int maxchan, BOOL curious)}
  1971. @table @i
  1972. @item Description
  1973. This function loads a music module.
  1974. @item Parameters
  1975. @itemx filename
  1976. The name of the module file.
  1977. @item maxchan
  1978. The maximum number of channels the song is allowed to request from the mixer.
  1979. @item curious
  1980. The curiosity level to use.
  1981. @item Result
  1982. A pointer to a @code{MODULE} structure, or @code{NULL} if an error occurs.
  1983. @item Notes
  1984. If the curiosity level is set to zero, the module will be loaded normally.
  1985. However, if it is nonzero, the following things occur:
  1986. @itemize @bullet
  1987. @item pattern positions occurring after the ``end of song'' marker in S3M and
  1988. IT modules are loaded, and the end of song is set to the last position.
  1989. @item hidden extra patterns are searched in MOD modules, and if found, played
  1990. after the last ``official'' pattern.
  1991. @item MED modules with synthsounds are loaded without causing the
  1992. @code{MMERR_MED_SYNTHSAMPLES}, and synthsounds are mapped to an empty sample.
  1993. @end itemize
  1994. @item See also
  1995. @code{Player_Free}, @code{Player_LoadFP}, @code{Player_LoadTitle},
  1996. @code{Player_LoadTitleFP}, @code{Player_Start}.
  1997. @end table
  1998. @ifnottex
  1999. @subsubsection Player_LoadFP
  2000. @end ifnottex
  2001. @findex Player_LoadFP
  2002. @code{MODULE* Player_LoadFP(FILE* file, int maxchan, BOOL curious)}
  2003. @table @i
  2004. @item Description
  2005. This function loads a music module.
  2006. @item Parameters
  2007. @itemx file
  2008. An open file, at the position where the module starts.
  2009. @item maxchan
  2010. The maximum number of channels the song is allowed to request from the mixer.
  2011. @item curious
  2012. The curiosity level to use.
  2013. @item Result
  2014. A pointer to a @code{MODULE} structure, or @code{NULL} if an error occurs.
  2015. @item Notes
  2016. The file is left open, at the same position as before the function call.@*
  2017. If the curiosity level is set to zero, the module will be loaded normally.
  2018. However, if it is nonzero, the following things occur:
  2019. @itemize @bullet
  2020. @item pattern positions occurring after the ``end of song'' marker in S3M and
  2021. IT modules are loaded, and the end of song is set to the last position.
  2022. @item hidden extra patterns are searched in MOD modules, and if found, played
  2023. after the last ``official'' pattern.
  2024. @item MED modules with synthsounds are loaded without causing the
  2025. @code{MMERR_MED_SYNTHSAMPLES}, and synthsounds are mapped to an empty sample.
  2026. @end itemize
  2027. @item See also
  2028. @code{Player_Free}, @code{Player_Load}, @code{Player_LoadTitle},
  2029. @code{Player_LoadTitleFP}, @code{Player_Start}.
  2030. @end table
  2031. @ifnottex
  2032. @subsubsection Player_LoadTitle
  2033. @end ifnottex
  2034. @findex Player_LoadTitle
  2035. @code{MODULE* Player_LoadTitle(CHAR* filename)}
  2036. @table @i
  2037. @item Description
  2038. This function retrieves the title of a module file.
  2039. @item Parameters
  2040. @itemx filename
  2041. The name of the module file.
  2042. @item Result
  2043. A pointer to the song title, or @code{NULL} if either the module has no title
  2044. or an error has occurred.
  2045. @item Notes
  2046. The title buffer is created with @code{malloc}; the caller must free it when it
  2047. is no longer necessary.
  2048. @item See also
  2049. @code{Player_Load}, @code{Player_LoadFP}, @code{Player_LoadTitleFP}.
  2050. @end table
  2051. @ifnottex
  2052. @subsubsection Player_LoadTitleFP
  2053. @end ifnottex
  2054. @findex Player_LoadTitleFP
  2055. @code{MODULE* Player_LoadTitleFP(FILE* file)}
  2056. @table @i
  2057. @item Description
  2058. This function retrieves the title of a module file.
  2059. @item Parameters
  2060. @itemx file
  2061. An open file, at the position where the module starts.
  2062. @item Result
  2063. A pointer to the song title, or @code{NULL} if either the module has no title
  2064. or an error has occurred.
  2065. @item Notes
  2066. The title buffer is created with @code{malloc}; the caller must free it when it
  2067. is no longer necessary.
  2068. @item See also
  2069. @code{Player_Load}, @code{Player_LoadFP}, @code{Player_LoadTitle}.
  2070. @end table
  2071. @ifnottex
  2072. @subsubsection Player_Mute
  2073. @end ifnottex
  2074. @findex Player_Mute
  2075. @code{void Player_Mute(SLONG operation, ...)}
  2076. @table @i
  2077. @item Description
  2078. This function mutes a single module channel, or a range of module channels.
  2079. @item Parameters
  2080. @itemx operation
  2081. Either the number of a module channel to mute (starting from zero), or an
  2082. operation code. In the latter case, two extra parameters are needed to
  2083. determine the range of channels.
  2084. @item Notes
  2085. If the operation is @code{MUTE_INCLUSIVE}, the two channel numbers delimit the
  2086. range and are part of the range ; otherwise, if the operation is
  2087. @code{MUTE_EXCLUSIVE}, they are outside of the range.
  2088. @item Example
  2089. @smallexample
  2090.     /* mute channel 10 */
  2091.     Player_Mute(10);
  2092.     /* mute channels 2 to 5 */
  2093.     Player_Mute(MUTE_INCLUSIVE, 2, 5);
  2094.     /* mute channels 7 to 9 */
  2095.     Player_Mute(MUTE_EXCLUSIVE, 6, 10);
  2096. @end smallexample
  2097. @item See also
  2098. @code{Player_Muted}, @code{Player_ToggleMute}, @code{Player_Unmute}.
  2099. @end table
  2100. @ifnottex
  2101. @subsubsection Player_Muted
  2102. @end ifnottex
  2103. @findex Player_Muted
  2104. @code{BOOL Player_Muted(UBYTE channel)}
  2105. @table @i
  2106. @item Description
  2107. This function determines whether a module channel is muted or not.
  2108. @item Parameters
  2109. @itemx channel
  2110. The module channel to test (starting from zero).
  2111. @item Result
  2112. @itemx 0
  2113. The channel is not muted.
  2114. @itemx 1
  2115. The channel is muted.
  2116. @item See also
  2117. @code{Player_Mute}, @code{Player_ToggleMute}, @code{Player_Unmute}.
  2118. @end table
  2119. @ifnottex
  2120. @subsubsection Player_NextPosition
  2121. @end ifnottex
  2122. @findex Player_NextPosition
  2123. @code{void Player_NextPosition(void)}
  2124. @table @i
  2125. @item Description
  2126. This function jumps to the next position in the module.
  2127. @item Notes
  2128. All playing samples and active song voices are cut to avoid hanging notes.
  2129. @item See also
  2130. @code{Player_PrevPosition}, @code{Player_SetPosition}.
  2131. @end table
  2132. @ifnottex
  2133. @subsubsection Player_Paused
  2134. @end ifnottex
  2135. @findex Player_Paused
  2136. @code{BOOL Player_Paused(void)}
  2137. @table @i
  2138. @item Description
  2139. This function determines whether the module is paused or not.
  2140. @item Result
  2141. @itemx 0
  2142. The module is not paused.
  2143. @item 1
  2144. The module is paused.
  2145. @item See also
  2146. @code{Player_TogglePause}.
  2147. @end table
  2148. @ifnottex
  2149. @subsubsection Player_PrevPosition
  2150. @end ifnottex
  2151. @findex Player_PrevPosition
  2152. @code{void Player_PrevPosition(void)}
  2153. @table @i
  2154. @item Description
  2155. This function jumps to the previous position in the module.
  2156. @item Notes
  2157. All playing samples and active song voices are cut to avoid hanging notes.
  2158. @item See also
  2159. @code{Player_NextPosition}, @code{Player_SetPosition}.
  2160. @end table
  2161. @ifnottex
  2162. @subsubsection Player_SetPosition
  2163. @end ifnottex
  2164. @findex Player_SetPosition
  2165. @code{void Player_SetPosition(UWORD position)}
  2166. @table @i
  2167. @item Description
  2168. This function jumps to the specified position in the module.
  2169. @item Parameters
  2170. @itemx position
  2171. The pattern position to jump to.
  2172. @item Notes
  2173. All playing samples and active song voices are cut to avoid hanging notes.
  2174. @item See also
  2175. @code{Player_NextPosition}, @code{Player_PrevPosition}.
  2176. @end table
  2177. @ifnottex
  2178. @subsubsection Player_SetSpeed
  2179. @end ifnottex
  2180. @findex Player_SetSpeed
  2181. @code{void Player_SetSpeed(UWORD speed)}
  2182. @table @i
  2183. @item Description
  2184. This function sets the module speed.
  2185. @item Parameters
  2186. @itemx speed
  2187. The new module speed, in the range 1-32.
  2188. @item See also
  2189. @code{Player_SetTempo}.
  2190. @end table
  2191. @ifnottex
  2192. @subsubsection Player_SetTempo
  2193. @end ifnottex
  2194. @findex Player_SetTempo
  2195. @code{void Player_SetTempo(UWORD tempo)}
  2196. @table @i
  2197. @item Description
  2198. This function sets the module tempo.
  2199. @item Parameters
  2200. @itemx tempo
  2201. The new module tempo, in the range 32-255.
  2202. @item See also
  2203. @code{Player_SetSpeed}.
  2204. @end table
  2205. @ifnottex
  2206. @subsubsection Player_SetVolume
  2207. @end ifnottex
  2208. @findex Player_SetVolume
  2209. @code{void Player_SetVolume(SWORD volume)}
  2210. @table @i
  2211. @item Description
  2212. This function sets the module volume.
  2213. @item Parameters
  2214. @itemx volume
  2215. The new overall module playback volume, in the range 0-128.
  2216. @end table
  2217. @ifnottex
  2218. @subsubsection Player_Start
  2219. @end ifnottex
  2220. @findex Player_Start
  2221. @code{void Player_Start(MODULE* module)}
  2222. @table @i
  2223. @item Description
  2224. This function starts the specified module playback.
  2225. @item Parameters
  2226. @itemx module
  2227. The module to play.
  2228. @item Notes
  2229. If another module is playing, it will be stopped and the new module will play.
  2230. @item See also
  2231. @code{Player_Stop}.
  2232. @end table
  2233. @ifnottex
  2234. @subsubsection Player_Stop
  2235. @end ifnottex
  2236. @findex Player_Stop
  2237. @code{void Player_Stop(void)}
  2238. @table @i
  2239. @item Description
  2240. This function stops the currently playing module.
  2241. @item See also
  2242. @code{Player_Start}.
  2243. @end table
  2244. @ifnottex
  2245. @subsubsection Player_ToggleMute
  2246. @end ifnottex
  2247. @findex Player_ToggleMute
  2248. @code{void Player_ToggleMute(SLONG operation, ...)}
  2249. @table @i
  2250. @item Description
  2251. This function changes the muted status of a single module channel, or a range
  2252. of module channels.
  2253. @item Parameters
  2254. @itemx operation
  2255. Either the number of a module channel to work on (starting from zero), or an
  2256. operation code. In the latter case, two extra parameters are needed to
  2257. determine the range of channels.
  2258. @item Notes
  2259. If the operation is @code{MUTE_INCLUSIVE}, the two channel numbers delimit the
  2260. range and are part of the range ; otherwise, if the operation is
  2261. @code{MUTE_EXCLUSIVE}, they are outside of the range.
  2262. @item Example
  2263. @smallexample
  2264.     /* toggle mute on channel 10 */
  2265.     Player_ToggleMute(10);
  2266.     /* toggle mute on channels 2 to 5 */
  2267.     Player_ToggleMute(MUTE_INCLUSIVE, 2, 5);
  2268.     /* toggle mute on channels 7 to 9 */
  2269.     Player_ToggleMute(MUTE_EXCLUSIVE, 6, 10);
  2270. @end smallexample
  2271. @item See also
  2272. @code{Player_Mute}, @code{Player_Muted}, @code{Player_Unmute}.
  2273. @end table
  2274. @ifnottex
  2275. @subsubsection Player_TogglePause
  2276. @end ifnottex
  2277. @findex Player_TogglePause
  2278. @code{void Player_TogglePause(void)}
  2279. @table @i
  2280. @item Description
  2281. This function toggles the playing/paused status of the module.
  2282. @item Notes
  2283. Calls to @code{Player_xx} functions still have effect when the module is paused.
  2284. @item See also
  2285. @code{Player_Paused}, @code{Player_Start}, @code{Player_Stop}.
  2286. @end table
  2287. @ifnottex
  2288. @subsubsection Player_Unmute
  2289. @end ifnottex
  2290. @findex Player_Unmute
  2291. @code{void Player_Unmute(SLONG operation, ...)}
  2292. @table @i
  2293. @item Description
  2294. This function unmutes a single module channel, or a range of module channels.
  2295. @item Parameters
  2296. @itemx operation
  2297. Either the number of a module channel to unmute (starting from zero), or an
  2298. operation code. In the latter case, two extra parameters are needed to
  2299. determine the range of channels.
  2300. @item Notes
  2301. If the operation is @code{MUTE_INCLUSIVE}, the two channel numbers delimit the
  2302. range and are part of the range ; otherwise, if the operation is
  2303. @code{MUTE_EXCLUSIVE}, they are outside of the range.
  2304. @item Example
  2305. @smallexample
  2306.     /* unmute channel 10 */
  2307.     Player_Unmute(10);
  2308.     /* unmute channels 2 to 5 */
  2309.     Player_Unmute(MUTE_INCLUSIVE, 2, 5);
  2310.     /* unmute channels 7 to 9 */
  2311.     Player_Unmute(MUTE_EXCLUSIVE, 6, 10);
  2312. @end smallexample
  2313. @item See also
  2314. @code{Player_Mute}, @code{Player_Muted}, @code{Player_ToggleMute}.
  2315. @end table
  2316. @c ========================================================== Sample_xx
  2317. @node Sample Functions, Voice Functions, Module Player Functions, Function Reference
  2318. @subsection Sample Functions
  2319. @ifnottex
  2320. @subsubsection Sample_Free
  2321. @end ifnottex
  2322. @findex Sample_Free
  2323. @code{void Sample_Free(SAMPLE* sample)}
  2324. @table @i
  2325. @item Description
  2326. This function unloads a sample from memory.
  2327. @item Parameters
  2328. @itemx sample
  2329. The sample to free.
  2330. @item See also
  2331. @code{Sample_Load}, @code{Sample_LoadFP}.
  2332. @end table
  2333. @ifnottex
  2334. @subsubsection Sample_Load
  2335. @end ifnottex
  2336. @findex Sample_Load
  2337. @code{SAMPLE* Sample_Load(CHAR* filename)}
  2338. @table @i
  2339. @item Description
  2340. This function loads a sample.
  2341. @item Parameters
  2342. @itemx filename
  2343. The sample filename.
  2344. @item Result
  2345. A pointer to a @code{SAMPLE} structure, or @code{NULL} if an error has occurred.
  2346. @item See also
  2347. @code{Sample_Free}, @code{Sample_LoadFP}.
  2348. @end table
  2349. @ifnottex
  2350. @subsubsection Sample_LoadFP
  2351. @end ifnottex
  2352. @findex Sample_LoadFP
  2353. @code{SAMPLE* Sample_LoadFP(FILE* file)}
  2354. @table @i
  2355. @item Description
  2356. This function loads a sample.
  2357. @item Parameters
  2358. @itemx file
  2359. An open file, at the position where the sample starts.
  2360. @item Result
  2361. A pointer to a @code{SAMPLE} structure, or @code{NULL} if an error has occurred.
  2362. @item Notes
  2363. The file is left open, at the same position as before the function call.
  2364. @item See also
  2365. @code{Sample_Free}, @code{Sample_Load}.
  2366. @end table
  2367. @ifnottex
  2368. @subsubsection Sample_Play
  2369. @end ifnottex
  2370. @findex Sample_Play
  2371. @code{SBYTE Sample_Play(SAMPLE* sample, ULONG start, UBYTE flags)}
  2372. @table @i
  2373. @item Description
  2374. This function plays a sample as a sound effect.
  2375. @item Parameters
  2376. @itemx sample
  2377. The sample to play.
  2378. @item start
  2379. The starting position (in samples).
  2380. @item flags
  2381. Either zero, for normal sound effects, or @code{SFX_CRITICAL}, for critical
  2382. sound effects which must not be interrupted.
  2383. @item Result
  2384. The voice number corresponding to the voice which will play the sample.
  2385. @item Notes
  2386. Each new sound effect is played on a new voice. When all voices are taken,
  2387. the oldest sample which was not marked as critical is cut and its voice is
  2388. used for the new sample. Critical samples are not cut unless all the voices
  2389. are taken with critical samples and you attempt to play yet another critical
  2390. sample. Use @code{Voice_Stop} to force the end of a critical sample.
  2391. @item See also
  2392. @code{MikMod_SetNumVoices}, @code{Voice_Play}, @code{Voice_SetFrequency}, @code{Voice_SetPanning}, @code{Voice_SetVolume}, @code{Voice_Stop}.
  2393. @end table
  2394. @c ========================================================== Voice_xx
  2395. @node Voice Functions, Loader Reference, Sample Functions, Function Reference
  2396. @subsection Voice Functions
  2397. @ifnottex
  2398. @subsubsection Voice_GetFrequency
  2399. @end ifnottex
  2400. @findex Voice_GetFrequency
  2401. @code{ULONG Voice_GetFrequency(SBYTE voice)}
  2402. @table @i
  2403. @item Description
  2404. This function returns the frequency of the sample currently playing on the
  2405. specified voice.
  2406. @item Parameters
  2407. @itemx voice
  2408. The number of the voice to get frequency.
  2409. @item Result
  2410. The current frequency of the sample playing on the specified voice, or zero if
  2411. no sample is currently playing on the voice.
  2412. @item See also
  2413. @code{Voice_SetFrequency}.
  2414. @end table
  2415. @ifnottex
  2416. @subsubsection Voice_GetPanning
  2417. @end ifnottex
  2418. @findex Voice_GetPanning
  2419. @code{ULONG Voice_GetPanning(SBYTE voice)}
  2420. @table @i
  2421. @item Description
  2422. This function returns the panning position of the sample currently playing on
  2423. the specified voice.
  2424. @item Parameters
  2425. @itemx voice
  2426. The number of the voice to get panning position.
  2427. @item Result
  2428. The current panning position of the sample playing on the specified voice, or
  2429. @code{PAN_CENTER} if no sample is currently playing on the voice.
  2430. @item See also
  2431. @code{Voice_SetPanning}.
  2432. @end table
  2433. @ifnottex
  2434. @subsubsection Voice_GetPosition
  2435. @end ifnottex
  2436. @findex Voice_GetPosition
  2437. @code{SLONG Voice_GetPosition(SBYTE voice)}
  2438. @table @i
  2439. @item Description
  2440. This function returns the sample position (in samples) of the sample
  2441. currently playing on the specified voice.
  2442. @item Parameters
  2443. @itemx voice
  2444. The number of the voice to get sample position (starting from zero).
  2445. @item Result
  2446. The current play location of the sample playing on the specified voice, or zero
  2447. if the position can not be determined or if no sample is currently playing on
  2448. the voice.
  2449. @item Notes
  2450. This function may not work with some drivers (especially for hardware mixed
  2451. voices). In this case, it returns always @code{-1}.
  2452. @item See also
  2453. @code{Sample_Play}, @code{Voice_Play}.
  2454. @end table
  2455. @ifnottex
  2456. @subsubsection Voice_GetVolume
  2457. @end ifnottex
  2458. @findex Voice_GetVolume
  2459. @code{UWORD Voice_GetVolume(SBYTE voice)}
  2460. @table @i
  2461. @item Description
  2462. This function returns the volume of the sample currently playing on the
  2463. specified voice.
  2464. @item Parameters
  2465. @itemx voice
  2466. The number of the voice to get volume.
  2467. @item Result
  2468. The current volume of the sample playing on the specified voice, or zero if no
  2469. sample is currently playing on the voice.
  2470. @item See also
  2471. @code{Voice_RealVolume}, @code{Voice_SetVolume}.
  2472. @end table
  2473. @ifnottex
  2474. @subsubsection Voice_Play
  2475. @end ifnottex
  2476. @findex Voice_Play
  2477. @code{void Voice_Play(SBYTE voice, SAMPLE* sample, ULONG start)}
  2478. @table @i
  2479. @item Description
  2480. Start a new sample in the specified voice.
  2481. @item Parameters
  2482. @itemx voice
  2483. The number of the voice to be processed (starting from zero).
  2484. @item sample
  2485. The sample to play.
  2486. @item start
  2487. The starting position (in samples).
  2488. @item Notes
  2489. The sample will be played at the volume, panning and frequency settings of the
  2490. voice, regardless or the sample characteristics.@*
  2491. The sample played this way gets the same ``critical'' status as the sample
  2492. which was previously played on this voice.
  2493. @item See also
  2494. @code{Sample_Play}, @code{Voice_SetFrequency}, @code{Voice_SetPanning}, @code{Voice_SetVolume}.
  2495. @end table
  2496. @ifnottex
  2497. @subsubsection Voice_RealVolume
  2498. @end ifnottex
  2499. @findex Voice_RealVolume
  2500. @code{ULONG Voice_RealVolume(SBYTE voice)}
  2501. @table @i
  2502. @item Description
  2503. This function returns the actual playing volume of the specified voice.
  2504. @item Parameters
  2505. @itemx voice
  2506. The number of the voice to analyze (starting from zero).
  2507. @item Result
  2508. The real volume of the voice when the function was called, in the range 0-65535,
  2509. not related to the volume constraint specified with @code{Voice_SetVolume}.
  2510. @item Notes
  2511. This function may not work with some drivers (especially for hardware mixed
  2512. voices). In this case, it always returns zero.@*
  2513. Also note that the real volume computation is not a trivial process and takes
  2514. some CPU time.
  2515. @item See also
  2516. @code{Sample_Play}, @code{Voice_GetVolume}, @code{Voice_Play}, @code{Voice_SetVolume}.
  2517. @end table
  2518. @ifnottex
  2519. @subsubsection Voice_SetFrequency
  2520. @end ifnottex
  2521. @findex Voice_SetFrequency
  2522. @code{void Voice_SetFrequency(SBYTE voice, ULONG frequency)}
  2523. @table @i
  2524. @item Description
  2525. This function sets the frequency (pitch) of the specified voice.
  2526. @item Parameters
  2527. @itemx voice
  2528. The number of the voice to be processed (starting from zero).
  2529. @item frequency
  2530. The new frequency of the voice, in hertz.
  2531. @item See also
  2532. @code{Sample_Play}, @code{Voice_GetFrequency}, @code{Voice_Play}, @code{Voice_SetPanning}, @code{Voice_SetVolume}, @code{Voice_Stop}.
  2533. @end table
  2534. @ifnottex
  2535. @subsubsection Voice_SetPanning
  2536. @end ifnottex
  2537. @findex Voice_SetPanning
  2538. @code{void Voice_SetPanning(SBYTE voice, ULONG panning)}
  2539. @table @i
  2540. @item Description
  2541. This function sets the panning position of the specified voice.
  2542. @item Parameters
  2543. @itemx voice
  2544. The number of the voice to be processed (starting from zero).
  2545. @item panning
  2546. The new panning position of the voice.
  2547. @item Notes
  2548. Panning can vary between 0 (@code{PAN_LEFT}) and 255 (@code{PAN_RIGHT}). Center
  2549. is 127 (@code{PAN_CENTER}. Surround sound can be enabled by specifying the
  2550. special value @code{PAN_SURROUND}.
  2551. @item See also
  2552. @code{Sample_Play}, @code{Voice_GetPanning}, @code{Voice_Play}, @code{Voice_SetFrequency}, @code{Voice_SetVolume}, @code{Voice_Stop}.
  2553. @end table
  2554. @ifnottex
  2555. @subsubsection Voice_SetVolume
  2556. @end ifnottex
  2557. @findex Voice_SetVolume
  2558. @code{void Voice_SetVolume(SBYTE voice, UWORD volume)}
  2559. @table @i
  2560. @item Description
  2561. This function sets the volume of the specified voice.
  2562. @item Parameters
  2563. @itemx voice
  2564. The number of the voice to be processed (starting from zero).
  2565. @item volume
  2566. The new volume of the voice, in the range 0-256.
  2567. @item See also
  2568. @code{Sample_Play}, @code{Voice_GetVolume}, @code{Voice_Play}, @code{Voice_SetFrequency}, @code{Voice_SetPanning}, @code{Voice_Stop}.
  2569. @end table
  2570. @ifnottex
  2571. @subsubsection Voice_Stop
  2572. @end ifnottex
  2573. @findex Voice_Stop
  2574. @code{void Voice_Stop(SBYTE voice)}
  2575. @table @i
  2576. @item Description
  2577. This function stops the playing sample of the specified voice.
  2578. @item Parameters
  2579. @itemx voice
  2580. The number of the voice to be processed (starting from zero).
  2581. @item Notes
  2582. After the call to @code{Voice_Stop}, the function @code{Voice_Stopped} will
  2583. return nonzero (true) for the voice. If you want to silence the voice without
  2584. stopping the playback, use @code{Voice_SetVolume(voice, 0)} instead.
  2585. @item See also
  2586. @code{Sample_Play}, @code{Voice_Play}, @code{Voice_SetFrequency}, @code{Voice_SetPanning}, @code{Voice_SetVolume}.
  2587. @end table
  2588. @ifnottex
  2589. @subsubsection Voice_Stopped
  2590. @end ifnottex
  2591. @findex Voice_Stopped
  2592. @code{BOOL Voice_Stopped(SBYTE voice)}
  2593. @table @i
  2594. @item Description
  2595. This function returns whether the voice is active or not.
  2596. @item Parameters
  2597. @itemx voice
  2598. The number of the voice to be checked (starting from zero).
  2599. @item Result
  2600. @itemx 0
  2601. The voice is stopped or has no sample assigned.
  2602. @itemx nonzero
  2603. The voice is playing a sample.
  2604. @item Notes
  2605. This function may not work with some drivers (especially for hardware mixed
  2606. voices). In this case, its return value is undefined.
  2607. @item See also
  2608. @code{Voice_Stop}.
  2609. @end table
  2610. @c ========================================================== Loader reference
  2611. @node Loader Reference, Module Loaders, Voice Functions, Library Reference
  2612. @section Loader Reference
  2613. @menu
  2614. * Module Loaders::
  2615. * Sample Loaders::
  2616. @end menu
  2617. @node Module Loaders, Sample Loaders, Loader Reference, Loader Reference
  2618. @subsection Module Loaders
  2619. MikMod presents a large choice of module loaders, for the most common formats
  2620. as well as for some less-known exotic formats.
  2621. @table @code
  2622. @item load_669
  2623. This loader recognizes ``Composer 669'' and ``Unis 669'' modules. The 669
  2624. and ``Extended 669'' formats were among the first PC module formats. They
  2625. do not have a wide range of effects, but support up to 32 channels.@*
  2626. ``Composer 669'' was written by Tran of Renaissance, a.k.a.@: Tomasz Pytel and
  2627. released in 1992. ``Unis 669 Composer'' was written by Jason Nunn and released
  2628. in 1994.
  2629. @item load_amf
  2630. This loader recognizes the ``Advanced Module Format'', which is the internal
  2631. module format of the ``DOS Sound and Music Interface'' (DSMI) library. This
  2632. format has the same limitations as the S3M format. The most famous DSMI
  2633. application was DMP, the Dual Module Player.@*
  2634. DMP and the DSMI library were written by Otto Chrons. DSMI was first released
  2635. in 1993.
  2636. @item load_dsm
  2637. This loader recognizes the internal DSIK format, which is the internal module
  2638. format of the ``Digital Sound Interface Kit'' (DSIK) library, the ancester of
  2639. the SEAL library. This format has the same limitations as the S3M format.@*
  2640. The DSIK library was written by Carlos Hasan and released in 1994.
  2641. @item load_far
  2642. This loader recognizes ``Farandole'' modules. These modules can be up to 16
  2643. channels and have Protracker comparable effects.@*
  2644. The Farandole composer was written by Daniel Potter and released in 1994. 
  2645. @item load_gdm
  2646. This loader recognizes the ``General DigiMusic'' format, which is the internal
  2647. format of the ``Bells, Whistles and Sound Boards'' library. This format has the
  2648. same limitations as the S3M format.@*
  2649. The BWSB library was written by Edward Schlunder and first released in 1993.
  2650. @item load_imf
  2651. This loader recognizes ``Imago Orpheus'' modules. This format is roughly
  2652. equivalent to the XM format, but with two effects columns instead of a volume
  2653. column and an effect column.@*
  2654. Imago Orpheus was written by Lutz Roeder and released in 1994.
  2655. @item load_it
  2656. This loader recognizes ``Impulse Tracker'' modules, currently the most powerful
  2657. format. These modules support up to 64 real channels, and up to 256 virtual
  2658. channels with the ``New Note Action'' feature. Besides, it has the widest range
  2659. of effects, and supports 16 bit samples as well as surround sound.@*
  2660. ``Impulse Tracker'' was written by Jeffrey Lim and released in 1996.
  2661. @item load_med
  2662. This loader recognizes ``OctaMED'' modules. These modules are comparable to
  2663. Protracker modules, but can embed ``synthsounds'', which are midi-like
  2664. instruments.@*
  2665. ``MED'' and later ``OctaMED'' were written by Teijo Kinnunen. ``MED'' was
  2666. released in 1989, and ``OctaMED'' was released in 1992.
  2667. @item load_m15
  2668. This loader recognizes the old 15 instrument modules, created by ``Ultimate
  2669. Soundtracker'', ``Soundtracker'' and the first versions of ``Protracker''.@*
  2670. Since this format was one of the first module formats, developed in 1987, it
  2671. does not have any signature field, which makes it hard to detect reliably,
  2672. because of its similarities with later module formats.
  2673. @item load_mod
  2674. This loader recognizes the standard 31 instrument modules, created by
  2675. ``Protracker'' or Protracker-compatible programs. The original Protracker
  2676. format was limited to 4 channels, but other trackers like ``TakeTracker'',
  2677. ``StarTracker'' or ``Oktalyzer'' afforded more channels.@*
  2678. Although it is now technically obsolete, this format is still widely used, due
  2679. to its playback simplicity (on the adequate hardware, the Amiga).
  2680. @item load_mtm
  2681. This loader recognizes the ``MultiTracker Module Editor'' modules. The MTM
  2682. format has up to 32 channels, and protracker comparable effects. It was
  2683. intended to replace ``Composer 669''.
  2684. The ``MultiTracker Module Editor'' was written by Starscream of Renaissance,
  2685. a.k.a.@: Daniel Goldstein and released in late 1993.
  2686. @item load_okt
  2687. This loader recognizes the ``Amiga Oktalyzer'' modules. The OKT format has up
  2688. to 8 channels, and a few protracker compatible effects, as well as other
  2689. OKT-specific effects, of which only a few are currently supported by libmikmod.
  2690. ``Oktalyzer'' was written by Armin Sander and released in 1990.
  2691. @item load_stm
  2692. This loader recognizes ``ScreamTracker'' modules. ``ScreamTracker'' was the
  2693. first PC tracker, as well as the first PC module format. Loosely inspired by
  2694. the ``SoundTracker'' format, it does not have as many effects as Protracker,
  2695. although it supports 31 instruments and 4 channels.@*
  2696. ``ScreamTracker'' was written by PSI of Future Crew, a.k.a.@: Sami Tammilehto.
  2697. @item load_stx
  2698. This loader recognizes ``STMIK 0.2'' modules. ``STMIK'' (the Scream Tracker
  2699. Music Interface Kit) was a module playing library distributed by Future Crew
  2700. to play Scream Tracker module in games and demos. It uses an intermediate format
  2701. between STM and S3M and comes with a tool converting STM modules to STX.@*
  2702. ``STMIK'' was written by PSI of Future Crew, a.k.a.@: Sami Tammilehto.
  2703. @item load_s3m
  2704. This loader recognizes ``ScreamTracker 3'' modules. This version was a huge
  2705. improvement over the original ``ScreamTracker''. It supported 32 channels, up
  2706. to 99 instruments, and a large choice of effects.@*
  2707. ``ScreamTracker 3'' was written by PSI of Future Crew, a.k.a.@: Sami
  2708. Tammilehto, and released in 1994.
  2709. @item load_ult
  2710. This loader recognizes ``UltraTracker'' modules. They are mostly similar to
  2711. Protracker modules, but support two effects per channel.@*
  2712. ``UltraTracker'' was written by MAS of Prophecy, a.k.a.@: Marc Andre Schallehn,
  2713. and released in 1993.
  2714. @item load_uni
  2715. This loader recognizes ``UNIMOD'' modules. This is the internal format used by
  2716. MikMod and APlayer. Use of this format is discouraged, this loader being
  2717. provided for completeness.
  2718. @item load_xm
  2719. This loader recognizes ``FastTracker 2'' modules. This format was designed from
  2720. scratch, instead of creating yet another Protracker variation. It was the first
  2721. format using instruments as well as samples, and envelopes for finer effects.@*
  2722. FastTracker 2 was written by Fredrik Huss and Magnus Hogdahl, and released in
  2723. 1994.
  2724. @end table
  2725. @node Sample Loaders, Driver Reference, Module Loaders, Loader Reference
  2726. @subsection Sample Loaders
  2727. Currently, the only file type than can be loaded as a sample is the RIFF
  2728. WAVE file. Stereo or compressed WAVE files are not supported yet.
  2729. @c ========================================================== Driver reference
  2730. @node Driver Reference, Network Drivers, Sample Loaders, Library Reference
  2731. @section Driver Reference
  2732. @menu
  2733. * Network Drivers::
  2734. * Hardware Drivers::
  2735. * Disk Writer Drivers::
  2736. * Other Drivers::
  2737. @end menu
  2738. @node Network Drivers, Hardware Drivers, Driver Reference, Driver Reference
  2739. @subsection Network Drivers
  2740. These drivers send the generated sound over the network to a server program,
  2741. which sends the sound to the real sound hardware. The server program can be
  2742. on the same machine than your program, but MikMod does not have access to the
  2743. hardware. Network drivers only support software mixing.
  2744. @table @code
  2745. @item drv_AF
  2746. This driver works with the ``Digital AudioFile'' library.@*
  2747. Start the server on the machine you want, set its hostname in the
  2748. @samp{AUDIOFILE} environment variable, and MikMod is ready to send it sound.
  2749. @item drv_esd
  2750. This driver works with the ``Enlightened Sound Daemon''.@*
  2751. Start the esd daemon on the machine you want, set its hostname in the
  2752. @samp{ESPEAKER} environment variable, and MikMod is ready to send it sound.
  2753. @end table
  2754. @node Hardware Drivers, Disk Writer Drivers, Network Drivers, Driver Reference
  2755. @subsection Hardware Drivers
  2756. These drivers access to the sound hardware of the machine they run on.
  2757. Depending on your Unix flavor, you'll end with one or more drivers from this
  2758. list:
  2759. @table @code
  2760. @item drv_aix
  2761. This driver is only available under AIX, and access its audio device.@*
  2762. This driver only supports software mixing.
  2763. @item drv_alsa
  2764. This driver is only available under Linux, and requires the ALSA driver to be
  2765. compiled for your current kernel.@*
  2766. This driver only supports software mixing, but a future version of the driver
  2767. might be able to use the hardware capabilities of some sound cards.
  2768. @item drv_dart
  2769. This driver is only available under OS/2 version 3 and higher (Warp), and uses
  2770. the ``Direct Audio Real-Time'' interface.@*
  2771. This driver only supports software mixing.
  2772. @item drv_hp
  2773. This driver is only available under HP-UX, and access its audio device.@*
  2774. This driver only supports software mixing.
  2775. @item drv_os2
  2776. This driver is only available under OS/2 version 3 and higher (Warp), and OS/2
  2777. 2.x with MMPM/2.@*
  2778. This driver only supports software mixing.
  2779. @item drv_oss
  2780. This driver is available under any Unix with the Open Sound System drivers
  2781. installed. Linux and FreeBSD also come with the OSS/Lite driver (the
  2782. non-commercial version of OSS) and can make use of this driver.@*
  2783. This driver only supports software mixing.
  2784. @item drv_sam9407
  2785. This driver is only available under Linux, and requires the Linux sam9407
  2786. driver to be compiled for your current kernel.@*
  2787. This driver only supports hardware mixing.
  2788. @item drv_sgi
  2789. This driver is only available under IRIX, and uses the SGI audio library.@*
  2790. This driver only supports software mixing.
  2791. @item drv_sun
  2792. This driver is only available under Unices which implement SunOS-like audio
  2793. device interfaces, that is, SunOS, Solaris, NetBSD and OpenBSD.@*
  2794. This driver only supports software mixing.
  2795. @item drv_ultra
  2796. This driver is only available under Linux, and requires the Linux Ultrasound
  2797. driver (the ancestor of ALSA) to be compiled for your current kernel.@*
  2798. This driver only supports hardware mixing.
  2799. @end table
  2800. @node Disk Writer Drivers, Other Drivers, Hardware Drivers, Driver Reference
  2801. @subsection Disk Writer Drivers
  2802. These drivers work on any machine, since the generated sound is not sent to
  2803. hardware, but written in a file. Disk writer drivers only support software
  2804. mixing.
  2805. @table @code
  2806. @item drv_raw
  2807. This driver outputs the sound date in a file by default named @file{music.raw}
  2808. in the current directory. The file has no header and only contains the sound
  2809. output.
  2810. @item drv_wav
  2811. This driver outputs the sound data in a RIFF WAVE file by default named
  2812. @file{music.wav} in the current directory.
  2813. @end table
  2814. @node Other Drivers, , Disk Writer Drivers, Driver Reference
  2815. @subsection Other Drivers
  2816. These drivers are of little interest, but are handy sometimes.
  2817. @table @code
  2818. @item drv_stdout
  2819. This driver outputs the sound data to the program's standard output. To avoid
  2820. inconvenience, the data will not be output if the standard output is a terminal,
  2821. thus you have to pipe it through another command or to redirect it to a file.
  2822. Using this driver and redirecting to a file is equivalent to using the
  2823. @code{drv_raw} disk writer.@*
  2824. This driver only supports software mixing.
  2825. @item drv_pipe
  2826. This driver pipes the sound data to a command (which must be given in the
  2827. driver commandline, via @code{MikMod_Init}).@*
  2828. This driver only supports software mixing.
  2829. @item drv_nos
  2830. This driver doesn't produce sound at all, and will work on any machine.@*
  2831. Since it does not have to produce sound, it supports both hardware and software
  2832. mixing, with as many hardware voices as you like.
  2833. @end table
  2834. @c ========================================================== Index
  2835. @node Index, Function Index, Library Reference, Top
  2836. @ifnottex
  2837. @chapter Index
  2838. @menu
  2839. * Function Index::
  2840. * Type and Variable Index::
  2841. @end menu
  2842. @end ifnottex
  2843. @ifnottex
  2844. @node Function Index, Type and Variable Index, Index, Index
  2845. @end ifnottex
  2846. @unnumbered Function Index
  2847. @printindex fn
  2848. @ifnottex
  2849. @node Type and Variable Index, , Function Index, Index
  2850. @end ifnottex
  2851. @unnumbered Type and Variable Index
  2852. @printindex vr
  2853. @c ========================================================== Table Of Contents
  2854. @contents
  2855. @bye