Arsip: Membuat MP3 Compressor Sendiri


by reev in Multimedia more 13 years ago 4108
Jangan percaya judul di atas.
Yang dibahas di sini sesungguhnya hanyalah membuat antarmuka GUI untuk software WAV/MP3 Encoder\Decoder - Lame.
Lame sudah lama negtop di dunia encoding & decoding suara antarformat MP3 & WAV. Namun yang akan saya ulas di bawah hanya pada fitur mengompres file MP3 hingga ukurannya menjadi lebih kecil. Yang selanjutnya, MP3 dengan ukuran kecil jauh lebih efisien digunakan pada handphone, PDA, MP3 player dan sejenisnya.
Kualitas MP3 tergantung pada beberapa hal, seperti bitrate, jumlah channel, dan beberapa hal lain yang spesifik dengan digital music.

Berapa jumlah channel - untuk selanjutnya akan saya sebut Mode, dan bitrate serta kawan-kawannya - nanti saya sebut Preset, akan menjadi pokok pembicaraan di bagian awal tulisan ini. Lame dipublikasikan dalam bentuk sebuah file EXE (Lame.exe) dan juga sebuah library (lame_enc.dll). Keduanya dapat didownload di http://lame.sourceforge.net/. DI tulisan ini hanya Lame.exe yang akan digunakan. Misalkan Anda mempunyai sebuah file MP3 dengan ukuran 4MB, yang terletak di c:\music\avril_lavigne.mp3, dan Anda ingin mengompressnya biar pas buat memori HP Anda (sebut saja Nokia N93, biar keren) yang memorinya cuma tersisa 500KB doang. Apa akal? Ada ide: coba saja download lame.exe dan ekstrak ke c:\lame, lalu jalankan command prompt dan ketik:C:\lame\lame.exe -m mono - preset cbr 8 "c:\music\avril_lavigne.mp3" "c:\music\avril_lavigne_compressed.mp3" Kemudian tekan Enter. tunggu sampai proses yang ada di monitor Anda selesai. Sekarang cek file c:\music\avril_lavigne_compressed.mp3, dan ternyata, ukurannya pas buat HP Anda! Kembali ke dua hal di atas, Mode & Preset, "-m mono" adalah Modenya sedang "- preset cbr 8" adalah Presetnya. Berikut penjelasannya, "-m mono" berarti MP3 hasil kompresi nantinya harus memiliki channel tunggal, alias Mono. Mode lainnya adalah Stereo, Joint Stereo dan Force. Preset, sebagaimana contoh di atas, dapat diartikan seperti ini: cbr artinya Constant BitRate dan angka 8 berarti MP3 hasil kompresi memiliki Bitrate 8Kbps. Lebih lanjut, jalankan lame.exe tanpa parameter untuk melihat opsi-opsi lainnya.Selanjutnya, kita membuat antarmuka GUI dengan Delphi untuk perintah di atas. Urutan pengerjaan kompresi MP3 yang akan kita buat kira-kira seperti ini:

Input File MP3 -> jalankan lame.exe dengan parameter yang sesuai -> Tunggu sampai selesai -> File MP3 terkompres didapat. Pertama, kita buat input MP3, berupa sebuah TEdit, TButton, dan TOpenFileDialog. Beri event OnClick pada TButton dan isi dengan kode berikut:
if openfiledialog.Execute then
edit1.Text :=openfiledialog.FileName;

Selanjutnya, tambahkan sebuah TButton lagi, dan isi event OnClicknya dengan kode berikut:

var
s:String;
x:String;
begin
if not fileexists(edit1.Text ) then
begin
MessageBox(handle,’Source file is not found.’,'Error’,MB_ICONHAND);
exit;
end;
if Lowercase(ExtractFileExt(edit1.Text))<>’.mp3'; then
begin
MessageBox(handle,’Source file is not an MP3 file.’,'Error’,MB_ICONHAND);
exit;
end;
Params:=’"‘+Compressor +’" ‘;
Params:=Params + ‘-m ‘+Lowercase(cbm.Items[cbm.itemindex]){[1]}+’ ‘; //mode
s:=lowercase(cbq.Items[cbq.itemindex]);
x:=";
if s = ’standard’ then x:=’- preset cbr ';
if s = ‘medium’ then x:=’- preset cbr 1';
if s = ‘high’ then x:=’- preset cbr 32';
if s = ‘highest’ then x:=’- preset cbr 44';
params:=params+x+’"‘+edit1.Text +’" "‘+changeFileExt(edit1.Text,’_compressed.mp3')+’"‘;
b.Enabled:=False;
try
RunDos(Params, nil);
finally
b.Enabled:=true;
end;
MessageBox(handle,’Completed.’,'Information’,MB_ICONINFORMATION or MB_OK);
End;
Syntax Highlighted with https://pascal-id.org/syntax




Terakhir, buat sebuah unit lagi dan berikut isinya. Jangan lupa tambahkan unit ini ke klausa uses pada form yang mengandung kode di atas.

unit ucons;
interface
uses Windows, SysUtils, Forms;
type
TConsoleProgress = procedure (const Buffer:PChar); procedure RunDos(DosApp:String; consoleProgress:TconsoleProgress) ;
implementation
procedure RunDos(DosApp:String; consoleProgress:TconsoleProgress) ; const   ReadBuffer = 2400;
var
Security : TSecurityAttributes;
ReadPipe,WritePipe : THandle;
start : TStartUpInfo;
ProcessInfo : TProcessInformation;
Buffer : Pchar;
BytesRead : DWord;
Apprunning : DWord;
begin
With
Security do
begin
nlength := SizeOf(TSecurityAttributes) ;
binherithandle := true;
lpsecuritydescriptor := nil;
end;
if Createpipe (ReadPipe, WritePipe, @Security, 0) then
begin
Buffer := AllocMem(ReadBuffer + 1) ;
FillChar(Start,Sizeof(Start),#0) ;
start.cb := SizeOf(start) ;
start.hStdOutput := WritePipe;
start.hStdInput := ReadPipe;
start.dwFlags := STARTF_USESTDHANDLES +     STARTF_USESHOWWINDOW;
start.wShowWindow := SW_HIDE;
if CreateProcess(nil,  PChar(DosApp),  @Security,  @Security,  true,  NORMAL_PRIORITY_CLASS,
nil,  nil,  start,  ProcessInfo)    then
begin
repeat
Apprunning := WaitForSingleObject(ProcessInfo.hProcess,100) ;           Application.ProcessMessages;
until (Apprunning <> WAIT_TIMEOUT) ;
Repeat
BytesRead := 0;
ReadFile(ReadPipe,Buffer[0],   ReadBuffer,BytesRead,nil) ;
Buffer[BytesRead]:= #0;
OemToAnsi(Buffer,Buffer) ;
if @ConsoleProgress<>nil then                   consoleprogress(buffer);
until (BytesRead < ReadBuffer) ;
end;
FreeMem(Buffer) ;
CloseHandle(ProcessInfo.hProcess) ;
CloseHandle(ProcessInfo.hThread) ;
CloseHandle(ReadPipe) ;
CloseHandle(WritePipe) ;
end;
end;
end.
Syntax Highlighted with https://pascal-id.org/syntax



Untuk lebih jelasnya, silahkan download demo project dan file exe hasil kompilasinya.
» Source Code
» Compiled EXE
Note: Rename .ppt to .zip top open downloaded files.

Selamat mencoba.JokoRB
Local Business Directory, Search Engine Submission & SEO Tools FreeWebSubmission.com SonicRun.com