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
0 comments:
Post a Comment