Конференция "Media" » Алгоритм преобразования мп3 [D7, WinXP]
 
  • SysError (18.01.08 20:11) [0]
    Опишите пожалуйсто как преобразовать мп3 файл
    высокого битрейта в более низкий..
    Хотелось бы использовать lame_enc.dll
    Примеры кода только приветствуются)
  • Dimaxx © (20.01.08 09:38) [1]
    Перекодированием -> потеря качества...
  • antonn © (20.01.08 12:28) [2]

    > Перекодированием -> потеря качества...

    перекодированием -> уменьшаем размер.
  • SysError (20.01.08 12:52) [3]
    это мы в курсе,,,а сам алгоритм плз
  • Dimaxx © (20.01.08 14:06) [4]

    > перекодированием -> уменьшаем размер.

    Перекодируя из 256 kbps в 128 ты уменьшаешь не только размер, но и теряешь качество, ибо звук уже был обработан при кодировании. А ты его повторно обрабатываешь.
  • ZEF © (22.01.08 00:17) [5]
    MP3 -> WAV -> MP3

    MP3 -> WAV посредством mp3dec.dll
    (библиотека бесплатная, найти в итнернете не проблема),
    вот хэдер для неё:

    unit Mp3decDll;

    interface

    uses Windows;

    const
      MPGLIB_ERROR     = -1;
      MPGLIB_OK        = 0;
      MPGLIB_NEED_MORE = 1;

    type
      MPGLIB_ERR = integer;
      H_STREAM  = integer;
    var
      MpgLib_OpenStream  : function(var hStream : H_STREAM) : MPGLIB_ERR;
                                                     cdecl;
      MpgLib_DecodeChunk : function(hStream : H_STREAM;
                                    pInStream : PBYTE;
                                    nInSize : integer;
                                    pOutStream : PBYTE;
                                    nOutSize : integer;
                                    var pnOutBytes : integer) : MPGLIB_ERR;
                                                     cdecl;
      MpgLib_CloseStream : function(hStream : H_STREAM) : MPGLIB_ERR;
                                                     cdecl;
      MpgLib_Version     : procedure(lpszVersionString : PChar; nSize : integer);
                                                     cdecl;
      MpgLib_GetBitRate  : function  : integer; cdecl;
      MpgLib_Flush : function  : integer; cdecl;  

    function RequestDLLLoading: Boolean;

    implementation

    var
        MPGLibDLL : THANDLE = 0;

    function RequestDLLLoading: Boolean;
    begin
      if (MPGLibDLL = 0) then
      begin
         MPGLibDLL := LoadLibrary('Mp3dec.dll');
         if (MPGLibDLL <> 0) then
         begin
            @MpgLib_OpenStream   := GetProcAddress(MPGLibDLL, 'MpgLib_OpenStream');
            @MpgLib_DecodeChunk  := GetProcAddress(MPGLibDLL, 'MpgLib_DecodeChunk');
            @MpgLib_CloseStream  := GetProcAddress(MPGLibDLL, 'MpgLib_CloseStream');
            @MpgLib_Version      := GetProcAddress(MPGLibDLL, 'MpgLib_Version');
            @MpgLib_GetBitRate   := GetProcAddress(MPGLibDLL, 'MpgLib_GetBitRate');
            @MpgLib_Flush        := GetProcAddress(MPGLibDLL, 'MpgLib_Flush');
         end;
      end;
      Result := (MPGLibDLL <> 0);
    end;

    initialization
    finalization
      if (MPGLibDLL<>0) then FreeLibrary(MPGLibDLL);

    end.




    WAV -> MP3

    Попробуйте 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.

  • SysError (22.01.08 20:22) [6]
    Спаасибо, буду разбираться.
  • Анасимус =) (30.09.08 02:58) [7]
    И от Меня спасибо. Хорошая статья
  • ilyas09 (02.01.11 01:06) [8]
    Мне необходимо из формата mp3 получить Wav.
    Очень интересует описанная DEF-ом DLL ка для декодирования MP3, но найти её в инете оказалось не так то просто.
    Скачал две dll с именем "mp3dec.dll" (размером 118 784 байт и 202 240 байт), но обе они имеют совершенно другие функции.
    Может у кого-то завалялась описанная Dll, или есть ссылка на описания другого варианта?
  • ilyas09 (02.01.11 17:06) [9]
    Нашёл DDL-ку :)
    Вот здесь: http://serdis.dis.ulpgc.es/~a013775/asignaturas/it-dih/2%20Material/Componentes/toggplayer/
    Только она там называется "MpgLib.DLL"
  • babanyukv (19.11.13 22:00) [10]
    Легко преобразовывается.
    _____________________
    http://mebpoint.com/catalog/bedrooms/
 
Конференция "Media" » Алгоритм преобразования мп3 [D7, WinXP]
Есть новые Нет новых   [134427   +38][b:0][p:0.005]