Membuat MP3 Compressor Sendiri

» Source Code
» Compiled EXE
 

Note: Rename *.ppt to *.zip top open downloaded files.

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 8′;
  if s = ‘medium’ then x:=’–preset cbr 16′;
  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;
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.
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

22 thoughts on “Membuat MP3 Compressor Sendiri

  1. aku mw minta tolong caranya membuat mp3 lagu sendiri biar bisa daapat kode css dan dimasukkan ke dalam friendster bagaimana???saia masih bingung buat mengikuti langkah2 di atas…
    mohon diberi petunjuk bagaimana caranya yang cepat dan mudah untuk dipahami…
    terima kasih..
    mohon petunjuknya

  2. Maaf Mas Andre, saya belum jelas dengan pertanyaannya. Apa maksudnya Mas Andre akan menulis kode program Kompress MP3 di Friensdster? Jika ini yang Mas Andre maksud, Silahkan download source code dan ubah namanya ke .ZIP. Selanjutnya bisa diekstrak pakai Winrar/Winzip. Nah file-file kode hasil ekstraksi ini silahkan dibuka dengan MS. Word (pakai Open With…), lalu di-Save sebagai html. Jika file HTML yang dihasilkan dibuka dengan notepad, di situ terdapat kode html + CSS yang bisa dicopy dan dipaste di Friendster.
    Semoga membantu. Saya tunggu komentar Mas Andre selanjutnya.

  3. assalamu’alaikum
    saya lagi belajar membuat sofware dan membutuhkan beberapa form.tapi saya menginginkan satu form saja ,bagaimana caranya agar disatu form begitu menekan button menu berubah,misalnya kesatu program edit lalu tekan button kedua menu radio button seperti program shollu yang ada di http://ebsoft.web.id saya mohon bantuannya lewat e-mail atau diposting disini
    terimakasih sebelumnya.
    wassalamu’alaikum

  4. assalamu’alaikum
    langsung saja yah..! saya mohon bantuannya saya sedang belajar delphi 7.0 bagaimana caranya agar bisa menulis hurup arab baig di string atau apa sajalah baik untuk memo atau lainnya,apakah ada sofware tambahannya.demikian kiranya yang saya butuhkan mohon untuk diperhatikan
    wassalam

  5. Mas Imam, untuk nulis Arab ada dua cara:
    – Dengan menginstall middle-east (Timur-Tengah) support language ke WIndows Anda, caranya masuk ke Control Panel, Regional and Language Options, dan pada tab Language, cek opsi “Install files for complex right-to-left…” dan klik OK. Masukkan CD Windows dan ikuti petunjuk instalasi. Sebaiknya menggunakan keyboard yang support tulisan Arab.
    – Dengan gambar, yaitu tiap karakter Arab (Alif sampai Yaa) dibuat gambarnya, baik untuk huruf awal, di tengah dan akhir. Kemudian gambar ini nantinya digabung-gabungkan ke gambar hasil sesuai susunan tulisan latin yang diketik.

  6. Untuk Harum Anjani ( Udah kenalan sama Desitie? Blognya rame tuh. Buat yang muslimah bakal betah di blog-nya), untuk menulis jawabannya rada repot kali yaa. Next On lah, sekalian dengan contohnya. Saya sudah install Shollu dan paham maksud Harum. Tunggu sebentar lagi yah…🙂

  7. assalamu’alaikum
    tentang text arabnya bukan itu maksudnya tapi ga apa-apa mas udah berkenan menjawabnya,dan tenang itu sudah dapat yaitu komponen arabic yaitu tntunicode tapi sayang saya ingin menulis text arab di captionnya button tapi ga bisa ,ada solusi mas..?

  8. assalamu’alaikum
    wow..begitu masuk aku jatuh cinta sama web ini..!
    posting databasenya baru permulaan,bagus buat aku yang pemula,ditunggu database berikutnya yah..!
    oh iya..sekalian mau nanya nih,bagaimana caranya menambahkan uninstal agar pada star all program lalu pada program yang kita buat(conto..mp3 conpressor uninstal untuk ngebuangnya..)
    2.apa instalshield yang bukan bawaan delphi agar tampilannya bisa kita robah sekeinginan kita..?
    makasihyah..!Database selanjutnya ditunggu.

  9. aduhh..keduluan!
    tuh kan apa dikata,banyak teman kita yang pemula membutuhkannya,terus berkarya yah akutunggu karya berikutnya

  10. pelajaran databasenya sangat membantu moga aja apa yang saya harapkan bisa diposting disini amin teruslah berkarya

  11. Mas Joko..thanks yah tutornya…

    tp..saya teh pingin compress mp3 nya ga atu2…jd bisa sekaligus beberapa file mp3 di compress..di tambahin apa yah??

    mungki mas joko bisa kasih tau lewat email saya….

    okkeh?!??

    thanks….

  12. tambahan…”hampir semua”..file .mp3 mempunyai bitrate 128… bila bitrate nya di jadiin 8..kualitas suaranya pun berkurang… bahkan untuk pendengar musik seperti saya…..terasa hampa suara yang dihasilkan bitrate 8 kbps itu… saya coba ubah bitratenya jadi 96… agak lumayan lah daripada yang 8 ..he..he…walaupun hasil kompresinya 1/2 dari file aslinya… tpi cukup lah…daripada gitu….

  13. buat mas iman, ini code buat masukin lagu ke Friendster!
    ada bagusnya dalam format wma🙂

    [EMBED SRC=”http://www.situs-anda.com/musikfiles/lagu-anda.wma” AUTOSTART=TRUE LOOP=TRUE WIDTH=0 HEIGHT=0 ALIGN=”CENTER” allowScriptAccess=”never” allownetworking=”internal”][/EMBED]

    ganti tanda “[” dengan “”

  14. aduh, terlalu banyak proteksi neh! mo nulis kode “lebih besar” ajah kena sensor

    btw, ganti “[” dengan tanda “lebih kecil dari” dan tanda “]” dengan tanda “lebih besar dari”

  15. Assalamualaikum KandaQ Sayang😉
    Dikala kanda membuka comment ini, dinda pengen banget bilang kalau ……………….;)
    Maap kanda, dinda cuman numpang lewat😉
    I’m in missing u………..
    Kanda, kapan negh diajarin buat WEB?

  16. Mas Joko, saya ada satu uneg2 lagi, dan belum dapat solusinya..

    Idenya saya ingin membuat sebuah kamus Mandarin dengan membiarkan user mengetik huruf2/kalimat2 Mandarin secara bebas di Memo. Misal user mengetik 我是好朋友。 Untuk pencarian arti, saya ingin menggunakan hover dari mouse, jadi setiap huruf Mandarin yang dilewati pointer mouse tersebut akan dianggap sebagai kata kuncinya. Dan saya bisa mencari artinya pada database, kemudian ditampilkan untuk user.

    Semoga mas Joko bisa memberi gambaran langkah2 diperlukan.

    Terima kasih sebelumnya.

  17. mas joko ada ga aplikasi yg udah jadi buat compres kaya gtu, tp yg pake algoritma!!!
    soalnya mau saya buat TA … Tolong ya mas..
    trimakasih….

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s