Вы можете сделать это с помощью баса, Bassenc и lame encoder.
скачать кодировщик от lame http://www.rarewares.org/mp3-lame-bundle.php
и бас от http://www.un4seen.com/
Поместите bass.dll, bass.pas, Bassenc.dll, bassenc.pas и lime.exe в ту же папку, что и исполняемый файл проекта.
для использования примера кода поместите в форму список, опендиал и две кнопки
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics, bass, bassenc,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TForm1 = class(TForm)
ListBox1: TListBox;
OpenDialog1: TOpenDialog;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
//
if OpenDialog1.Execute then
ListBox1.items.add(OpenDialog1.FileName);
end;
procedure TForm1.Button2Click(Sender: TObject);
var
decoder, encoder, newdecoder: dword;
I, R: Integer;
buf: array [1 .. 204800] of byte;
begin
for I := 0 to ListBox1.items.count - 1 do
begin
if I = 0 then
begin
decoder := BASS_StreamCreateFile(FALSE, PChar(ListBox1.items.strings[0]),
0, 0, BASS_STREAM_DECODE or BASS_UNICODE);
encoder := BASS_Encode_Start(decoder,
'lame.exe --alt-preset standard - fulltrack.mp3',
BASS_ENCODE_AUTOFREE or BASS_UNICODE, nil, nil);
end
else
begin
newdecoder := BASS_StreamCreateFile(FALSE, PChar(ListBox1.items.strings[I]
), 0, 0, BASS_STREAM_DECODE or BASS_UNICODE);
if not BASS_Encode_SetChannel(encoder, newdecoder) then
begin
showmessage(inttostr(BASS_ErrorGetCode));
BASS_StreamFree(decoder);
continue;
end;
BASS_StreamFree(decoder);
// free the old decoder
decoder := newdecoder;
end;
R := 1;
while R > 0 do
begin
R := BASS_ChannelGetData(decoder, @buf, sizeof(buf));
end;
end;
BASS_StreamFree(decoder); // free the decoder
BASS_Encode_Stop(encoder); // stop the encoder
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
if not BASS_Init(-1, 44100, 0, handle, nil) then
showmessage('Error initializing audio!');
end;
end.