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语言写的代码,可以移植到手机上。

更多相关文章

  1. Attribute is missing the Android namespace prefix——android
  2. Unity2019通过unity获取Android动态权限(不用在Android写插件)
  3. Android文件系统的结构及目录用途、操作方法 整理
  4. Android NDK开发之Android.mk文件
  5. Android studio 3.1.4 无法获取pom文件
  6. Android Eclipse JNI 调用 .so文件加载
  7. Android 保存文件路径
  8. 在Windows系统中使用NDK编译Android二进制文件并运行

随机推荐

  1. android中进度条控件
  2. Android学习札记17:ImageView中的setImage
  3. 2011.10.18——— android 自定义Animati
  4. Android中如何自己制作su
  5. Android休眠唤醒机制简介(二)
  6. JS判断客户端类型(ipad,iphone,android)
  7. Android 简单的账号密码登陆界面(IO流)
  8. Android Studio 环境问题
  9. Android 开发系列 2 Activity
  10. 为Android软件创建快捷方式