La gestione dei file audio mediante le funzioni esterne del API di MikMod

Da Gambas-it.org - Wikipedia.

Mikmod è una libreria che supporta i seguenti formati audio: mod, s3m, it e xm.

La riproduzione audio avviene un driver audio. MikMod fornisce diversi driver audio e consente di aggiungere e selezionare un proprio driver audio.


Per poter fruire delle risorse di MikMod in Gambas è necessario avere installata e richiamare la libreria dinamica condivisa: libmikmod.so.2.0.6


Riproduzione audio mediante un'applicazione "a riga di comando"

Mostriamo di seguito un esempio per eseguire un file audio, tra quelli supportati dalla libreria MikMod, mediante un'applicazione a riga di comando:

Library "libmikmod:2.0.6"

' void MikMod_RegisterAllDrivers(void)
' Registers all the available drivers.
Private Extern MikMod_RegisterAllDrivers()

' void MikMod_RegisterAllLoaders(void)
' Registers all the available module loaders.
Private Extern MikMod_RegisterAllLoaders()

' int MikMod_Init(const CHAR *parameters)
' Performs the library initialization.
Private Extern MikMod_Init(parameters As String) As Integer

' MODULE* Player_Load(const CHAR* filename, int maxchan, BOOL curious)
' Loads a music module.
Private Extern Player_Load(filename As String, maxchan As Integer, curious As Boolean) As Pointer

' void Player_Start(MODULE* module)
' Starts the specified module playback.
Private Extern Player_Start(module As Pointer)

' BOOL Player_Active(void)
' Returns whether the module player is active or not.
Private Extern Player_Active() As Boolean

' void MikMod_Update(void)
' Updates the sound.
Private Extern MikMod_Update()

' void Player_Stop(void)
' Stops the currently playing module.
Private Extern Player_Stop()

' void Player_Free(MODULE* module)
' Stops the module if it is playing and unloads it from memory.
Private Extern Player_Free(module As Pointer)

' const char* MikMod_strerror(int errnum)
' Associates a descriptive message to an error code.
Private Extern MikMod_strerror(errnum As Integer) As String

' void MikMod_Exit(void)
' Deinitializes the sound hardware and frees all the memory and resources used by MikMod.
Private Extern MikMod_Exit()


Public Sub Main()

 Dim md As Pointer
 Dim err, MikMod_errno As Integer
 
' Registra tutti i driver necessari:
   MikMod_RegisterAllDrivers()
   
' Registra tutti i loader di modulo:
   MikMod_RegisterAllLoaders()
   
' Inizializza la libreria:
   err = MikMod_Init(Null)
   If err Then Error.Raise("Impossibile inizializzare la libreria MikMod: " & MikMod_strerror(MikMod_errno))
   
' Carica il modulo sonoro:
   md = Player_Load("/percorso/del/file/audio", 64, False)
   If IsNull(md) Then Error.Raise("Impossibile caricare il modulo sonoro: " & MikMod_strerror(MikMod_errno))
   
' Avvia il modulo sonoro:
   Player_Start(md)
   
   While Player_Active()
     MikMod_Update()
   Wend
   
   Player_Stop()
   Player_Free(md)
   
' Chiude la libreria:
   MikMod_Exit()
  
End



Riferimenti