Re: Конвертация wav в mp3
От: ZEF Россия  
Дата: 21.01.08 21:06
Оценка:
Здравствуйте, wirt, Вы писали:

W>Народ!

W>Пдскажите пожалуйска, как реализовать программно конвертацию wav в mp3, какие библиотеки, кодеки использывать (бесплатные). Может есть где-то пример с исходниками?
W>Буду очень признателен.

W>Спасибо.


Попробуйте lame.dll (библиотека бесплатная, найти в итнернете не проблема),
вот хэдер для неё:


unit Lame_dll;
{Delphi conversion for lame.dll 3.8x
 Lame is freeware MP3 encoder
 Full source (in C++) available from http://www.sulaco.org/mp3}

interface

uses Windows;

const
     BE_CONFIG_MP3  = 0;
     BE_CONFIG_LAME = 256;

type
    THBESTREAM = ULONG;
    PHBESTREAM = ^THBESTREAM;
    TBEERR     = ULONG;
    PSHORT      = ^SHORT;
    PBYTE       = ^Byte;
const

    BE_ERR_SUCCESSFUL                = $00000000;
    BE_ERR_INVALID_FORMAT         = $00000001;
    BE_ERR_INVALID_FORMAT_PARAMETERS = $00000002;
    BE_ERR_NO_MORE_HANDLES         = $00000003;
    BE_ERR_INVALID_HANDLE         = $00000004;
    BE_ERR_BUFFER_TOO_SMALL         = $00000005;

    BE_MAX_HOMEPAGE = 256;

    BE_MP3_MODE_STEREO      = 0;
    BE_MP3_MODE_JSTEREO     = 1;
    BE_MP3_MODE_DUALCHANNEL = 2;
    BE_MP3_MODE_MONO        = 3;

    MPEG1 = 1;
    MPEG2 = 0;



type

  MPEG_QUALITY = (NORMAL_QUALITY, LOW_QUALITY, HIGH_QUALITY, VOICE_QUALITY);

  PLHV1 = ^TLHV1;
  TLHV1 = packed record
    dwStructVersion : DWORD;
    dwStructSize    : DWORD;

    dwSampleRate    : DWORD;
    dwReSampleRate  : DWORD;
    nMode        : INTEGER;
    dwBitrate       : DWORD;
    dwMaxBitrate    : DWORD;
    nQuality        : DWORD; {MPEG_QUALITY ;}
    dwMpegVersion   : DWORD;
    dwPsyModel      : DWORD;
    dwEmphasis      : DWORD;

    bPrivate        : BOOL;
    bCRC        : BOOL;
    bCopyright        : BOOL;
    bOriginal       : BOOL;

    bWriteVBRHeader : BOOL;
    bEnableVBR        : BOOL;
    nVBRQuality     : integer;

    btReserved      : array [1..255] of byte;
end;


  PLameMP3 = ^TLameMP3;
  TLameMP3 = packed record
    dwSampleRate : DWORD;  
    // 48000, 44100 and 32000 allowed
    byMode       : Byte;  
    // BE_MP3_MODE_STEREO, BE_MP3_MODE_DUALCHANNEL, BE_MP3_MODE_MONO
    wBitrate     : Word;   
    // 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256 and 320 allowed
    bPrivate,
    bCRC,
    bCopyright,
    bOriginal    : BOOLean;
  end;

  PAAC = ^TAAC;
  TAAC = packed record
    dwSampleRate : DWORD;
    byMode : Byte;
    wBitrate : Word;
    byEncodingMethod : Byte;
  end;


  PFormat = ^TFormat;
  TFormat = packed record
    case dwConfig : DWord of 
      BE_CONFIG_MP3 : (MP3 : TLameMP3);
      BE_CONFIG_LAME : (LHV1 : TLHV1);
  end;

  PBECONFIG = ^TBECONFIG;
  TBECONFIG = packed record
    Format : TFormat;
  end;

  PBEVersion = ^TBEVersion;
  TBEVersion = packed record
    // BladeEnc DLL Version number
    byDLLMajorVersion,
    byDLLMinorVersion,
    // BladeEnc Engine Version Number
    byMajorVersion,
    byMinorVersion,
    // DLL Release date
    byDay,
    byMonth : Byte;
    wYear : Word;    
    zHomepage : Array[0..BE_MAX_HOMEPAGE] of char;
  end;

  function beInitStream(var pbeConfig : TBEConfig; var dwSamples : DWORD; var dwBufferSize : DWORD; var phbeStream : THBESTREAM) : TBeErr; cdecl; external 'lame.dll';
  (*
    pbeConfig    = Type of mp3
    dwSamples    = Maximum number of samples to encode
    dwBufferSize = Maximum mp3 buffer size
    hbeStream    = BladeEnc-stream
  *)
  function beEncodeChunk(hbeStream : THBEStream; nSamples : DWORD; pSamples : PShort;  pOutput : PByte; var pdwOutput : DWORD) : TBeErr; cdecl; external 'lame.dll';
  (*
    hbeStream    =
    nSamples     = Number of samples to encode
    pSamples     = Pointer to buffer with Samples to encode
    pOutput     = Pointer to buffer to recieve encoded samples
    pdwOutput     = number of samples encoded
  *)
  function beDeinitStream(hbeStream : THBEStream;  pOutput : PByte; var pdwOutput : DWORD) : TBeErr; cdecl; external 'lame.dll';
  (*
    hbeStream    =
    pOutput     = Pointer to buffer holding encoded samples
    pdwOutput     = Number of samples to write
  *)
  function beCloseStream(hbeStream : THBEStream) : TBeErr; cdecl; external 'lame.dll';
  procedure beVersion(var pbeVersion : TBEVersion); cdecl; external 'lame.dll';

implementation

end.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.