• Android 中歌曲录制。。。


    package com.king.android.media;

    import java.io.File;
    import java.io.FilenameFilter;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;

    import android.app.ListActivity;
    import android.content.Intent;
    import android.media.MediaRecorder;
    import android.net.Uri;
    import android.os.Bundle;
    import android.os.Environment;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.ArrayAdapter;
    import android.widget.Button;
    import android.widget.ListView;

    import com.king.android.R;

    /**

     * 描述:声音录制
     * 作者:Andy.Liu
     * 时间: 2012-7-30  上午07:27:06
     *
    */
    public class RecordActivity extends ListActivity implements OnClickListener {
        //录制的音频文件
        private File mRecAudioFile,mRecAudioPath;
        
        private MediaRecorder mMediaRecoder;// MediaRecorder 对象
        
        private List<String> mMusicList = new ArrayList<String>();    //录音文件列表
        
        private String strTempFile = "recaudio_";    //临时文件前缀
        
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            
            super.onCreate(savedInstanceState);
            setContentView(R.layout.mediarecore_layout);
            
            Button btnOperate = (Button) findViewById(R.id.btnStart);
            btnOperate.setOnClickListener(this);
             btnOperate = (Button) findViewById(R.id.btnStop);
             btnOperate.setOnClickListener(this);
             mRecAudioPath = Environment.getExternalStorageDirectory();
            
             refreshFile(mRecAudioPath.getAbsolutePath(),".amr");
             // musicList();
        }

        @Override
        public void onClick(View v) {
            switch(v.getId()){
            case R.id.btnStop:
                doStop();
                break;
                
            case R.id.btnStart:
                doStart();
                break;
            }
        }
        
        //开始录音
        private void doStart(){
            try {
                //创建录音文件
                mRecAudioFile = File.createTempFile(strTempFile, ".amr", mRecAudioPath);
                
                //实例化MediaRecorder对象
                mMediaRecoder = new MediaRecorder();
                //设置麦克风
                mMediaRecoder.setAudioSource(MediaRecorder.AudioSource.MIC);
                //设置输出的文件格式
                mMediaRecoder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
                //设置音频文件 的编码
                mMediaRecoder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
                //文件输出路径
                mMediaRecoder.setOutputFile(mRecAudioFile.getAbsolutePath());
                //准备
                mMediaRecoder.prepare();
                //开始
                mMediaRecoder.start();
            } catch (IOException e) {
                
                e.printStackTrace();
            }finally{
            }
        }
        
        private void doStop(){
            if(null!=mRecAudioFile){
                mMediaRecoder.stop();        //停止录音
                mMusicList.add(mRecAudioFile.getName());
                ArrayAdapter<String> musicList = new ArrayAdapter<String>(RecordActivity.this, R.layout.list, mMusicList);
                setListAdapter(musicList);
                mMediaRecoder.release();
                mMediaRecoder = null;    
            }
        }
        
        /* 播放录音文件 */
        private void playMusic(File file)
        {
            Intent intent = new Intent();
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            intent.setAction(android.content.Intent.ACTION_VIEW);
            /* 设置文件类型 */
            intent.setDataAndType(Uri.fromFile(file), "audio");
            startActivity(intent);
        }
        @Override
        /* 当我们点击列表时,播放被点击的音乐 */
        protected void onListItemClick(ListView l, View v, int position, long id)
        {
            /* 得到被点击的文件 */
            File playfile = new File(mRecAudioPath.getAbsolutePath() + File.separator + mMusicList.get(position));
            /* 播放 */
            playMusic(playfile);
        }
        
        /**
         * 
         *TODO:播放列表
         *Author:Andy.Liu
         *Create Time:2012-7-28 上午11:27:26
         *TAG:
         *Return:void
         
    */
        
        public void musicList(){
            //取得指定位置的文件显示到播放列表。
            File home = mRecAudioPath;
            if(home.listFiles(new MusicFilter()).length>0){
                for(File file:home.listFiles(new MusicFilter())){
                    mMusicList.add(file.getName());
                }
                ArrayAdapter<String> musicList = new ArrayAdapter<String>(RecordActivity.this, R.layout.list, mMusicList);
                setListAdapter(musicList);
            }
        }
        

        /**
         * 
        递归法获取文件夹文件
         *TODO:TODO
         *Author:Andy.Liu
         *Create Time:2012-7-29 下午11:40:33
         *TAG:
    @param path   文件路径,一般选择根目录
         *TAG:
    @param fileType 文件类型。
         *Return:void
         
    */
        public void refreshFile(String path,String fileType){
            File file = new File(path);
            File[] files = file.listFiles();
            if(null==files)
                return;
            
            for(int i = 0;i<files.length;i++){
                if(files[i].isDirectory()){
                    refreshFile(files[i].getAbsolutePath(),fileType);        //注意这里的递归方法 
                }else{
                    if(files[i].getName().endsWith(fileType))
                    //    allFiles.add(files[i]);
                        mMusicList.add(file.getName());
                }
            }
        }
        
        
        //过渡文件类型
        class MusicFilter implements FilenameFilter{

            @Override
            public boolean accept(File dir, String filename) {
                return filename.endsWith(".amr");
            }
        }

    }
    有些东西会,但不精通,而我现在要做的就是精通,复习回顾,整理自己的框架,举一反三。。。
  • 相关阅读:
    td 内容自动换行 table表格td设置宽度后文字太多自动换行
    拿到别人的VUE项目要怎样做
    npm install相关参数详解
    自定义starter valar
    Linux 文件映射虚拟内存操作
    CH9121网络串口透传模块STM32驱动
    shell脚本test命令使用总结和实例
    bootloader与app程序合并程序
    shell基础之多文件编程
    STM32G0低功耗介绍
  • 原文地址:https://www.cnblogs.com/liuzenglong/p/2614514.html
Copyright © 2020-2023  润新知