Witam,
Szukałem i nic nie znalazłem. Mam problem. Otóż. Piszę programik, który z bitmap tworzy plik AVI. Problem że nie mogę napisać kodu w którym dodawany jest dźwięk (z pliku WAV)
AVIFileInit;
if AVIFileOpen(pfile, PChar(edit2.text), OF_WRITE or OF_CREATE, nil)=AVIERR_OK then
begin
FillChar(asi,sizeof(asi),0);
asi.fccType := streamtypeVIDEO;
asi.fccHandler := 0;
asi.dwScale := 1;
asi.dwRate := 4;
with listbox1.Items.Objects[0] as TBitmap do
begin
InternalGetDIBSizes(Handle,BitmapInfoSize,BitmapSize, DIB_RGB_COLORS);
BitmapInfo := AllocMem(BitmapInfoSize);
BitmapBits := AllocMem(BitmapSize);
InternalGetDIB(Handle,0,BitmapInfo^,BitmapBits^, DIB_RGB_COLORS);
end;
asi.dwSuggestedBufferSize := BitmapInfo^.biSizeImage;
asi.rcFrame.Right := BitmapInfo^.biWidth;
asi.rcFrame.Bottom := BitmapInfo^.biHeight;
if AVIFileCreateStream(pfile,ps,asi)=AVIERR_OK then
with (listbox1.Items.Objects[0] as TBitmap) do
begin
InternalGetDIB(Handle,0,BitmapInfo^,BitmapBits^, DIB_RGB_COLORS);
if AVIStreamSetFormat(ps,0,BitmapInfo,BitmapInfoSize)=AVIERR_OK then
begin
for i:=0 to listbox1.Items.Count-1 do
with (listbox1.Items.Objects[i] as TBitmap) do
begin
InternalGetDIB(Handle,0,BitmapInfo^,BitmapBits^, DIB_RGB_COLORS);
if AVIStreamWrite(ps,i,1,BitmapBits,BitmapSize,AVIIF_KEYFRAME,nul,nul)<>AVIERR_OK then
begin
raise Exception.Create('Could not add frame');
break;
end;
end;
end;
end;
FreeMem(BitmapInfo);
FreeMem(BitmapBits);
end;
AVIStreamRelease(ps);
AVIFileRelease(pfile);
AVIFileExit;
Czy ktoś wie jak to zrobić? I gdzie najlepiej umieścić kod w w/w źródle.