به نام خدا،در این جلسه می خواهیم با ضبط صدا (Audio Capture) در برنامه نویسی اندروید کار کنیم.در جلسات قبلی با مدیا پلیر (MediaPlayer) در برنامه نویسی اندروید آشنا شدیم.در این جلسه با قابلیت MediaRecorder در اندروید اشنا میشیم و با استفاده از اون یک برنامه ضبط صدا طراحی میکنیم.
برای شروع کار یک پروژه جدید ایجاد میکنم و اسمش رو Audio Capture قرار میدیم بروی لایه سه تا دکمه قرار میدیم تا تا دستورات شروع ضبط صدا ،نگه داشتن اون و پخش صدا رو در اختیار بگیرن.و با استفاده از یک imageview تصویری یک میکرفون رو در لایه نمایش میدیم توجه کنید که تصویر Imageviewاز فایل ها خود اندروید گرفته شده است از طریق ادرس (@android:drawable/presence_audio_away).کدهای کامل بخش لایه برنامه یا activity_main.xml در زیر قرار دارد.
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/imageView1"
android:layout_marginTop="64dp"
android:onClick="start"
android:text="start" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/button1"
android:layout_below="@+id/button1"
android:onClick="stop"
android:text="stop" />
<Button
android:id="@+id/button3"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignRight="@+id/button2"
android:layout_below="@+id/button2"
android:onClick="play"
android:text="play" />
<ImageView
android:id="@+id/imageView1"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_centerHorizontal="true"
android:layout_marginTop="56dp"
android:scaleType="fitXY"
android:src="@android:drawable/presence_audio_away"
tools:ignore="NewApi" />
</RelativeLayout>
بعد از اتمام کار لایه برنامه ،به بخش MainActivity.java میریم تا کدهای جاوای برنامه رو بهش اضافه کنیم.به کدهای زیر توجه کنید؟ دستور setAudioSource منبع صوتی برنامه رو از ما میخواد که میتونه میکروفون باشه و یا تماس و غیره باشه..، دستور
setOutputFormat فرمت فایل خروجی مار و میخواد که در اینجا THREE_GPP دادیم ، دستور setOutputFile محل ذخیره سازی فایل ضبط شده رو به MediaRecorder معرفی میکنه. (کدهای کامل بخش MainActivity.java ).
import android.app.Activity;
import android.media.MediaPlayer;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Environment;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends Activity {
private MediaRecorder myAudioRecorder;
private String outputFile = null;
private Button start,stop,play;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
start = (Button)findViewById(R.id.button1);
stop = (Button)findViewById(R.id.button2);
play = (Button)findViewById(R.id.button3);
//شروع به کار برنامه با استفاده از کلید ها
stop.setEnabled(true);
play.setEnabled(false);
//ذهیره سازی فایل ضبط شده در حافظه دستگات و نام گداری اون
outputFile = Environment.getExternalStorageDirectory().
getAbsolutePath() + "/recordman.3gp";;
//مقدار دهی به میدا رکوردر
myAudioRecorder = new MediaRecorder();
myAudioRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
myAudioRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
myAudioRecorder.setAudioEncoder(MediaRecorder.OutputFormat.MPEG_4);
myAudioRecorder.setOutputFile(outputFile);
}
// شروع کار دکمه استارت
public void start(View view){
try {
myAudioRecorder.prepare();
myAudioRecorder.start();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
start.setEnabled(false);
stop.setEnabled(true);
Toast.makeText(getApplicationContext(), "Recording started", Toast.LENGTH_LONG).show();
}
// شرروع کار دکمه استاپ
public void stop(View view){
myAudioRecorder.stop();
myAudioRecorder.release();
myAudioRecorder = null;
stop.setEnabled(false);
play.setEnabled(true);
Toast.makeText(getApplicationContext(), "Audio recorded successfully",
Toast.LENGTH_LONG).show();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
//شروع کار دکمه استارت برای پخش فایل ذخیره شده
public void play(View view) throws IllegalArgumentException,
SecurityException, IllegalStateException, IOException{
MediaPlayer m = new MediaPlayer();
m.setDataSource(outputFile);
m.prepare();
m.start();
Toast.makeText(getApplicationContext(), "Playing audio", Toast.LENGTH_LONG).show();
}
}
الان میتونید برنامه تون رو اجرا کنید و با نحوه کارکردش بیشتر اشنا بشید.سورس برنامه نیز در قسمت فایل ضمیمه قرار گرفت.....موفق باشد.