Differenze tra le versioni di "La gestione dei file MIDI mediante le funzioni esterne del API di SDL"
Riga 13: | Riga 13: | ||
Mostriamo di seguito un semplice codice per eseguire un file Midi: | Mostriamo di seguito un semplice codice per eseguire un file Midi: | ||
− | |||
'''Private''' Const AUDIO_S16SYS As Integer = 32784 | '''Private''' Const AUDIO_S16SYS As Integer = 32784 | ||
'''Private''' Const STEREO As Integer = 2 | '''Private''' Const STEREO As Integer = 2 | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
Riga 61: | Riga 48: | ||
Dim music As Pointer | Dim music As Pointer | ||
− | |||
− | |||
− | |||
− | |||
<FONT color=gray>' ''Inizializza la libreria "SDL_mixer" con specifiche impoostazioni audio:''</font> | <FONT color=gray>' ''Inizializza la libreria "SDL_mixer" con specifiche impoostazioni audio:''</font> | ||
err = Mix_OpenAudio(audio_rate, AUDIO_S16SYS, STEREO, audio_buffers) | err = Mix_OpenAudio(audio_rate, AUDIO_S16SYS, STEREO, audio_buffers) | ||
If err <> 0 Then Error.Raise("Impossibile inizializzare l'audio: " & Mix_GetError()) | If err <> 0 Then Error.Raise("Impossibile inizializzare l'audio: " & Mix_GetError()) | ||
− | + | ||
− | |||
<FONT color=gray>' ''Carica il file Midi:''</font> | <FONT color=gray>' ''Carica il file Midi:''</font> | ||
music = Mix_LoadMUS("''/percorso/del/file.mid''") | music = Mix_LoadMUS("''/percorso/del/file.mid''") | ||
Riga 95: | Riga 77: | ||
Mix_CloseAudio() | Mix_CloseAudio() | ||
− | |||
− | |||
'''End''' | '''End''' | ||
Versione delle 18:20, 28 feb 2014
La libreria SDL è un API multi-piattaforma contenente funzioni per la gestione multimediale dell'audio e del video.
Per poter eseguire file Midi, è necessario utilizzare la libreria SDL_mixer che viene utilizzata con la libreria SDL. Essa, più in generale, permette ai programmatori di usare più campioni con la musica, e di semplificare la gestione del caricamento, della riproduzione di campioni e della musica da diversi tipi di formati di file.
Per utilizzare in Gambas le risorse delle librerie libSDL e libSDL_mixer, bisognerà richiamare le librerie (con l'attuale versione):
libSDL-1.2.so.0.11.4 libSDL_mixer-1.2.so.0.12.0
E' inoltre necessario aver installato il file banco di suoni di default di Timidity: "/usr/share/sounds/sf2/TimGM6mb.sf2", oppure quello di Fluidsynth: "/usr/share/sounds/sf2/FluidR3_GM.sf2"
Mostriamo di seguito un semplice codice per eseguire un file Midi:
Private Const AUDIO_S16SYS As Integer = 32784 Private Const STEREO As Integer = 2 Library "libSDL_mixer-1.2:0.12.0" ' int Mix_OpenAudio(Int frequency, Uint16 Format, Int channels, Int chunksize) Private Extern Mix_OpenAudio(frequency As Integer, formatSh As Short, channels As Byte, chunksize As Integer) As Integer ' Mix_Music *Mix_LoadMUS(const char *file) Private Extern Mix_LoadMUS(file As String) As Pointer ' int Mix_PlayMusic(Mix_Music *music, int loops) Private Extern Mix_PlayMusic(music As Pointer, loops As Integer) As Integer ' Int Mix_PlayingMusic() Private Extern Mix_PlayingMusic() As Integer ' void Mix_FreeChunk(Mix_Chunk *chunk) Private Extern Mix_FreeChunk(chunk As Pointer) ' char * Mix_GetError() Private Extern Mix_GetError() As String ' void Mix_CloseAudio(void) Private Extern Mix_CloseAudio() Public Sub Button1_Click() Dim err As Integer Dim audio_rate As Integer = 44100 ' Imposta la frequenza che verrà usata da "SDL_mixer" Dim audio_buffers As Short = 4096 ' Determina la quantità di blocchi di memoria utilizzati per incamerare ed eseguire l'audio Dim music As Pointer ' Inizializza la libreria "SDL_mixer" con specifiche impoostazioni audio: err = Mix_OpenAudio(audio_rate, AUDIO_S16SYS, STEREO, audio_buffers) If err <> 0 Then Error.Raise("Impossibile inizializzare l'audio: " & Mix_GetError()) ' Carica il file Midi: music = Mix_LoadMUS("/percorso/del/file.mid") If IsNull(music) Then Error.Raise("Impossibile caricare il file Midi: " & Mix_GetError()) ' Esegue il file Midi. Se il secondo argomento è posto a 0 il file sarà eseguito soltanto una volta. ' Se è posto a -1 il file sarà esguito all'infinito: err = Mix_PlayMusic(music, 0) If err < 0 Then Error.Raise("Impossibile eseguire il file Midi: " & Mix_GetError()) ' Attende che sia terminato il file Midi: While Mix_PlayingMusic() <> 0 Wait 0.01 Wend ' Va in chiusura ' Libera la memoria precedentemente allocata per l'esecuzione sonora: Mix_FreeChunk(music) ' Chiude l'interfaccia audio SDL e SDL_mixer: Mix_CloseAudio() End
Riferimenti
- Il sito dell'API di SDL.
- il sito di www.webkinesia.com