android录音相关

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录音相关

时间: 2024-10-26 09:12:24

android录音相关的相关文章

&#24494;&#20449;JSSDK&#19982;&#24405;&#38899;&#30456;&#20851;&#30340;&#22353;

微信JSSDK与录音相关的坑 最近一直在做微信JSSDK与录音相关的功能开发, 遇到了各种奇尺大坑, 时不时冷不丁地被坑一道, 让我时常想嘶吼: "微信JSSDK就是个大腊鸡!!!!!!!!!!" 现在工作得到阶段性成果, 有时间休息总结下, 故来整理一下这段时间碰到的bug, 希望做个前车之鉴, 劝大家谨慎入坑. checkJsApi 功能: 判断当前客户端版本是否支持指定JS接口 转载:  http://www.fwqtg.net/%E5%BE%AE%E4%BF%A1jssdk%E

Android录音--AudioRecord、MediaRecorder

Android提供了两个API用于实现录音功能:android.media.AudioRecord.android.media.MediaRecorder. 网上有很多谈论这两个类的资料.现在大致总结下: 1.AudioRecord 主要是实现边录边播(AudioRecord+AudioTrack)以及对音频的实时处理(如会说话的汤姆猫.语音) 优点:语音的实时处理,可以用代码实现各种音频的封装 缺点:输出是PCM语音数据,如果保存成音频文件,是不能够被播放器播放的,所以必须先写代码实现数据编码

Android UI相关开源项目库汇总

最近做了一个Android UI相关开源项目库汇总,里面集合了OpenDigg 上的优质的Android开源项目库,方便移动开发人员便捷的找到自己需要的项目工具等,感兴趣的可以到GitHub上给个star. 抽屉菜单 MaterialDrawer ★7337 - 安卓抽屉效果实现方案 Side-Menu.Android ★3865 - 创意边侧菜单 FlowingDrawer ★1744 - 向右滑动流动抽屉效果 SlidingRootNav ★1338 - 仿DrawerLayout的View

[Android]蓝牙相关接口及方法

首先,要操作蓝牙,先要在AndroidManifest.xml里加入权限 <uses-permissionandroid:name="android.permission.BLUETOOTH_ADMIN" /> <uses-permissionandroid:name="android.permission.BLUETOOTH" /> 然后,看下api,Android所有关于蓝牙开发的类都在android.bluetooth包下,共有8个类

我的Android开发相关文章

Pro Android学习笔记: Pro Android学习笔记(一零七):2D动画(2):layout渐变动画 2014.7.25 Pro Android学习笔记(一零六):2D动画(1):frame by frame 2014.7.21 Pro Android学习笔记(一零五):Alarm Manager(3):request code 2014.7.17 Pro Android学习笔记(一零四):Alarm Manager(2):周期发送和取消 2014.7.15 Pro Android学

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

Android录音有MediaRecorder和AudioRecord两种方式,前者使用方便,可以直接生成录音文件,但是录音格式为aac和amr等等,都经过压缩处理,不方便进行音频分析. 而用AudioRecord可以得到PCM编码的原音频数据,可以用FFT对数据进行处理,简单分析声音的频率. 1.AndroidRecord录音 private static final String FILE_NAME = "MainMicRecord"; private static final i

android database 相关

以前用database从来都是直接执行,db.execute(). 今天看公司1.0的源码中又学习了一个逻辑, SecureSQLiteDatabase db = null; try { db = mOpenHelper.openDatabase(); db.beginTransaction(); try { todo 数据操作 }; //db 所要执行的操作 db.update(MstDataEntry.TABLE_NAME, values, whereClause, whereArgs);

android 技术相关Blog

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

Android 录音(MediaRecorder)与播放(MediaPlayer)

通过MediaRecorder和MediaPlayer实现声音的录制和播放,代码比较简单,直接贴代码.xml文件里面只有四个按钮就不贴了. UI 代码: VoiceActivity.class package com.zy.ione; import com.zy.media.UPlayer; import com.zy.media.URecorder; import android.app.Activity; import android.os.Bundle; import android.os