Dodawanie ścieżki dzwiękowej do AVI

0

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.

0

nikt nie wie?

0

A nie jest przypadkiem tak, że tworzysz dwa strumienie (audio i video), a później łączysz je funkcją AVISave???

0

Tylko jak to zrobić?

streamaudio.fccType := streamtypeAudio;

nie kompiluje :(

0

u mnie w nagłówku (vfw.h) to jest:

#define streamtypeAUDIO         mmioFOURCC('a', 'u', 'd', 's')

PS. dziwne, że u ciebie tego nie ma(?). Poszukaj u siebie w plikach definicji streamtypeVIDEO. Obok powinna być definicja streamtypeAUDIO.

1 użytkowników online, w tym zalogowanych: 0, gości: 1