هیچ دوره ای در سبد آموزش شما وجود ندارد
ضبط صدا Media Recording در اندروید
صفحه نخستاندروید دارای یک میکروفون داخلی می باشد که از طریق آن می توانید صدا را گرفته و ذخیره کنید و یا در تلفن خود اجرا کنید. راه های زیادی برای انجام این کار وجود دارد ما متداول ترین آن از طریق گروه MediaRecorder می باشد.
اندروید گروه MediaRecorder را برای ضبط صدا یا فیلم ارائه می دهد. برای استفاده از گروه MediaRecorder شما در ابتدا یک نمونه ازآن گروه ایجاد خواهید کرد. ترکیب آن در زیر ارائه شده است:
MediaRecorder myAudioRecorder = new MediaRecorder();
اکنون شما منبع، خروجی، فرمت کدگذاری و فایل خروجی را تنظیمی کنید. ترکیب آنها در زیر ارائه شده است .
myAudioRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); myAudioRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); myAudioRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB); myAudioRecorder.setOutputFile(outputFile);
پس از تعیین منبع صدا، فرمت و فایل خروجی آن می توانیم دو روش اصلی را فراخوانده، آماده کرده و آغاز به ضبط صدا کنیم.
myAudioRecorder.prepare(); myAudioRecorder.start();
علاوه بر این روش ها، روشهای دیگری برای ضبط صدا در گروه MediaRecorder وجود دارند که به شما اجازه می دهند کنترل بیشتری بر روی ضبط صدا و فیلم داشته باشید.
شماره | متد و توضیحات |
1 | setAudioSource()
این روش منبع صدا را که باید ضبط شود، مشخص می کند. |
2 | setVideoSource()
این روش منبع فیلم را که باید ضبط شود، مشخص می کند. |
3 | setOutputFormat()
این روش فرمت ذخیره صدا را مشخص می کند. |
4 | setAudioEncoder()
این روش رمزگذار صدا را که باید مورد استفاده قرار بگیرد، مشخص می کند. |
5 | setOutputFile()
این روش مسیر ذخیره ی صدای ضبط شده را تنظیم می کند. |
6 | stop()
این روش فرایند ضبط را متوقف می کند. |
7 | release()
این روش هنگامی که نمونه ی ضبط کننده لازم باشد، باید فراخوانده شود. |
در اینجا محتوای src/com.example.audiocapture/MainActivity.java را مشاهده می کنید.
package com.example.sairamkrishna.myapplication; import android.media.MediaPlayer; import android.media.MediaRecorder; import android.os.Environment; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.Toast; import java.io.IOException; import java.util.Random; import static android.Manifest.permission.RECORD_AUDIO; import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE; import android.support.v4.app.ActivityCompat; import android.content.pm.PackageManager; import android.support.v4.content.ContextCompat; public class MainActivity extends AppCompatActivity { Button buttonStart, buttonStop, buttonPlayLastRecordAudio, buttonStopPlayingRecording ; String AudioSavePathInDevice = null; MediaRecorder mediaRecorder ; Random random ; String RandomAudioFileName = "ABCDEFGHIJKLMNOP"; public static final int RequestPermissionCode = 1; MediaPlayer mediaPlayer ; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); buttonStart = (Button) findViewById(R.id.button); buttonStop = (Button) findViewById(R.id.button2); buttonPlayLastRecordAudio = (Button) findViewById(R.id.button3); buttonStopPlayingRecording = (Button)findViewById(R.id.button4); buttonStop.setEnabled(false); buttonPlayLastRecordAudio.setEnabled(false); buttonStopPlayingRecording.setEnabled(false); random = new Random(); buttonStart.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if(checkPermission()) { AudioSavePathInDevice = Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + CreateRandomAudioFileName(5) + "AudioRecording.3gp"; MediaRecorderReady(); try { mediaRecorder.prepare(); mediaRecorder.start(); } catch (IllegalStateException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } buttonStart.setEnabled(false); buttonStop.setEnabled(true); Toast.makeText(MainActivity.this, "Recording started", Toast.LENGTH_LONG).show(); } else { requestPermission(); } } }); buttonStop.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { mediaRecorder.stop(); buttonStop.setEnabled(false); buttonPlayLastRecordAudio.setEnabled(true); buttonStart.setEnabled(true); buttonStopPlayingRecording.setEnabled(false); Toast.makeText(MainActivity.this, "Recording Completed", Toast.LENGTH_LONG).show(); } }); buttonPlayLastRecordAudio.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) throws IllegalArgumentException, SecurityException, IllegalStateException { buttonStop.setEnabled(false); buttonStart.setEnabled(false); buttonStopPlayingRecording.setEnabled(true); mediaPlayer = new MediaPlayer(); try { mediaPlayer.setDataSource(AudioSavePathInDevice); mediaPlayer.prepare(); } catch (IOException e) { e.printStackTrace(); } mediaPlayer.start(); Toast.makeText(MainActivity.this, "Recording Playing", Toast.LENGTH_LONG).show(); } }); buttonStopPlayingRecording.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { buttonStop.setEnabled(false); buttonStart.setEnabled(true); buttonStopPlayingRecording.setEnabled(false); buttonPlayLastRecordAudio.setEnabled(true); if(mediaPlayer != null){ mediaPlayer.stop(); mediaPlayer.release(); MediaRecorderReady(); } } }); } public void MediaRecorderReady(){ mediaRecorder=new MediaRecorder(); mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); mediaRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB); mediaRecorder.setOutputFile(AudioSavePathInDevice); } public String CreateRandomAudioFileName(int string){ StringBuilder stringBuilder = new StringBuilder( string ); int i = 0 ; while(i < string ) { stringBuilder.append(RandomAudioFileName. charAt(random.nextInt(RandomAudioFileName.length()))); i++ ; } return stringBuilder.toString(); } private void requestPermission() { ActivityCompat.requestPermissions(MainActivity.this, new String[]{WRITE_EXTERNAL_STORAGE, RECORD_AUDIO}, RequestPermissionCode); } @Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { switch (requestCode) { case RequestPermissionCode: if (grantResults.length> 0) { boolean StoragePermission = grantResults[0] == PackageManager.PERMISSION_GRANTED; boolean RecordPermission = grantResults[1] == PackageManager.PERMISSION_GRANTED; if (StoragePermission && RecordPermission) { Toast.makeText(MainActivity.this, "Permission Granted", Toast.LENGTH_LONG).show(); } else { Toast.makeText(MainActivity.this,"Permission Denied",Toast.LENGTH_LONG).show(); } } break; } } public boolean checkPermission() { int result = ContextCompat.checkSelfPermission(getApplicationContext(), WRITE_EXTERNAL_STORAGE); int result1 = ContextCompat.checkSelfPermission(getApplicationContext(), RECORD_AUDIO); return result == PackageManager.PERMISSION_GRANTED && result1 == PackageManager.PERMISSION_GRANTED; } }
در اینجا محتوای activity_main.xml را مشاهده می کنید.
<?xml version="1.0" encoding="utf-8"?> <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"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/imageView" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:src="@drawable/abc"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Record" android:id="@+id/button" android:layout_below="@+id/imageView" android:layout_alignParentLeft="true" android:layout_marginTop="37dp" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="STOP" android:id="@+id/button2" android:layout_alignTop="@+id/button" android:layout_centerHorizontal="true" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Play" android:id="@+id/button3" android:layout_alignTop="@+id/button2" android:layout_alignParentRight="true" android:layout_alignParentEnd="true" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="STOP PLAYING RECORDING " android:id="@+id/button4" android:layout_below="@+id/button2" android:layout_centerHorizontal="true" android:layout_marginTop="10dp" /> </RelativeLayout>
در اینجا محتوای Strings.xml را مشاهده می کنید.
<resources> <string name="app_name">My Application</string> </resources> در اینجا محتوای AndroidManifest.xml را مشاهده می کنید. <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.sairamkrishna.myapplication" > <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.STORAGE" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.example.sairamkrishna.myapplication.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
اجازه دهید برنامه ی AudioCapture شما را اجرا کنیم. فرض می کنیم که دستگاه موبایل خود را به کامپیوتر متصل کرده اید. برای اجرای برنامه از Eclipse یکی از فایل های فعالیت برنامه ی خود را باز کرده و روی آیکن Run از تولبار کلیک کنید. قبل از شروع برنامه ی شما، Eclipse پنجره ی زیر را برای انتخاب گزینه، جایی که برنامه ی شما اجرا می شود، نمایش خواهد داد.
اکنون شما دکمه های stop و play را می بینید که به طور پیش فرض غیرفعال هستند. فقط کافیست روی دکمه ی start کلیک کنید، که ضبط صدا آغاز می شود و پس از آن صفحه ی زیر را نمایش خواهد داد.
اکنون فقط روی دکمه ی stop بزنید و برنامه صدای ضبط شده را روی حافظه ی خارجی ذخیره خواهد کرد. وقتی که روی دکمه ی stop کلیک کنید صفحه ی زیر نمایش داده خواهد شد.
اکنون روی دکمه ی play بزنید، که پس از آن صدای ضبط شده روی دستگاه اجرا می شود و در هنگام اجرا پیغام زیر نمایش داده خواهد شد.