Android音频开发之使用MediaRecorder录制

编程入门 行业动态 更新时间:2024-10-23 23:30:03

Android<a href=https://www.elefans.com/category/jswz/34/1768490.html style=音频开发之使用MediaRecorder录制"/>

Android音频开发之使用MediaRecorder录制

本文主要是记录Android端音频开发

Android SDK 提供了两套音频采集的API,分别是:MediaRecorder 和 AudioRecord

MediaRecorder 可以直接把手机麦克风录入的音频数据进行编码压缩(如AMR、MP3,3gp等)并存成文件

google API : .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 AppCompatActivityimplements View.OnClickListener {private final int REQ_PERMISSION_AUDIO = 0x01;private Button mRecode, mPlay;private String mAudioPath = null;private MediaRecorder mMediaRecorder;private MediaPlayer mMediaPlayer;@Overrideprotected 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();}@Overridepublic 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 blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.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, newString[]{WRITE_EXTERNAL_STORAGE, RECORD_AUDIO}, REQ_PERMISSION_AUDIO);}@Overridepublic 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"?>
<LinearLayoutxmlns:android=""xmlns: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"><Buttonandroid:id="@+id/audio_recode"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textAllCaps="false"android:text="recode"/><Buttonandroid:id="@+id/audio_paly"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textAllCaps="false"android:text="play"/></LinearLayout>



更多推荐

Android音频开发之使用MediaRecorder录制

本文发布于:2024-02-27 05:54:55,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1705431.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:音频   Android   MediaRecorder

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!