Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.01.2017, 21:14   #21
АНАТОЛИЙ249
Пользователь
 
Регистрация: 05.02.2007
Сообщений: 91
По умолчанию

а для разжатия я не нашел код , я его не разжимаю а отправляю сразу в waweout, заполнить правильно нужно только waweformatex под mp3.
на примере вот этого делал.

С утечкой памяти работает уже минут 30 не затыкается все работает нормально только память сьела 100мб. почему так много я думаю что средствами windows он разжимает или конвертирует мp3 в wav, точно не знаю.

Спасибо за ответы и помощь.
Вложения
Тип файла: zip ACM MP3-PCM Tester.zip (29.0 Кб, 17 просмотров)

Последний раз редактировалось АНАТОЛИЙ249; 03.01.2017 в 21:19.
АНАТОЛИЙ249 вне форума Ответить с цитированием
Старый 04.01.2017, 09:43   #22
АНАТОЛИЙ249
Пользователь
 
Регистрация: 05.02.2007
Сообщений: 91
По умолчанию

Нашел еще сорцы для работы с mp3
Вложения
Тип файла: zip initial-src.zip (119.9 Кб, 16 просмотров)
АНАТОЛИЙ249 вне форума Ответить с цитированием
Старый 04.01.2017, 12:28   #23
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Сейчас тоже пытаюсь сделать конвертацию на лету в mp3 и обратно без файла

нашел два кода
этот конвертирует работает

Код:
unit Lame_dll;   //WAV -> MP3
{Delphi conversion for lame

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_enc.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_enc.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_enc.dll';
 (*
   hbeStream    =
   pOutput     = Pointer to buffer holding encoded samples
   pdwOutput     = Number of samples to write
 *)
 function beCloseStream(hbeStream : THBEStream) : TBeErr; cdecl; external 'lame_enc.dll';
 procedure beVersion(var pbeVersion : TBEVersion); cdecl; external 'lame_enc.dll';

implementation

end.
А этот пока не работает ругается

Код:
unit Mp3decDll;  //MP3 -> WAV

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('mpglib.dll'{'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.
а вот код применения первого
Код:
var
 NumSamples, OutBufSize, beStream: Dword;
bexStream: integer;

procedure TForm1.FormCreate(Sender: TObject);
var
 beConfig : TBEConfig;
 ErrRes:DWORD;
begin
FillChar(beConfig, SizeOf(TBEConfig), 0);
beConfig.Format.dwConfig:=BE_CONFIG_MP3;
beConfig.Format.MP3.dwSampleRate:= 44100;
beConfig.Format.MP3.byMode:=BE_MP3_MODE_STEREO;
beConfig.Format.MP3.wBitrate:= 32;
ErrRes:= Lame_dll.beInitStream(beConfig, NumSamples, OutBufSize, beStream);
if ErrRes<>BE_ERR_SUCCESSFUL then
beCloseStream(beStream);

// на второй ругается
Mp3decDll.RequestDLLLoading;
Mp3decDll.MpgLib_OpenStream(bexStream);
end;

// В обратном вызове конвертируем в mp3
procedure TForm1.WaveInCallback(Sender: TObject; data: pointer; size: integer);
var
Buf: array of char;
ErrRes: Dword;
Encoded: DWORD;
begin
setLength(Buf, $FFFF);
ErrRes:= beEncodeChunk(beStream, Size , data, Pointer(Buf), Encoded);
if ErrRes<>BE_ERR_SUCCESSFUL then Exit;

end;
Нашел программу кому интересно которая смотрит все в файлах с помощью нее получилось посмотреть функции в Dll
http://www.dependencywalker.com

Последний раз редактировалось Aliens_wolfs; 04.01.2017 в 13:04.
Aliens_wolfs вне форума Ответить с цитированием
Старый 04.01.2017, 13:35   #24
АНАТОЛИЙ249
Пользователь
 
Регистрация: 05.02.2007
Сообщений: 91
По умолчанию

Нашел вроде бы работает 1час не вылетает при сворачивании окон или разворачивании и утечки памяти нет, добавил sleep(100) в эту процедуру



procedure WaveOutProc(HWO: HWAVEOUT; uMsg: UINT;
dwInstance, dwParam1, dwParam2: DWORD); stdcall;
var
iError: Cardinal;
FPWavehdr: PWavehdr;
begin
with TBSTH(dwInstance) do
try
if (uMsg = WOM_DONE ) then
begin
FPWavehdr := PWavehdr(dwParam1);
iError := WaveOutUnprepareHeader(HWaveOut1^, FPWavehdr, SizeOf(TWaveHdr));
if ierror=0 then
begin
GlobalUnlock(DWORD(FPWavehdr));
GlobalFree(DWORD(FPWavehdr));
end;
sleep(100);
end;
except
on E: Exception do

end;
end;


Спасибо огромное что помогаете в разработке программ,за ответы и советы.
АНАТОЛИЙ249 вне форума Ответить с цитированием
Старый 04.01.2017, 13:50   #25
АНАТОЛИЙ249
Пользователь
 
Регистрация: 05.02.2007
Сообщений: 91
По умолчанию

Вот то что я нашел на просторах интернета может кому пригодится.
Вложения
Тип файла: zip LibMp3Delphi.zip (333.8 Кб, 21 просмотров)
Тип файла: rar MP3Dissect.rar (247.6 Кб, 19 просмотров)
Тип файла: zip mpg123-1.2.0-x86.zip (137.6 Кб, 18 просмотров)
Тип файла: zip mpglibdll.zip (57.8 Кб, 18 просмотров)
Тип файла: zip taudioio.zip (833.9 Кб, 18 просмотров)
Тип файла: rar TAudioConverter-master.rar (2.94 Мб, 19 просмотров)
АНАТОЛИЙ249 вне форума Ответить с цитированием
Старый 04.01.2017, 14:19   #26
АНАТОЛИЙ249
Пользователь
 
Регистрация: 05.02.2007
Сообщений: 91
По умолчанию

Проверил работает только для одного клиента , если 2 и более начинает вываливаться. Наверно надо искать как mp3 конвертировать в wav на лету . Тоже искал пробовал , но так и не сделал , вроде пишут что есть компонент ACS но не нашел в интернете для них DLL. сам компонент вложил там есть именно конвертирование MP3->Wav.


Cпасибо за ответы и помощь.
Вложения
Тип файла: zip acs22_1.zip (428.9 Кб, 16 просмотров)
АНАТОЛИЙ249 вне форума Ответить с цитированием
Старый 04.01.2017, 14:52   #27
АНАТОЛИЙ249
Пользователь
 
Регистрация: 05.02.2007
Сообщений: 91
По умолчанию

Вот еще может поможет .
Вложения
Тип файла: zip Test_mpg123_to_WAV_07.zip (581.6 Кб, 16 просмотров)
АНАТОЛИЙ249 вне форума Ответить с цитированием
Старый 04.01.2017, 15:09   #28
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Пример последний интересный, из него попробую из MP3->Wav сделать.
Aliens_wolfs вне форума Ответить с цитированием
Старый 04.01.2017, 15:12   #29
АНАТОЛИЙ249
Пользователь
 
Регистрация: 05.02.2007
Сообщений: 91
По умолчанию

Вот для этой библиотеки не мог найти dll по моему 1 какую то весь нет переискал и везде пишут что тоже не могут найти dll.

Вот название DLL 'mp3decdr.dll' которой нет в NEWAC.
Цитата:
unit mp3decdr;

interface

uses
SysUtils, Windows;

const

Libmp3decdrPath = 'mp3decdr.dll';

SEEK_CUR = 1;
SEEK_END = 2;
SEEK_SET = 0;

MP3DEC_RETCODE_OK = 0;
MP3DEC_RETCODE_INVALID_HANDLE = 1;
MP3DEC_RETCODE_BAD_STATE = 2;
MP3DEC_RETCODE_INVALID_PARAMETERS = 3;
MP3DEC_RETCODE_NOT_MPEG_STREAM = 4;
MP3DEC_RETCODE_SEEK_FAILED = 5;
MP3DEC_RETCODE_UNKNOWN = 6;

MP3DEC_CONFIG_AUTO = 0;
MP3DEC_CONFIG_MONO = 1;
MP3DEC_CONFIG_STEREO = 2;
MP3DEC_CONFIG_CHANNEL1 = 3;
MP3DEC_CONFIG_CHANNEL2 = 4;

MP3DEC_CONFIG_16BIT = 0;
MP3DEC_CONFIG_24BIT = 1;
MP3DEC_CONFIG_32BIT = 2;
MP3DEC_CONFIG_FLOAT = 3;

MP3DEC_SEEK_BYTES = 0;
MP3DEC_SEEK_SAMPLES = 1;
MP3DEC_SEEK_SECONDS = 2;


type

mp3dec_t = Pointer;
mp3dec_config_t = Pointer;

// callbacks
seek_func = function(cb_data : Pointer; offset : Integer; origin : Integer) : Integer; cdecl;
read_func = function(cb_data : Pointer; buf : Pointer; bufsize : Integer) : Integer; cdecl;
close_func = function(cb_data : Pointer) : Integer; cdecl;

mp3dec_init_t = function : mp3dec_t; cdecl;
mp3dec_init_file_t = function(mp3dec : mp3dec_t; cb_data : Pointer; seek : seek_func; read : read_func; close : close_func; length : Int64; nogap : Integer) : Integer; cdecl;
mp3dec_uninit_t = function(mp3dec : mp3dec_t) : Integer; cdecl;
mp3dec_reset_t = function(mp3dec : mp3dec_t) : Integer; cdecl;
mp3dec_configure_t = function(mp3dec : mp3dec_t; cfg : mp3dec_config_t) : Integer; cdecl;
// int mp3dec_get_info(mp3dec_t mp3dec, void *info, int info_type);
mp3dec_decode_t = function(mp3dec : mp3dec_t; buf : PByte; bufsize : LongWord; var used : LongWord) : Integer; cdecl;
mp3dec_seek_t = function(mp3dec : mp3dec_t; pos : Int64; units : Integer) : Integer; cdecl;
mp3dec_error_t = function(code : Integer) : PChar; cdecl;
mp3dec_set_config_t = function(mp3dec : mp3dec_t; mode, format : Integer) : Integer; cdecl;
mp3dec_get_stream_info_t = function(mp3dec : mp3dec_t; var channels : Integer; var sample_rate : Integer; var sample_size : Integer; var samples : Integer) : Integer; cdecl;
mp3dec_get_file_info_t = function(mp3dec : mp3dec_t; var bitrate : Integer; var layer : Integer) : Integer; cdecl;

var

Libmp3decdrLoaded : Boolean = False;

mp3dec_init : mp3dec_init_t;
mp3dec_init_file : mp3dec_init_file_t;
mp3dec_uninit : mp3dec_uninit_t;
mp3dec_reset : mp3dec_reset_t;
mp3dec_configure : mp3dec_configure_t;
mp3dec_decode : mp3dec_decode_t;
mp3dec_seek : mp3dec_seek_t;
mp3dec_error : mp3dec_error_t;
mp3dec_set_config : mp3dec_set_config_t;
mp3dec_get_stream_info : mp3dec_get_stream_info_t;
mp3dec_get_file_info : mp3dec_get_file_info_t;


implementation

var
Libhandle : HMODULE;

initialization

Libhandle := LoadLibraryEx(Libmp3decdrPath, 0, 0);
if Libhandle <> 0 then
begin
Libmp3decdrLoaded := True;
mp3dec_init := GetProcAddress(Libhandle, 'mp3dec_init');
mp3dec_init_file := GetProcAddress(Libhandle, 'mp3dec_init_file');
mp3dec_uninit := GetProcAddress(Libhandle, 'mp3dec_uninit');
mp3dec_reset := GetProcAddress(Libhandle, 'mp3dec_reset');
mp3dec_configure := GetProcAddress(Libhandle, 'mp3dec_configure');
mp3dec_decode := GetProcAddress(Libhandle, 'mp3dec_decode');
mp3dec_seek := GetProcAddress(Libhandle, 'mp3dec_seek');
mp3dec_error := GetProcAddress(Libhandle, 'mp3dec_error');
mp3dec_set_config := GetProcAddress(Libhandle, 'mp3dec_set_config');
mp3dec_get_stream_info := GetProcAddress(Libhandle, 'mp3dec_get_stream_info');
mp3dec_get_file_info := GetProcAddress(Libhandle, 'mp3dec_get_file_info');
end;

finalization

if libhandle <> 0 then FreeLibrary(Libhandle);


end.
Вложения
Тип файла: zip newac.zip (498.6 Кб, 17 просмотров)

Последний раз редактировалось АНАТОЛИЙ249; 04.01.2017 в 15:25.
АНАТОЛИЙ249 вне форума Ответить с цитированием
Старый 04.01.2017, 17:21   #30
АНАТОЛИЙ249
Пользователь
 
Регистрация: 05.02.2007
Сообщений: 91
По умолчанию

Вот еще MPGlib_Dll
Вложения
Тип файла: zip Mglib_DLL.zip (453.6 Кб, 17 просмотров)
Тип файла: zip OpenALMp3Play.zip (1.7 Кб, 17 просмотров)

Последний раз редактировалось АНАТОЛИЙ249; 04.01.2017 в 17:51.
АНАТОЛИЙ249 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[РЕШЕНО] bass.dll, Программа получает мп3 файл с сервера и воспроизводит его, как его сохранить в файл? NEoMASTERR Общие вопросы Delphi 0 25.01.2016 11:30
BASS.DLL и захват потока. Twister901 Visual C++ 1 15.01.2013 10:54
Bass.dll не воспроизводит m3u demiancz Мультимедиа в Delphi 19 30.10.2012 08:46
bass.dll Скорость мать его потока... Дворник Мультимедиа в Delphi 5 24.08.2010 09:37
микшер на два потока в проигрывателе музыки. проигрыватель сделан на основе библиотеки Bass.dll D-fens Мультимедиа в Delphi 4 08.06.2007 20:36