Cara Merekam Suara di Android Dengan Media Recorder

 Jika sebelumnya kita sudah membahas merekam suara melalui mekanisme intent, maka kini kita akan mencoba membahas merekam suara dengan menggunakan media recorder. Cara mereka suara dengan menggunakan media recorder terbilang lebih kompleks. Anda harus mengimpor library android.media.MediaRecorder untuk bisa memanfaatkannya.
Penggunaan Media Recorder memungkinkan penerapan kompresi pada suara yang terekam serta pengaturan format file yang dihasilkan, seperti MPEG4 atau 3GPP.
Mengatur sumber perekaman suara
Anda mengatur sumber perekaman suara menggunakan set AudioSource(). Metode ini mengharapkan parameter Integer, yakni nilai konstan yang didefinisikan di library media Recorder.AudioSource. Dari pengujian, merekam panggilan (suara masuk, suara keluar, atau keduanya) selalu gagal. Dugaan utama karena masalah legalitas. Di beberapa negara, Anda tidak diperkenankan merekam percakapan tanpa sepengetahuan pihak yang diajak berbicara.
Mengatur format Output
Setelah Anda mengatur sumber perekaman suara, langkah berikutnya adalah mengatur format output rekaman menggunakan setOutputFormat(). Metode ini mengharapkan parameter format output bertipe Integer, seperti yang didefinisikan dalam library MediaRecorder.OutputFormat. Berikut ini merupakan penggalan kode cara mengatur format output sebagai file 3gpp.
Mengatur Audio Encoder
Untuk meminimalisasi sumber daya penyimpanan yang diperlukan, data suara yang terekam dikodekan dengan menggunakan codec (coder-decorder). Ada beberapa codec yang disediakan di MediaRecorder.AudioEncoder, yakni sebagai berikut:
  • AMR_NB, audio dikompresi menggunakan AMR-NB codec.
  • AMR_WB, audio dikompresi menggunakan AMR-EB codec.
  • AAC, audio dikompresi dengan AAC Low Complexity (AAC-LC) codec.
  • HE_ACC, audio dikompresi dengan High Efficiency AAC (HE-AAC) codec.
AMR_NB adalah codec yang disediakan sejak API level1 dan merupakan default codec untuk menyimpan suara dengan kualitas yang setara percakapan telepon. AMR_NB menggunakan sample rate 8 kHz dan bitrate 4,75-12,2 kbps dengan lebar pita (bandwidht) 200-3.400 Hz. Untuk merekam suara selain percakapan telepon, AMR_NB kurang cocok.
AMR_WB menawarkan kualitas suara percakapan yang lebih baik dengan bandwith yang lebih besar, yaitu 50-7000 Hz dan bitrate sekitar 6,6-23, 85 kbps. Codec ini tersedia mulai dari API level 10 (Honeycomb).
AAC codec memungkinkan kualitas rekaman suara setara MP3 sehingga cocok untuk merekam berbagai suara, seperti suara musik. Codec ini tersedia sejak API level 10. HE_AAC adalah codec yang dirancang sebagai perluasan AAC-LC adalah codec yang dirancang sebagai perluasan AAC-LC untuk mengoptimalkan kualitas suara dengan bitrate rendah, seperti pada audio streaming. Ini tersedia mulai API level 10. Berikut ini contoh kode mengatur audio encoder. 
recorder=new MediaRecorder ();
recorder.setAudioSource (
     MediaRecorder.
     AudioSource.MIC);
 recorder.setOutputFormat (
     MediaRecorder.   
     OutputFormat.THREE_GPP);
recorder.setAudioEncoder (
     MediaRecorder.
     AudioEncoder.AMR_NB);
Mengatur lokasi file output
Target lokasi file yang akan menampung data suara yang terekam diatur dengan memanggil setOutputFile(). Ada dua metode setOutputFile(), yakni yang mengharapkan parameter yang mengharapkan instance FileDescriptor.
Memulai perekaman suara
Anda harus menyiapkan Media Recorder sebelum memulai perekaman, yakni dengan memanggul prepare(). Setelah itu, proses perekaman bisa segera dimulai dengan memanggil start(). Proses perekaman dilakukan secara asinkron, yakni eksekusi akan segera keluar dari start() setelah proses rekaman dimulai.
Menghentikan perekaman suara
Proses perekaman suara dihentikan dengan stop(). Setelah pemanggilan stop(), status dikembalikan ke kondisi initial. Untuk memulai rekaman lagi, Anda harus melalui beberapa tahapan.
Menghapus media recorder
Untuk membuang resource yang digunakan oleh Media Recorder segera setelah instance Media Recorder tidak diperlukan, Anda perlu memanggil release(). Setelah pemanggilan release(), instance Media Recorder tidak lagi valid. Untuk merekam suara lain, Anda harus menciptakan instance Media Recorder baru.
Mengambil Amplitudo Maksimum
Media Recorder menyediakan sebuah metode bernama getMaxAmplitude() yang berguna untuk mendapatkan amplitudo maksimum suara yang sedang direkam. Nilai amplitudo ini sekitar antara 0-32.767%. Pemanggilan amplitudo sejak pemanggilan getMacAmplitude() sebelumnya.
Untuk menghasilkan animasi level amplitudo, Anda harus memanggil getMaxAmplitudo, Anda harus memanggil getMaxAplitudo() ini terus menerus selama proses perekaman suara sedang berlangsung. Anda perlu memanggil getMaxAmplitude() dalam thread terpisah agar thread utama tidak terganggu.
Mengatur durasi perekaman dan ukuran file maksimum
Jika Anda ingin merekam suara dengan durasi tertentu atau hingga ukuran file mencapai angka tertentu, Anda bisa menggunakan setMaxDuration() atau setMaxFileSize(). Metode pertama mengharapkan parameter durasi dalam satuan milidetik. Metode kedua mengharapkan ukuran maksimum dalam byte.
Anda harus memanggil kedua metode tersebut sesudah setOutputFormat(), namun sebelum prepare(). Ketika durasi atau ukuran maksimum tercapai, rekaman otomatis dihentikan. Jika Anda mendaftar untuk menerima pemberitahuan (OnInfoListener), metode onInfo() akan dipanggil dengan kode berisi pesan bahwa durasi atau ukuran maksimum tercapai.
Menerima pemberitahuan adanya kegagalan atau informasi lain
Aplikasi dapat menerima pemberitahuan bila perekaman gagal karena suatu sebab. Untuk menerima pemberitahuan kesalahan, aplikasi harus membuat implementasi OnErrorListener dan melengkapi metode onError(). Metode onError() mengharapkan tiga parameter, yakni instance Media Recorder, kode kesalahan bertipe Integer dan kode kesalahan tambahan bertipe Integer. Untuk mendaftarkan instance OnErrorListener, Anda perlu memanggil setOnErrorListener().
Untuk pemberitahuan informasi umum yang terjadi selama proses perekaman suara digunakan OnInfoListener. Aplikasi yang berniat memperoleh pemberitahuan ini harus mengimplementasi metode oninfo(). Parameter metode onInfo() sama persis dengan onError(). Ada dua kejadian yang umumnya dilaporkan, yakni kejadian ketika perekaman mencapai durasi maksimum (parameter kedua akan berisi nilai MEDIA_RECORDER_INFO_MAX_DURATION_REACHED) dan kejadian ketika perekaman mencapai ukuran maksimum (MEDIA_RECORDER_INFO_MAX_FILESIZE_REACHED).

Sumber : PCMedia
SHARE

Milan Tomic

Hi. I’m Designer of Blog Magic. I’m CEO/Founder of ThemeXpose. I’m Creative Art Director, Web Designer, UI/UX Designer, Interaction Designer, Industrial Designer, Web Developer, Business Enthusiast, StartUp Enthusiast, Speaker, Writer and Photographer. Inspired to make things looks better.

  • Image
  • Image
  • Image
  • Image
  • Image
    Blogger Comment
    Facebook Comment

0 comments:

Post a Comment