博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android录音与播放 .
阅读量:5922 次
发布时间:2019-06-19

本文共 5318 字,大约阅读时间需要 17 分钟。

Android多媒体框架包含获取和编码多种音频格式的支持,所以你可以轻松地把音频合并到你的应用中.如果设备支持,你可以使用MediaRecorder APIs 进行录音.

本章向你展示如何写一个应用从设备上的microphone获取音频,然后保存并回放.

注:Android模拟器不具有录音的能力,但是真实的设备一般都具有此功能.

 

执行音频获取

从设备获取音频比回放音频或视频要复杂一点,但是也还算简单:

  • 创建一个android.media.MediaRecorder的新实例.
  • 使用MediaRecorder.setAudioSource()设置音频源,一般要使用MediaRecorder.AudioSource.MIC.
  • 使用MediaRecorder.setOutputFormat()设置输出文件的格式.
  • 使用MediaRecorder.setOutputFile()设置输出文件的名字.
  • 使用MediaRecorder.setAudioEncoder()设置音频编码.
  • 调用MediaRecorder 实例的MediaRecorder.prepare()
  • MediaRecorder.start()开始获取音频.
  • 调用MediaRecorder.stop().停止.
  • 当你用完MediaRecorder实例后,调用MediaRecorder.release(),就会立即释放资源.

 

 

示例:录音并回放录音

 

下面的例子演示了如何设置,开始以及停止音频获取,以及回放录制的文件.

 

/* * 如果输出文件被写入外部存储, * 本应用需要具有写外部存储的权限,  * 还要具有录音的权限.这些权限必须 * 在AndroidManifest.xml 文件中声明,像这样: * * 
*
* */package com.android.audiorecordtest;import android.app.Activity;import android.widget.LinearLayout;import android.os.Bundle;import android.os.Environment;import android.view.ViewGroup;import android.widget.Button;import android.view.View;import android.view.View.OnClickListener;import android.content.Context;import android.util.Log;import android.media.MediaRecorder;import android.media.MediaPlayer;import java.io.IOException;public class AudioRecordTest extends Activity{ private static final String LOG_TAG = "AudioRecordTest"; private static String mFileName = null;   //录音按钮 private RecordButton mRecordButton = null; private MediaRecorder mRecorder = null;   //回放按钮 private PlayButton mPlayButton = null; private MediaPlayer mPlayer = null;   //当录音按钮被click时调用此方法,开始或停止录音 private void onRecord(boolean start) { if (start) { startRecording(); } else { stopRecording(); } }   //当播放按钮被click时调用此方法,开始或停止播放 private void onPlay(boolean start) { if (start) { startPlaying(); } else { stopPlaying(); } } private void startPlaying() { mPlayer = new MediaPlayer(); try {   //设置要播放的文件 mPlayer.setDataSource(mFileName); mPlayer.prepare();   //播放之 mPlayer.start(); } catch (IOException e) { Log.e(LOG_TAG, "prepare() failed"); } } //停止播放 private void stopPlaying() { mPlayer.release(); mPlayer = null; } private void startRecording() { mRecorder = new MediaRecorder(); //设置音源为Micphone mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); //设置封装格式 mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); mRecorder.setOutputFile(mFileName); //设置编码格式 mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); try { mRecorder.prepare(); } catch (IOException e) { Log.e(LOG_TAG, "prepare() failed"); } mRecorder.start(); } private void stopRecording() { mRecorder.stop(); mRecorder.release(); mRecorder = null; } //定义录音按钮 class RecordButton extends Button { boolean mStartRecording = true; OnClickListener clicker = new OnClickListener() { public void onClick(View v) { onRecord(mStartRecording); if (mStartRecording) { setText("Stop recording"); } else { setText("Start recording"); } mStartRecording = !mStartRecording; } }; public RecordButton(Context ctx) { super(ctx); setText("Start recording"); setOnClickListener(clicker); } } //定义播放按钮 class PlayButton extends Button { boolean mStartPlaying = true; OnClickListener clicker = new OnClickListener() { public void onClick(View v) { onPlay(mStartPlaying); if (mStartPlaying) { setText("Stop playing"); } else { setText("Start playing"); } mStartPlaying = !mStartPlaying; } }; public PlayButton(Context ctx) { super(ctx); setText("Start playing"); setOnClickListener(clicker); } } //构造方法 public AudioRecordTest() { mFileName = Environment.getExternalStorageDirectory().getAbsolutePath(); mFileName += "/audiorecordtest.3gp"; } @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); //构造界面 LinearLayout ll = new LinearLayout(this); mRecordButton = new RecordButton(this); ll.addView(mRecordButton, new LinearLayout.LayoutParams( ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, 0)); mPlayButton = new PlayButton(this); ll.addView(mPlayButton, new LinearLayout.LayoutParams( ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, 0)); setContentView(ll); } @Override public void onPause() { super.onPause(); //Activity暂停时释放录音和播放对象 if (mRecorder != null) { mRecorder.release(); mRecorder = null; } if (mPlayer != null) { mPlayer.release(); mPlayer = null; } }}

 

 

 

 

 

转载地址:http://ignvx.baihongyu.com/

你可能感兴趣的文章
json、javaBean、xml互转的几种工具介绍 (转载)
查看>>
庞果网之高斯公式
查看>>
SQL Server 索引和表体系结构(一)
查看>>
HTML解析利器HtmlAgilityPack
查看>>
ASP.NET MVC5+EF6+EasyUI 后台管理系统(37)-文章发布系统④-百万级数据和千万级数据简单测试...
查看>>
《31天成为IT服务达人》之精准运维
查看>>
[cb]扩展Hierarchy 添加二级菜单
查看>>
MVC验证01-基础、远程验证
查看>>
Flash中的文本应用
查看>>
WCF:如何将net.tcp协议寄宿到IIS
查看>>
基于MVC4+EasyUI的Web开发框架经验总结(7)--实现省份、城市、行政区三者联动...
查看>>
通过tarball形式安装HBASE Cluster(CDH5.0.2)——如何配置分布式集群中的zookeeper
查看>>
亿级数据的高并发通用搜索引擎架构设计(转-张宴)
查看>>
CircleImageManager——圆形 / 圆角图片的工具类
查看>>
C语言 小游戏之贪吃蛇
查看>>
康师傅
查看>>
Tokumx 安装指南(做法如同MongoDB)
查看>>
前端收集
查看>>
Unity3D研究院之IOS本地消息通知LocalNotification的使用(六十七)
查看>>
Android判断App是否在前台运行(转)
查看>>