Конференция "Media" » fmod
 
  • Efir (20.03.08 19:45) [20]
    Есть кое какие ошибки. А так работает?
    function EncodeToMP3(InFile:string; OutFile:string):boolean;
    var
    NumSamples:DWORD;
    InBufSize: DWORD;
    OutBufSize:DWORD;
    BufWave:PSHORT;
    BufMP3: PBYTE;
    BassChan:HSTREAM;
    beStream:THBESTREAM;
    beConfig:TBECONFIG;
    fWrite:TFileStream;
    SizeOfRead:DWORD;
    Encoded: DWORD;
    ErrRes:TBeErr;
    i, WAVLeng:DWORD;
    begin
    Result:=false;

    BassChan:=BASS_StreamCreateFile(false, PChar(InFile), 0, 0, BASS_STREAM_DECODE);
    if BassChan=0 then begin
      BASS_StreamFree(BassChan);
      Exit;
    end;

    FillChar(beConfig, SizeOf(beConfig), 0);
    beConfig.Format.dwConfig:=BE_CONFIG_LAME;
    beConfig.Format.LHV1.dwStructVersion:=1;
    beConfig.Format.LHV1.dwStructSize:=SizeOf(beConfig);
    beConfig.Format.LHV1.dwSampleRate:=44100;
    beConfig.Format.LHV1.dwReSampleRate:=0;
    beConfig.Format.LHV1.nMode:=BE_MP3_MODE_STEREO;
    beConfig.Format.LHV1.dwBitrate:=192;
    beConfig.Format.LHV1.dwMaxBitrate:=320;
    beConfig.Format.LHV1.nPreset:=LQP_HIGH_QUALITY;
    beConfig.Format.LHV1.dwMpegVersion:=MPEG1;

    WAVLeng:=BASS_ChannelGetLength(BassChan);

    ErrRes:=beInitStream(beConfig, NumSamples, OutBufSize, beStream);
    if ErrRes<>BE_ERR_SUCCESSFUL then begin
      beCloseStream(beStream);
      BASS_StreamFree(BassChan);
      Exit;
    end;

    InBufSize:=NumSamples*4;

    fWrite:=TFileStream.Create(OutFile, fmCreate);
    try
      BufWave:=AllocMem(InBufSize);
      BufMP3:=AllocMem(OutBufSize);
      try
        i:=0;
        while i<>WAVLeng do begin
          if i+InBufSize<WAVLeng then SizeOfRead:=InBufSize
            else SizeOfRead:=WAVLeng-i;

          BASS_ChannelGetData(BassChan, BufWave, SizeOfRead);
          ErrRes:=beEncodeChunk(beStream, SizeOfRead div 2, BufWave, BufMP3, Encoded);
          if ErrRes<>BE_ERR_SUCCESSFUL then Exit;

          fWrite.WriteBuffer(BufMP3^, Encoded);
          i:=i+SizeOfRead;
        end;

        ErrRes:=beDeinitStream(beStream, BufMP3, Encoded);
        if ErrRes<>BE_ERR_SUCCESSFUL then Exit;

        fWrite.WriteBuffer(BufMP3^, Encoded);
      finally
        fWrite.Free;
        BASS_StreamFree(BassChan);
        beCloseStream(beStream);
      end;
    finally
      FreeMem(BufWave);
      FreeMem(BufMP3);
    end;
    Result:=true;
    end;

  • Efir (20.03.08 19:50) [21]
    И midi вроде норм. кодирует.
  • VoVan © (20.03.08 21:45) [22]
    Ругается на  beConfig.Format.dwConfig:=BE_CONFIG_LAME;
    исправил на  beConfig.dwConfig:=BE_CONFIG_LAME;

    и все равно выкидывает на
     fWrite.WriteBuffer(BufMP3^, Encoded);

    А у тебя работает нормально?
  • VoVan © (20.03.08 22:50) [23]
    После вызова
        ErrRes:=beEncodeChunk(beStream, SizeOfRead div 2, BufWave, BufMP3, Encoded);
    переменные
        InBufSize и OutBufSize принимают какие-то странно большие значения
        Encoded при каждом новом запуске проги разные
  • Efir (20.03.08 22:51) [24]
    Да. А у тебя какие заголовочные файлы к lame_enc.dll, от TLame?
  • VoVan © (20.03.08 23:15) [25]
    чуть другие. А откуда скачать от TLame?
  • Efir (20.03.08 23:23) [26]
    Можно здесь http://www.delphilab.ru/content/view/76/75/

    И ещё, вместе с исходниками Lame есть пример и для Delphi с заголовочным файлом, называется mp3export.pas

    Исходники Lame - http://sourceforge.net/project/showfiles.php?group_id=290&package_id=309
  • Efir (20.03.08 23:27) [27]
    Я брал инфу для заголовочных файлов из исходников CDex и TLame.
  • VoVan © (20.03.08 23:56) [28]
    вот у меня как раз был хедер с mp3export.pas.
    Взял от TLame, теперь заработало. Огромное спасибо.
    А в случае с миди, достаточно просто подключить плагин, или надо еще в начале выходного mp3-файла что-то прописывать?
  • Efir (21.03.08 00:40) [29]
    Достаточно просто подключить плагин. По крайней мере я попробовал кодировать с midi никаких проблем не вызвало.
  • VoVan © (21.03.08 01:02) [30]
    А у меня вот какая проблема: при кодированиии вав все отлично, а миди вроде кодируется тоже нормально, но когда я его воспроизвожу звука почему-то нет.
 
Конференция "Media" » fmod
Есть новые Нет новых   [133929   +472][b:0][p:0.002]