android 通过MediaRecorder实现简单的录音示例
作者:Big_Centaur 发布时间:2023-07-29 06:03:54
标签:mediarecorder,android
整理文档,搜刮出一个android 通过MediaRecorder实现简单的录音示例,稍微整理精简一下做下分享。
MainActivity
package com.centaur.collectvoice;
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.Toast;
import java.io.File;
import java.io.IOException;
public class MainActivity extends AppCompatActivity {
private final static String TAG = "collectvoice";
MediaRecorder mediaRecorder = new MediaRecorder();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
/**
* 开始按钮
* @param view
* @throws IOException
*/
public void onStart(View view) throws IOException {
Toast.makeText(this, "开始收集", Toast.LENGTH_SHORT).show();
// 第1步:设置音频来源(MIC表示麦克风)
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
//第2步:设置音频输出格式(默认的输出格式)
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
//第3步:设置音频编码方式(默认的编码方式)
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
//创建一个临时的音频输出文件
// audioFile = File.createTempFile("record_", ".amr");
if (FileUtils.makeFolder("VOICE")){//一个简单的判断文件夹是不是存在 不存在就创建
String path = Environment.getExternalStorageDirectory().toString() + "/" + "VOICE/";
String filePath =path+"record_.amr";
File file = new File(filePath);
//第4步:指定音频输出文件
mediaRecorder.setOutputFile(file.getAbsolutePath());
//第5步:调用prepare方法
mediaRecorder.prepare();
//第6步:调用start方法开始录音
mediaRecorder.start();
}
}
/**
* 关闭按钮
* @param view
*/
public void onStop(View view) {
Toast.makeText(this, "停止收集", Toast.LENGTH_SHORT).show();
mediaRecorder.stop();
}
}
工具类中用到的方法
public static boolean makeFolder(String folder){
File filefolder = new File(Environment.getExternalStorageDirectory().toString() + "/" + folder);
if(!filefolder.exists()){
filefolder.mkdir();
if(filefolder.exists()){
Log.d(TAG,folder+"创建成功");
}
else {
Log.d(TAG,folder+"创建失败");
}
}
return true;
}
布局文件
<?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_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
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="com.centaur.collectvoice.MainActivity">
<Button
android:onClick="onStart"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="收集声音" />
<Button
android:onClick="onStop"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="停止声音" />
</LinearLayout>
来源:http://blog.csdn.net/u012222078/article/details/56857062?locationNum=13&fps=1


猜你喜欢
- 直接插入排序直接插入排序的思路很容易理解,它是这样的:1.把待排序的数组分成已排序和未排序两部分,初始的时候把第一个元素认为是已排好序的。2
- 目录1 HttpClient简介2 代码实现2.1 服务端2.1.1 新建控制器2.1.2 新建启动器2.2 客户端2.2.1 添加依赖2.
- windows系统中的画板工具,有好几种画刷,C#中并没有直接对应可使用的类,只能自己研究。1.画刷原理根据本人对PS的相关功能细心分析,发
- 二叉排序树,又称为二叉查找树。它或者是一颗空树,或者是具有下列性质的二叉树:若它的左子树不为空。则左子树上所有的结点的值均小于跟的结点值若它
- using System;using System.Runtime.InteropServices;using System.Windows
- 废话不多说,直接奉上代码:Frame.javapackage snake;import java.awt.Graphics;import j
- 简介一个APP如果没有页面跳转那么是没有灵魂的,页面跳转的一个常用说法就是Navigator,flutter作为一个最为优秀的前端框架,Na
- Android 3.0引入了CursorLoader实现异步加载数据,为了避免同步查询数据库时阻塞UI线程的问题。在API 11之前可以通过
- 本文实例讲述了Android编程实现二级下拉菜单及快速搜索的方法。分享给大家供大家参考,具体如下:一、我们要做什么?上面有个搜索框,下面是一
- 本教程源码https://github.com/bestaone/HiAuth源码比较全面,教程我就只介绍关键代码了,喜欢的点个star,谢
- 异常算术异常类:ArithmeticExecption空指针异常类:NullPointerException类型强制转换异常:ClassCa
- 如下所示://StreamRead来读取一个文件 using (StreamReader sr = new StreamRea
- 实体对象如下:/**使用lobmok插件*/@Getter@Setter@NoArgsConstructor@ToString@Equals
- 一般来说,Android自身就包含了常用于嵌入式系统的SQLite,这样就免去了开发者自己移植安装的功夫。SQLite 支持多数SQL92标
- 新建线程新建线程很简单。只需要使用new关键字创建一个线程对象,然后调用它的start()启动线程即可。Thread thread1 = n
- Java 最初版本只为常用的数据结构提供了很少的一组类:Vector、Stack、Hashtable、BitSet 与 Enumeratio
- 本文实例为大家分享了C语言非递归后序遍历二叉树的具体代码,供大家参考,具体内容如下法一:实现思路:一个栈 先按 根->右子树->
- 题目描述这是 LeetCode 上的 768. 最多能完成排序的块 II ,难度为 困难。Tag : 「贪心」这个问题和&ldquo
- Intent在不同的组件中传递对象数据的应用非常普遍,大家都知道在intent传递对象的方法有两种:1、实现Serializable接口、2
- 在有些情况下死锁是可以避免的。本文将展示三种用于避免死锁的技术:1.加锁顺序2.加锁时限3.死锁检测加锁顺序当多个线程需要相同的一些锁,但是