|
|
(28 versioni intermedie di uno stesso utente non sono mostrate) |
Riga 1: |
Riga 1: |
− | La libreria '''''SDL''''' è un [http://it.wikipedia.org/wiki/Application_programming_interface API] multi-piattaforma contenente funzioni per la gestione multimediale dell'audio e del video.
| + | #redirect[[Eseguire_un_file_audio_mediante_le_funzioni_esterne_dell'API_di_SDL]] |
− | | |
− | | |
− | Per poter utilizzare le funzioni esterne di ''SDL'' in Gambas, si potranno richiamare anche separatamente le seguenti specifiche librerie:
| |
− | libSDL-1.2.so.0.11.4
| |
− | libSDL_mixer-1.2.so.0.12.0
| |
− | libSDL_sound-1.0.so.1.0.2
| |
− | Per poter riprodurre più suoni contemporaneamente è necessario utilizzare le funzioni della sub-libreria mixer audio multi-canale ''SDL_mixer''.
| |
− | | |
− | | |
− | ===Eseguire un file WAV===
| |
− | Di seguito mostreremo un semplice codice per eseguire un file audio '''WAV''':
| |
− | '''Private''' Const AUDIO_S16SYS As Integer = 32784 <FONT color=gray>' ''Campioni a 16-bit''</font>
| |
− | '''Private''' Const SDL_INIT_AUDIO As Byte = 10
| |
− | '''Private''' Const STEREO As Byte = 2
| |
− |
| |
− |
| |
− | Library "libSDL-1.2:0.11.4"
| |
− |
| |
− | <FONT color=gray>' ''int SDL_Init(Uint32 flags)''</font>
| |
− | '''Private''' Extern SDL_Init(flags As Integer) As Integer
| |
− |
| |
− | <FONT color=gray>' ''char * SDL_GetError(void)''</font>
| |
− | '''Private''' Extern SDL_GetError() As String
| |
− |
| |
− | <FONT color=gray>' ''void SDL_Quit(void)''</font>
| |
− | '''Private''' Extern SDL_Quit()
| |
− |
| |
− |
| |
− | Library "libSDL_mixer-1.2:0.12.0"
| |
− |
| |
− | <FONT color=gray>' ''char * Mix_GetError(void)''</font>
| |
− | '''Private''' Extern Mix_GetError() As String
| |
− |
| |
− | <FONT color=gray>' ''int Mix_OpenAudio(Int frequency, Uint16 Format, Int channels, Int chunksize)''</font>
| |
− | '''Private''' Extern Mix_OpenAudio(frequency As Integer, formatSh As Short, channels As Byte, chunksize As Integer) As Integer
| |
− |
| |
− | <FONT color=gray>' ''Mix_Chunk * Mix_LoadWAV_RW(SDL_RWops *src, int freesrc)''</font>
| |
− | '''Private''' Extern Mix_LoadWAV_RW(src As Pointer, freesrc As Integer) As Pointer
| |
− |
| |
− | <FONT color=gray>' ''int Mix_PlayChannelTimed(int channel, Mix_Chunk *chunk, int loops, int ticks)''</font>
| |
− | '''Private''' Extern Mix_PlayChannelTimed(channel As Integer, chunk As Pointer, loops As Integer, ticks As Integer) As Integer
| |
− |
| |
− | <FONT color=gray>' ''void Mix_FreeChunk(Mix_Chunk *chunk)''</font>
| |
− | '''Private''' Extern Mix_FreeChunk(chunk As Pointer)
| |
− |
| |
− | <FONT color=gray>' ''void Mix_CloseAudio(void)''</font>
| |
− | '''Private''' Extern Mix_CloseAudio()
| |
− |
| |
− | <FONT color=gray>' ''int Mix_PlayMusic(Mix_Music *music, int loops)''</font>
| |
− | '''Private''' Extern Mix_PlayMusic(music As Pointer, loops As Integer) As Integer
| |
− |
| |
− |
| |
− | Library "libSDL_sound-1.0:1.0.2"
| |
− |
| |
− | <FONT color=gray>' ''SDL_RWops *SDL_RWFromFile(const char *file, const char *mode)''</font>
| |
− | '''Private''' Extern SDL_RWFromFile(src As String, mode As String) As Pointer
| |
− |
| |
− |
| |
− | '''Public''' Sub Button1_Click()
| |
− |
| |
− | Dim err, channel As Integer
| |
− | Dim audio_rate As Integer = 44100 <FONT color=gray>' ''Imposta la frequenza che verrà usata da "SDL_mixer"''</font>
| |
− | Dim audio_buffers As Short = 4096 <FONT color=gray>' ''Determina la quantità di blocchi di memoria utilizzati per incamerare ed eseguire i campioni audio''</font>
| |
− | Dim fl, sound As Pointer
| |
− |
| |
− |
| |
− | <FONT color=gray>' ''Inizializza il dispositivo SDL audio:''</font>
| |
− | err = SDL_Init(SDL_INIT_AUDIO)
| |
− | If err < 0 Then Error.Raise("Impossibile inizializzare la libreria SDL: " & SDL_GetError())
| |
− |
| |
− | <FONT color=gray>' ''Inizializza la libreria "SDL_mixer" con specifiche impoostazioni audio:''</font>
| |
− | err = Mix_OpenAudio(audio_rate, AUDIO_S16SYS, STEREO, audio_buffers)
| |
− | If err <> 0 Then Error.Raise("Impossibile inizializzare l'audio: " & Mix_GetError())
| |
− |
| |
− |
| |
− | fl = SDL_RWFromFile("''/percorso/del/file.wav''", "rb")
| |
− | If IsNull(fl) Then Error.Raise("Errore nel caricamenteo del file !")
| |
− |
| |
− | <FONT color=gray>' ''Carica il file WAV:''</font>
| |
− | sound = Mix_LoadWAV_RW(fl, 1)
| |
− |
| |
− | <FONT color=gray>' ''Esegue il file WAV caricato, ed intercetta il canale sul quale viene eseguito.''
| |
− | ' ''Passando il valore -1 al primo argomento della funzione, il campione audio sarà eseguito sul primo canale audio disponibile:''</font>
| |
− | channel = Mix_PlayChannelTimed(-1, sound, 0, 0)
| |
− | If channel = -1 Then Error.Raise("Impossibile eseguire il file WAV: " & Mix_GetError())
| |
− |
| |
− | <FONT color=gray>' ''Attende che sia terminato il file WAV:''</font>
| |
− | While Mix_Playing(channel) <> 0
| |
− | Wait 0.01
| |
− | Wend
| |
− |
| |
− | <FONT color=gray>' ''Libera la memoria precedentemente allocata per l'esecuzione sonora:''</font>
| |
− | Mix_FreeChunk(sound)
| |
− |
| |
− | <FONT color=gray>' ''Chiude l'interfaccia audio SDL e SDL_mixer:''</font>
| |
− | Mix_CloseAudio()
| |
− |
| |
− | SDL_Quit()
| |
− |
| |
− | '''End'''
| |
− | | |
− | | |
− | ===Eseguire gli altri file audio===
| |
− | Per poter eseguire gli altri file audio (ma compreso anche lo stesso formato WAV) |[[#Note|1]]|, utilizzeremo particolarmente la libreria ''libSDL_mixer-1.2.so.0.12.0''.
| |
− | Library "libSDL-1.2:0.11.4"
| |
− |
| |
− | <FONT color=gray>' ''int SDL_Init(Uint32 flags)''</font>
| |
− | '''Private''' Extern SDL_Init(flags As Integer) As Integer
| |
− |
| |
− | <FONT color=gray>' ''char * SDL_GetError(void)''</font>
| |
− | '''Private''' Extern SDL_GetError() As String
| |
− |
| |
− |
| |
− | Library "libSDL_mixer-1.2:0.12.0"
| |
− |
| |
− | <FONT color=gray>' ''char * Mix_GetError(void)''</font>
| |
− | '''Private''' Extern Mix_GetError() As String
| |
− |
| |
− | <FONT color=gray>' ''int Mix_OpenAudio(Int frequency, Uint16 Format, Int channels, Int chunksize)''</font>
| |
− | '''Private''' Extern Mix_OpenAudio(frequency As Integer, formatSh As Short, channels As Byte, chunksize As Integer) As Integer
| |
− |
| |
− | <FONT color=gray>' ''Mix_Music *Mix_LoadMUS(const char *file)''</font>
| |
− | '''Private''' Extern Mix_LoadMUS(file As String) As Pointer
| |
− |
| |
− | <FONT color=gray>' ''int Mix_PlayMusic(Mix_Music *music, int loops)''</font>
| |
− | '''Private''' Extern Mix_PlayMusic(music As Pointer, loops As Integer) As Integer
| |
− |
| |
− |
| |
− | '''Public''' Sub Button1_Click()
| |
− |
| |
− | Dim err As Integer
| |
− | Dim audio_rate As Integer = 44100 <FONT color=gray>' ''Imposta la frequenza che verrà usata da "SDL_mixer"''</font>
| |
− | Dim audio_buffers As Short = 4096 <FONT color=gray>' ''Determina la quantità di blocchi di memoria utilizzati per incamerare ed eseguire l'audio''</font>
| |
− | Dim music As Pointer
| |
− |
| |
− |
| |
− | <FONT color=gray>' ''Inizializza il dispositivo SDL audio:''</font>
| |
− | err = SDL_Init(SDL_INIT_AUDIO)
| |
− | If err < 0 Then Error.Raise("Impossibile inizializzare la libreria SDL: " & SDL_GetError())
| |
− |
| |
− | <FONT color=gray>' ''Inizializza la libreria "SDL_mixer" con specifiche impoostazioni audio:''</font>
| |
− | err = Mix_OpenAudio(audio_rate, AUDIO_S16SYS, STEREO, audio_buffers)
| |
− | If err <> 0 Then Error.Raise("Impossibile inizializzare l'audio: " & Mix_GetError())
| |
− |
| |
− |
| |
− | <FONT color=gray>' ''Carica il file audio:''</font>
| |
− | music = Mix_LoadMUS("''/percorso/del/file_audio''")
| |
− | If IsNull(music) Then Error.Raise("Impossibile caricare il file audio: " & Mix_GetError())
| |
− |
| |
− | <FONT color=gray>' ''Esegue il file audio. Se il secondo argomento è posto a 0 il file sarà eseguito soltanto una volta.''
| |
− | ' ''Se è posto a -1 il file sarà esguito all'infinito:''</font>
| |
− | err = Mix_PlayMusic(music, 0)
| |
− | If err < 0 Then Error.Raise("Impossibile eseguire il file Midi: " & Mix_GetError())
| |
− |
| |
− | '''End'''
| |
− | | |
− | | |
− | | |
− | =Note=
| |
− | [1] I formati eseguibili sono i seguenti: | |
− | * WAVE/RIFF ( .wav )
| |
− | * AIFF ( .aiff )
| |
− | * VOC ( .voc )
| |
− | * MOD (.mod .xm .s3m .669 .it .med ed altri)
| |
− | * [[La_gestione_dei_file_MIDI_mediante_le_funzioni_esterne_del_API_di_SDL|MIDI (.mid)]]
| |
− | * OggVorbis (.ogg)
| |
− | * MP3 (.mp3)
| |
− | | |
− | | |
− | | |
− | =Riferimenti=
| |
− | * Il sito dell'[http://wiki.libsdl.org/moin.fcg/CategoryAPI API di SDL].
| |
− | * Il sito [http://www.webkinesia.com www.webkinesia.com sulla libreria SDL_mixer].
| |