ça fait pareil chez vous ?
Code : Tout sélectionner
;/ Nico le 02/06/05
;/ Création d'un avi avec de l'audio
#streamtypeAUDIO = $73647561
#streamtypeVIDEO = $73646976
#ICMF_CHOOSE_KEYFRAME=1
#ICMF_CHOOSE_DATARATE=2
#AVIERR_OK=0
#AVIIF_KEYFRAME=$10
#Lib = 0
Structure bitmap24
bmiHeader.BITMAPINFOHEADER
EndStructure
Structure msvc
a.b
b.b
c.b
d.b
EndStructure
Structure AVISTREAMINFO
fccType.l
fccHandler.msvc
dwFlags.l
dwCaps.l
wPriority.w
wLanguage.w
dwScale.l
dwRate.l
dwStart.l
dwLength.l
dwInitialFrames.l
dwSuggestedBufferSize.l
dwQuality.l
dwSampleSize.l
rcFrame.RECT
dwEditCount.l
dwFormatChangeCount.l
szName.b[64]
EndStructure
Structure AVICOMPRESSOPTIONS
fccType.l
fccHandler.l
dwKeyFrameEvery.l
dwQuality.l
dwBytesPerSecond.l
dwFlags.l
*lpFormat.l
cbFormat.l
*lpParms.l
cbParms.l
dwInterleaveEvery.l
EndStructure
; Structure WAVEFORMATEX
; wFormatTag.w
; nChannels.w
; nSamplesPerSec.l
; nAvgBytesPerSec.l
; nBlockAlign.w
; wBitsPerSample.w
; cbSize.w
; EndStructure
NewList bitmap.s()
NewList memoire.l()
;/ Procédure traduite en Pure Basic
;/ d'un code écrit en c++ par son auteur Chiew Heng Wah.
Procedure AddWAV(strFileWAV.s, pfile.l)
pfileWav.IAVIFILE
siWav.AVISTREAMINFO
psWav.IAVISTREAM
psAvi.l
fmtWav.WAVEFORMATEX
If CallFunction( #Lib, "AVIFileOpen",@pfileWav, @strFileWAV, #OF_READ, #Null)=0
If CallFunction( #Lib, "AVIFileGetStream",pfileWav, @psWav, #streamtypeAUDIO, 0)=0
If CallFunction( #Lib, "AVIStreamInfo",psWav, @siWav, SizeOf(AVISTREAMINFO))=0
If CallFunction( #Lib, "AVIStreamReadFormat",psWav, 0, #Null, @lFmtSize) =0
If lFmtSize
If CallFunction( #Lib, "AVIStreamReadFormat",psWav, 0, @fmtWav, @lFmtSize)=0
lStreamLength = CallFunction( #Lib, "AVIStreamLength",psWav)
If lStreamLength
lpbData = AllocateMemory(lStreamLength)
If CallFunction( #Lib, "AVIStreamRead",psWav, 0, lStreamLength, lpbData, lStreamLength, #Null, #Null)=0
If CallFunction( #Lib, "AVIFileCreateStream",pfile, @psAvi, @siWav)=0
If CallFunction( #Lib, "AVIStreamSetFormat",psAvi, 0, @fmtWav, lFmtSize)=0
If CallFunction( #Lib, "AVIStreamWrite",psAvi, 0, lStreamLength, lpbData, lStreamLength, #AVIIF_KEYFRAME, #Null, #Null)=0
val.b=1
EndIf
EndIf
CallFunction( #Lib, "AVIStreamRelease",psAvi)
EndIf
EndIf
FreeMemory(lpbData)
EndIf
EndIf
EndIf
EndIf
EndIf
CallFunction( #Lib, "AVIStreamRelease",psWav)
EndIf
CallFunction( #Lib, "AVIFileRelease",pfileWav)
EndIf
ProcedureReturn val
EndProcedure
Fichier.s = OpenFileRequester("Sélection multiple des Fichiers Bitmaps", "", "Fichiers BMP|*.bmp", 0, #PB_Requester_MultiSelection)
If Fichier
Debug Fichier
AddElement(bitmap())
bitmap()= Fichier
Repeat
Fichier = NextSelectedFileName()
If Fichier
AddElement(bitmap())
bitmap()= Fichier
Debug Fichier
EndIf
Until Fichier = ""
EndIf
ForEach bitmap()
If ReadFile(0, bitmap())
FileSeek(0,SizeOf(BITMAPFILEHEADER))
bmi.bitmap24
ReadData(0,@bmi, SizeOf(bitmap24))
If bmi\bmiHeader\biWidth
If bmi\bmiHeader\biHeight
If bmi\bmiHeader\biBitCount
If bmi\bmiHeader\bisizeimage=0
bmi\bmiHeader\bisizeimage=Lof(0)-54
EndIf
FileSeek(0,1078)
AddElement(memoire())
memoire() =GlobalAlloc_(#GMEM_FIXED|#GMEM_ZEROINIT, bmi\bmiHeader\bisizeimage)
ReadData(0,memoire(), bmi\bmiHeader\bisizeimage)
EndIf
EndIf
EndIf
CloseFile(0)
EndIf
Next
If OpenLibrary ( #Lib , "AVIFIL32.DLL")
CallFunction ( #Lib, "AVIFileInit" )
avifile.s = SaveFileRequester ( "Nom du fichier Avi à enregistrer", "", "Video|*.avi", 0 )
If GetExtensionPart(avifile)=""
avifile=avifile+".avi"
EndIf
Debug avifile
If CallFunction( #Lib, "AVIFileOpen", @pAVIFile.IAVIFILE, @avifile, (#OF_WRITE | #OF_CREATE), 0 )=0
strhdr.AVISTREAMINFO
strhdr\fccType = #streamtypeVIDEO
strhdr\fccHandler\a = $6D
strhdr\fccHandler\b = $73
strhdr\fccHandler\c = $76
strhdr\fccHandler\d = $63
strhdr\dwScale = 1 ;Nb de frames/secondes
strhdr\dwRate = 4 ;( 1 à 30)
strhdr\dwSuggestedBufferSize = bmi\bmiHeader\biSize
If SetRect_(@strhdr\rcFrame, 0, 0, bmi\bmiHeader\biWidth, bmi\bmiHeader\biHeight) <>0
If CallFunction( #Lib, "AVIFileCreateStream", pAVIFile, @pAVIStream, @strhdr) =0
opts.AVICOMPRESSOPTIONS
Dim aopts(0)
aopts(0)=@opts
If CallFunction( #Lib, "AVISaveOptions", 0, #ICMF_CHOOSE_KEYFRAME | #ICMF_CHOOSE_DATARATE, 1, @pAVIStream, @aopts(0)) =1
If CallFunction( #Lib, "AVIMakeCompressedStream", @pAVICompressed, pAVIStream, aopts(0), 0)=#AVIERR_OK
If CallFunction( #Lib, "AVIStreamSetFormat", pAVICompressed, 0, @bmi, SizeOf(bitmap24)) =0
ForEach memoire()
If memoire()
If CallFunction( #Lib, "AVIStreamWrite", pAVICompressed, index, 1, memoire() , bmi\bmiHeader\bisizeimage, #AVIIF_KEYFRAME, 0,0) =0
index=index+1
EndIf
EndIf
Next
EndIf
CallFunction( #Lib, "AVIStreamRelease", pAVICompressed)
EndIf
EndIf
CallFunction( #Lib, "AVIStreamRelease", pAVIStream )
EndIf
;------------------------ Inclure le son -----------------------------------------
strFileWAV2.s = OpenFileRequester("Sélection d'un Fichier Audio", "", "Fichiers Wav|*.wav", 0)
If AddWAV(strFileWAV2, pAVIFile)
a$="Le fichier avi créé contient un fichier audio."
Else
a$="Le fichier audio n'a pu être créé."
EndIf
;----------------------------------------
EndIf
CallFunction( #Lib, "AVIFileRelease", pAVIFile)
EndIf
CallFunction( #Lib, "AVIFileExit" )
CloseLibrary( #Lib )
ForEach memoire()
GlobalFree_(memoire())
Next
MessageRequester("Info","Nombre de Frames enregistrées: "+Str(index)+Chr(13)+a$)
EndIf