android的麦克风在现在的生活中发挥着很大的作用,打电话,视频聊天,语音识别等等。

android sdk的api里提供了很方便的调用方法,下面写一个小的DEMO。

五个按钮:开始录音,停止,播放,删除录音,保存(令存为)

recordBtn.setOnClickListener(new OnClickListener() {

            @Override
public void onClick(View v) {
try{
_recordAudioFile=File.createTempFile("record",".amr");
//将创建以record开头,后边是一串数字的.amr
_mediaRecorder=new MediaRecorder();
_mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);//麦克风
_mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
_mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
_mediaRecorder.setOutputFile(_recordAudioFile.getAbsolutePath());
_mediaRecorder.prepare();
_mediaRecorder.start();
}catch(IOException e){
e.printStackTrace();
}
}
});
stopBtn.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
if(_mediaRecorder!=null){
_mediaRecorder.stop();
_mediaRecorder.release();
_mediaRecorder=null;
}
}
});
playBtn.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
if(_recordAudioFile==null||!_recordAudioFile.exists()) {
Toast.makeText(getApplicationContext(),"尚未录制", 0).show();
return;
}
_mediaPlayer=new MediaPlayer();
try{
_mediaPlayer.setDataSource(_recordAudioFile.getAbsolutePath());
_mediaPlayer.prepare();
_mediaPlayer.start();
}catch(IOException e){
e.printStackTrace();
}
}
});
deleteBtn.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
_recordAudioFile.delete();
}
});
saveBtn.setOnClickListener(new OnClickListener() {
//注意事项:getAbsolutePath()返回字符串不包含末尾的“/”
@Override
public void onClick(View v) {
String sdcard=Environment.getExternalStorageDirectory().toString();
File dest=new File(sdcard+"/MyAudioRecord/");
if(!dest.exists()) dest.mkdir();
short rtnCode=moveFile(_recordAudioFile.getAbsolutePath(),
dest.getAbsolutePath()+"/"+_recordAudioFile.getName());
if(rtnCode==0) Toast.makeText(getApplicationContext(),
"成功保存至/SDCard/MyAudioRecord/", 1).show();
else if(rtnCode==1) Toast.makeText(getApplicationContext(),
"尚未录制,保存失败", 0).show();
else if(rtnCode==2) Toast.makeText(getApplicationContext(),
"同名文件已存在,保存失败", 1).show();
}
});
} private short moveFile(String oldPath,String newPath){
File oldFile=new File(oldPath);
if(!oldFile.exists()) return 1;
File newFile=new File(newPath);
if(newFile.exists()) {return 2;}
else
try {
newFile.createNewFile();
FileInputStream fis=new FileInputStream(oldFile);
FileOutputStream fos=new FileOutputStream(newFile);
byte[]buf=new byte[1024];
int bytes;
while((bytes=fis.read(buf))!=-1){
fos.write(buf, 0, bytes);
}
fis.close();fos.close();
//oldFile.delete();//删除旧文件
return 0;
} catch (Exception e) {
e.printStackTrace();
return 5;
}

别忘记加以下的权限:

<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<!--往sdcard中写入数据的权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<!--在sdcard中创建/删除文件的权限 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>

上面的代码只是简单地将录制的音频保存到特定的位置,也没有做详细的出错检查,如判断SD卡的状态。

据此可以做一些简单的应用了,如供自娱自乐的人录制自己唱的歌曲,通过压缩或转码,再上传到服务器,向他人分享。。。

但是说到对声音的处理,博主真是捉襟见肘了,前几日用Lame编码器将录制的wav格式转换为体积小而音质损失较小的MP3时对那些参数一窍不通。

大家如果有兴趣可以试试,Lame编码器是开源的C语言写的代码,可以移植到手机上。

android录音相关的更多相关文章

  1. 【Android】【录音】Android录音--AudioRecord、MediaRecorder

    [Android][录音]Android录音--AudioRecord.MediaRecorder Android提供了两个API用于实现录音功能:android.media.AudioRecord. ...

  2. 微信JSSDK与录音相关的坑

    欢迎各位转载, 以让微信团队重视这些恼人的BUG. 请注明出处微信JSSDK与录音相关的坑 by lzl124631x 最近一直在做微信JSSDK与录音相关的功能开发, 遇到了各种奇尺大坑, 时不时冷 ...

  3. Android 录音和播放

    今天工作上需要做一个一边录音一边播放的功能,大致原因是有一个外部设备输入音频到我们机器,然后我们机器需要马上把音频播放出来.所以了解了一些有关录音和播放的知识.接到这个任务的第一反应就是看看Andro ...

  4. Android UI相关开源项目库汇总

    最近做了一个Android UI相关开源项目库汇总,里面集合了OpenDigg 上的优质的Android开源项目库,方便移动开发人员便捷的找到自己需要的项目工具等,感兴趣的可以到GitHub上给个st ...

  5. 微信JSSDK与录音相关的坑

    微信JSSDK与录音相关的坑 最近一直在做微信JSSDK与录音相关的功能开发, 遇到了各种奇尺大坑, 时不时冷不丁地被坑一道, 让我时常想嘶吼: "微信JSSDK就是个大腊鸡!!!!!!!! ...

  6. 通过Android录音进行简单音频分析

    Android录音有MediaRecorder和AudioRecord两种方式,前者使用方便,可以直接生成录音文件,但是录音格式为aac和amr等等,都经过压缩处理,不方便进行音频分析. 而用Audi ...

  7. android 技术相关Blog

    android 技术相关 LVXIANGAN的专栏 http://blog.csdn.net/LVXIANGAN/article/category/1101038 Android NFC 开发实例 h ...

  8. Android Studio相关的坑

    html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,bi ...

  9. Android View相关知识问答

    Android View相关核心知识问答 Activity Window View之间的三角关系 你真的了解View的坐标吗? 在渲染前获取 View 的宽高 5种手势工具类 浅析Android的窗口

随机推荐

  1. Windows 8 开发系列汇总

    Windows 8 应用开发 Windows 8 应用开发 - 异步调用 Windows 8 应用开发 - 本地数据存储 Windows 8 应用开发 - 挂起与恢复 Windows 8 应用开发 - ...

  2. Cordova - 使用Cordova开发iOS应用实战5(获取手机里照片,并编辑)

    使用Cordova可以很方便的通过js代码读取系统相簿里面的照片,同使用设备摄像头拍照一样,同样需要先添加camera插件. 一,添加camera插件 首先我们要在“终端”中进入工程所在的目录,然后运 ...

  3. 2013级软件工程GitHub账号信息

    GitHub账号信息 序号 班级 学号 姓名 个人GitHub网址 1 信1301-1班 20122951 刘伟 https://github.com/weige8882 2 信1301-1班 201 ...

  4. Infer.net 开源组件: 1, 机器学习入门,要从贝叶斯说起

    我的入门方式,先从应用现象中,总结规律反推本质.一头扎进理论书籍是不对的. 老外的先进,还是体现在传承方面.没办法,我们竞争压力大,有好东西藏着掖着.大家都苦逼 我最开始是从介绍,有了基本概念,见xx ...

  5. .Net分布式异常报警系统-服务端站点管理

    管理站点 对于管理站点, 并没有太复杂的内容, 主要就是对数据库表中的数据进行维护.  管理的实体有3个 WebSite(站点信息), WebService(站点服务器信息), ErrorEntity ...

  6. C语言printf()函数:格式化输出函数

    C语言printf()函数:格式化输出函数 头文件:#include <stdio.h> printf()函数是最常用的格式化输出函数,其原型为:     int printf( char ...

  7. Javascript/jQuery 获取地址栏URL参数的方法

    1.jquery获取url很简单,代码如下 window.location.href; 2.javascript获取url参数 function getUrlParam(name) { var reg ...

  8. 53-whereis 查找文件

    查找文件 whereis [options] file 参数 file 是whereis需要查找的文件,这些文件属于原始代码,二进制文件或是帮助文件 选项 -b               只查找二进 ...

  9. RabbitMQ 路由选择 (Routing)

    让日志接收者能够订阅部分消息.例如,我们可以仅仅将致命的错误写入日志文件,然而仍然在控制面板上打印出所有的其他类型的日志消息. 1.绑定(Bindings) 在前面中我们已经使用过绑定.类似下面的代码 ...

  10. js对象学习

    1. 属性类型 数据属性 ①Configurable 表示能否通过delete删除属性,默认值true ②Enumerable 表示能否通过for-in循环访问属性,默认值true ③Writable ...