; uFMOD header file ; Target OS: KolibriOS ; Compiler: MASM32 ; HANDLE uFMOD_LoadSong( ; void *lpXM, ; void *param, ; int fdwSong ; ) ; --- ; Description: ; --- ; Loads the given XM song and starts playing it as soon as you ; call uFMOD_WaveOut for the first time. Playback won't begin ; if XM_SUSPENDED flag is specified. It will stop any currently ; playing song before loading the new one. ; --- ; Parameters: ; --- ; lpXM ; Specifies the song to load. If this parameter is 0, any ; currently playing song is stopped. In such a case, function ; does not return a meaningful value. fdwSong parameter ; determines whether this value is interpreted as a filename ; or as a pointer to an image of the song in memory. ; param ; If XM_MEMORY is specified, this parameter should be the size ; of the image of the song in memory. ; If XM_FILE is specified, this parameter is ignored. ; fdwSong ; Flags for playing the song. The following values are defined: ; XM_FILE lpXM points to filename. param is ignored. ; XM_MEMORY lpXM points to an image of a song in memory. ; param is the image size. Once, uFMOD_LoadSong ; returns, it's safe to free/discard the memory ; buffer. ; XM_NOLOOP An XM track plays repeatedly by default. Specify ; this flag to play it only once. ; XM_SUSPENDED The XM track is loaded in a suspended state, ; and will not play until the uFMOD_Resume function ; is called. This is useful for preloading a song ; or testing an XM track for validity. ; --- ; Return Values: ; --- ; On success, returns the handle of the Infinity Sound driver. ; Returns 0 on failure. uFMOD_LoadSong PROTO C :DWORD,:DWORD,:DWORD ; int uFMOD_WaveOut(void) ; --- ; Description: ; --- ; Updates the internal playback buffer. ; --- ; Remarks: ; --- ; This function should be called from the same thread ; uFMOD_LoadSong was previously called. Playback doesn't actually ; begin when calling uFMOD_LoadSong, but when calling uFMOD_WaveOut ; after a successful uFMOD_LoadSong call. Afterwards, you should ; call uFMOD_WaveOut repeatedly at least once every 250 ms to ; prevent "buffer underruns". ; uFMOD_WaveOut is a non-blocking function. The accuracy of the ; InfoAPI functions (uFMOD_GetStats, uFMOD_GetRowOrder and ; uFMOD_GetTime) depends on the periodicity of this function being ; invoked. ; --- ; Return Values: ; --- ; Returns non zero on error. uFMOD_WaveOut PROTO C ; void uFMOD_StopSong(void) ; --- ; Description: ; --- ; Stops the currently playing song, freeing the associated ; resources. ; --- ; Remarks: ; --- ; Does nothing if no song is playing at the time the call is made. uFMOD_StopSong PROTO C ; void uFMOD_Jump2Pattern( ; unsigned int pat ; ) ; --- ; Description: ; --- ; Jumps to the specified pattern index. ; --- ; Parameters: ; --- ; pat ; Next zero based pattern index. ; --- ; Remarks: ; --- ; uFMOD doesn't automatically perform Note Off effects before jumping ; to the target pattern. In other words, the original pattern will ; remain in the mixer until it fades out. You can use this feature to ; your advantage. If you don't like it, just insert leading Note Off ; commands in all patterns intended to be used as uFMOD_Jump2Pattern ; targets. ; if the pattern index lays outside of the bounds of the pattern order ; table, calling this function jumps to pattern 0, effectively ; rewinding playback. uFMOD_Jump2Pattern PROTO C :DWORD ; void uFMOD_Pause(void) ; --- ; Description: ; --- ; Pauses the currently playing song, if any. ; --- ; Remarks: ; --- ; While paused you can still control the volume (uFMOD_SetVolume) and ; the pattern order (uFMOD_Jump2Pattern). The RMS volume coefficients ; (uFMOD_GetStats) will go down to 0 and the progress tracker ; (uFMOD_GetTime) will "freeze" while the song is paused. ; uFMOD_Pause doesn't perform the request immediately. Instead, it ; signals to pause when playback reaches next chunk of data. ; This way, uFMOD_Pause performs asynchronously and returns very fast. ; It is not cumulative. So, calling uFMOD_Pause many times in a row ; has the same effect as calling it once. ; You shouldn't stop calling uFMOD_WaveOut while the song is paused! uFMOD_Pause PROTO C ; void uFMOD_Resume(void) ; --- ; Description: ; --- ; Resumes the currently paused song, if any. ; --- ; Remarks: ; --- ; uFMOD_Resume doesn't perform the request immediately. Instead, it ; signals to resume when uFMOD_WaveOut is called again. uFMOD_Resume ; is not cumulative. So, calling it many times in a row has the same ; effect as calling it once. uFMOD_Resume PROTO C ; unsigned int uFMOD_GetStats(void) ; --- ; Description: ; --- ; Returns the current RMS volume coefficients in (L)eft and (R)ight ; channels. ; low-order word: RMS volume in R channel ; hi-order word: RMS volume in L channel ; Range from 0 (silence) to $7FFF (maximum) on each channel. ; --- ; Remarks: ; --- ; This function is useful for updating a VU meter. It's recommended ; to rescale the output to log10 (decibels or dB for short), because ; human ears track volume changes in a dB scale. You may call ; uFMOD_GetStats() as often as you like, but take in mind that uFMOD ; updates both channel RMS volumes at the same rate uFMOD_WaveOut ; function is called. In other words, you should call uFMOD_WaveOut ; more often to increase the accuracy of uFMOD_GetStats. uFMOD_GetStats PROTO C ; unsigned int uFMOD_GetRowOrder(void) ; --- ; Description: ; --- ; Returns the currently playing row and order. ; low-order word: row ; hi-order word: order ; --- ; Remarks: ; --- ; This function is useful for synchronization. uFMOD updates both ; row and order values at the same rate uFMOD_WaveOut function is ; called. In other words, you should call uFMOD_WaveOut more often ; to increase the accuracy of uFMOD_GetRowOrder. uFMOD_GetRowOrder PROTO C ; unsigned int uFMOD_GetTime(void) ; --- ; Description: ; --- ; Returns the time in milliseconds since the song was started. ; --- ; Remarks: ; --- ; This function is useful for synchronizing purposes. Multimedia ; applications can use uFMOD_GetTime to synchronize GFX to sound, ; for example. An XM player can use this function to update a progress ; meter. uFMOD_GetTime PROTO C ; unsigned char* uFMOD_GetTitle(void) ; --- ; Description: ; --- ; Returns the current song's title. ; --- ; Remarks: ; --- ; Not every song has a title, so be prepared to get an empty string. uFMOD_GetTitle PROTO C ; void uFMOD_SetVolume( ; unsigned int vol ; ) ; --- ; Description: ; --- ; Sets the global volume. The volume scale is linear. ; --- ; Parameters: ; --- ; vol ; New volume. Range: from uFMOD_MIN_VOL (muting) to uFMOD_MAX_VOL ; (maximum volume). Any value above uFMOD_MAX_VOL maps to maximum ; volume. ; --- ; Remarks: ; --- ; uFMOD internally converts the given values to a logarithmic scale (dB). ; Maximum volume is set by default. The volume value is preserved across ; uFMOD_LoadSong calls. You can set the desired volume level before ; actually starting to play a song. ; You can use Infinity Sound API to control the L and R channels volumes ; separately. It also has a wider range than uFMOD_SetVolume, sometimes ; allowing to amplify the sound volume as well, as opposed to ; uFMOD_SetVolume only being able to attenuate it. uFMOD_SetVolume PROTO C :DWORD XM_MEMORY EQU 1 XM_FILE EQU 2 XM_NOLOOP EQU 8 XM_SUSPENDED EQU 16 uFMOD_MIN_VOL EQU 0 uFMOD_MAX_VOL EQU 25 uFMOD_DEFAULT_VOL EQU 25