Android音频开发之使用MediaRecorder录制
2016-12-30 19:03
459 查看
本文主要是记录Android端音频开发
Android SDK 提供了两套音频采集的API,分别是:MediaRecorder 和 AudioRecord
MediaRecorder 可以直接把手机麦克风录入的音频数据进行编码压缩(如AMR、MP3,3gp等)并存成文件
google API : https://developer.android.com/reference/android/media/MediaRecorder.html
关于播放,Android SDK 提供了3套音频播放的API,分别是:MediaPlayer,SoundPool,AudioTrack,MediaPlayer 更加适合在后台长时间播放本地音乐文件或者在线的流式资源; SoundPool 则适合播放比较短的音频片段,比如游戏声音、按键声、铃声片段等等,它可以同时播放多个音频; 而 AudioTrack 则更接近底层,提供了非常强大的控制能力,支持低延迟播放,适合流媒体等场景
使用比较简单,直接上简单例子,本例播放使用MediaPlayer ,MediareRcorder 还可以用于录制视频
Ui 就两个按钮
Android SDK 提供了两套音频采集的API,分别是:MediaRecorder 和 AudioRecord
MediaRecorder 可以直接把手机麦克风录入的音频数据进行编码压缩(如AMR、MP3,3gp等)并存成文件
google API : https://developer.android.com/reference/android/media/MediaRecorder.html
关于播放,Android SDK 提供了3套音频播放的API,分别是:MediaPlayer,SoundPool,AudioTrack,MediaPlayer 更加适合在后台长时间播放本地音乐文件或者在线的流式资源; SoundPool 则适合播放比较短的音频片段,比如游戏声音、按键声、铃声片段等等,它可以同时播放多个音频; 而 AudioTrack 则更接近底层,提供了非常强大的控制能力,支持低延迟播放,适合流媒体等场景
使用比较简单,直接上简单例子,本例播放使用MediaPlayer ,MediareRcorder 还可以用于录制视频
import android.content.pm.PackageManager; import android.media.MediaPlayer; import android.media.MediaRecorder; import android.os.Environment; import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.Toast; import com.cl.slack.mediarecorder.R; import java.io.IOException; import static android.Manifest.permission.RECORD_AUDIO; import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE; public class MediaRecorderAudioActivity extends AppCompatActivity implements View.OnClickListener { private final int REQ_PERMISSION_AUDIO = 0x01; private Button mRecode, mPlay; private String mAudioPath = null; private MediaRecorder mMediaRecorder; private MediaPlayer mMediaPlayer; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_media_recorder_audio); mRecode = (Button) findViewById(R.id.audio_recode); mPlay = (Button) findViewById(R.id.audio_paly); mRecode.setText("recode"); mPlay.setText("play"); mPlay.setEnabled(false); mRecode.setOnClickListener(this); mPlay.setOnClickListener(this); mMediaRecorder = new MediaRecorder(); mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); mMediaRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB); mMediaPlayer = new MediaPlayer(); } @Override public void onClick(View view) { switch (view.getId()) { case R.id.audio_recode: if(mRecode.getTag() == null){ startAudioRecode(); }else { stopAudioRecode(); } break; case R.id.audio_paly: if(mPlay.getTag() == null){ startAudioPlay(); }else { stopAudioPlay(); } break; } } private void startAudioRecode() { if(checkPermission()){ PackageManager packageManager = this.getPackageManager(); if (!packageManager.hasSystemFeature(PackageManager.FEATURE_MICROPHONE)) { showToast("This device doesn't have a mic!"); return; } mRecode.setTag(this); mRecode.setText("stop"); mPlay.setEnabled(false); mAudioPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + "audioRecord.mp3"; mMediaRecorder.setOutputFile(mAudioPath); try { mMediaRecorder.prepare(); mMediaRecorder.start(); } catch (IllegalStateException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } showToast("Recording started"); }else { requestPermission(); } } private void stopAudioRecode() { mRecode.setTag(null); mRecode.setText("recode"); mMediaRecorder.stop(); mMediaRecorder.reset(); mPlay.setEnabled(true); showToast("Recording Completed"); } private void startAudioPlay() { mPlay.setTag(this); mPlay.setText("stop"); try { mMediaPlayer.setDataSource(mAudioPath); mMediaPlayer.prepare(); } catch (IOException e) { e.printStackTrace(); } mMediaPlayer.start(); showToast("Recording Playing"); } private void stopAudioPlay() { mPlay.setTag(null); mPlay.setText("play"); mMediaPlayer.stop(); mMediaPlayer.reset(); } private 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; } private void requestPermission() { ActivityCompat.requestPermissions(this, new String[]{WRITE_EXTERNAL_STORAGE, RECORD_AUDIO}, REQ_PERMISSION_AUDIO); } @Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { switch (requestCode) { case REQ_PERMISSION_AUDIO: if (grantResults.length > 0) { boolean StoragePermission = grantResults[0] == PackageManager.PERMISSION_GRANTED; boolean RecordPermission = grantResults[1] == PackageManager.PERMISSION_GRANTED; if (StoragePermission && RecordPermission) { showToast("Permission Granted"); } else { showToast("Permission Denied"); } } break; } } private void showToast(String message){ Toast.makeText(this, message, Toast.LENGTH_LONG).show(); } }
Ui 就两个按钮
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_media_recorder_audio" 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" android:orientation="vertical" android:gravity="center" tools:context="com.cl.slack.MediaRecorderAudioActivity"> <Button android:id="@+id/audio_recode" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAllCaps="false" android:text="recode"/> <Button android:id="@+id/audio_paly" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAllCaps="false" android:text="play"/> </LinearLayout>
相关文章推荐
- Android项目开发五-《星星生活志》1.使用MediaRecorder录制音频
- Android项目开发五-《星星生活志》1.使用MediaRecorder录制音频
- Android使用的开发MediaRecorder录制声音
- Android开发 音频的录制(MediaRecorder)与播放(MediaPlayer)踩坑记录
- Android之多媒体--使用MediaRecorder录制音频
- Android开发之使用MediaRecorder录制视频
- 初学Android,多媒体之使用MediaRecorder录制音频(七十八)
- Android开发之使用MediaRecorder录制声音
- Android开发之使用MediaRecorder录制视频
- Android:使用MediaRecorder录制音频
- Android音频开发之使用AudioRecord录制
- Android使用的开发MediaRecorder录制视频
- Android移动开发-使用MediaRecorder录制音频的实现
- Android开发之使用MediaRecorder录制声音
- 从头学Android之多媒体--使用MediaRecorder录制音频
- 26、从头学Android之多媒体--使用MediaRecorder录制音频
- 从头学Android之多媒体--使用MediaRecorder录制音频
- Android开发之使用MediaRecorder录制声音
- 使用MediaRecorder录制音频
- android录音开发问题<记录1>:AudioRecord录制的音频文件如何用MediaPlayer类读取