Code : Tout sélectionner
#useMemLoad = 0 ; 0 = filecallbacks
; 1 = memorycallbacks
CompilerIf #useMemLoad=1
;
;----MEMORY CALLBACKS---
;
Structure MEMFILE
length.l
pos.l
mdata.l
EndStructure
memfile.MEMFILE
CatchSound(0, ?music)
;
Procedure.l musicopenmem(name.s)
Shared memfile
memfile\mdata = Val(name)
memfile\length = ?musicend - ?music
memfile\pos = 0
ProcedureReturn memfile
EndProcedure
;
Procedure.l musicclosemem(handle)
; FreeMemory(0)
EndProcedure
;
Procedure.l musicreadmem(buffer.l, size.l, handle.l)
Shared memfile
CopyMemory(memfile\mdata+memfile\pos, buffer, size)
memfile\pos + size ; update filepointer position
ProcedureReturn size
EndProcedure
;
Procedure musicseekmem(handle.l, pos.l, mode.l)
Shared memfile
Select mode
Case #SEEK_SET
memfile\pos = pos
Case #SEEK_CUR
memfile\pos+pos
EndSelect
If memfile\pos > memfile\length
memfile\pos = memfile\length
EndIf
EndProcedure
;
Procedure.l musictellmem(handle.l)
Shared memfile
ProcedureReturn memfile\pos
EndProcedure
CompilerElse
;
;----FILE CALLBACKS---
;
Procedure.l musicopen(name.s)
Shared filptr
fileptr = ReadFile(0, name.s)
ProcedureReturn fileptr
EndProcedure
;
Procedure musicclose(handle.l)
Shared fileptr
CloseFile(0)
EndProcedure
;
Procedure.l musicread(buffer.l, size.l, handle.l)
ProcedureReturn ReadData(buffer, size)
EndProcedure
;
Procedure musicseek(handle.l, pos.l, mode.l)
Select mode
Case #SEEK_SET
FileSeek(pos)
Case #SEEK_CUR
FileSeek(Loc()+pos)
EndSelect
EndProcedure
;
Procedure.l musictell(handle.l)
ProcedureReturn Loc()
EndProcedure
CompilerEndIf
;
;
;
CompilerIf #useMemLoad = 1
FSOUND_File_SetCallbacks(@musicopenmem(), @musicclosemem(), @musicreadmem(), @musicseekmem(), @musictellmem())
music = FMUSIC_LoadSong("", #Null)
CompilerElse
FSOUND_File_SetCallbacks(@musicopen(), @musicclose(), @musicread(), @musicseek(), @musictell())
musicfile$ = ProgramParameter()
music = FMUSIC_LoadSong(musicfile$, #Null)
CompilerEndIf
If music
FMUSIC_PlaySong(music)
EndIf
FMUSIC_FreeSong(mod)
CompilerIf #useMemLoad = 1
DataSection
mod:
IncludeBinary "cc.xm"
modend:
EndDataSection
CompilerEndIf
merci d'avance de votre aide
