精华内容
下载资源
问答
  • Android手机录制音频

    2017-02-10 16:56:32
    我用到的是MediaRecorder的API用来录制手机音频,接下来就是演示一个demo了,我选择的是录制通话过程的音频,也就是实现了一个监听手机通话的小demo。 步骤: 1.开启一个服务; 2.使用TelephonyManager获取系统通话...

    我用到的是MediaRecorder的API用来录制手机音频,接下来就是演示一个demo了,我选择的是录制通话过程的音频,也就是实现了一个监听手机通话的小demo。

    步骤:

    1.开启一个服务;

    2.使用TelephonyManager获取系统通话服务;

    3.根据通话服务返回的状态码进行对应操作;

    4.如果状态码为通话状态则:

            1)实例化一个音频捕获器(录音器)MediaRecorder   mr  =   new  MediaRecorder();

            2)指定录音器的生源,MIC是话筒的声音、VOICE_CALL是通话双方的声音         mr.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL);

            3)设置录制文件的格式       mr.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);

            4)设置录制文件的路径以及名称          mr.setOutputFile(file);

            5)设置录制音频的品质             mr.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);

            6)让录音机处于就绪状态         mr.prepare();

            7)启动录音      mr.start()。

    注意以上设置顺序不要乱。

    5.如果状态码为空闲状态则判断录音机是否被实例化,如果已经实例化则停止录音,并释放录音机资源,把录音机实例至null。



    需要的权限:

    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.RECORD_AUDIO"/>


    主要代码:

    PhoneListenerService.java

    package com.example.phonelistener;
    
    import android.app.Service;
    import android.content.Context;
    import android.content.Intent;
    import android.media.MediaRecorder;
    import android.os.Environment;
    import android.os.IBinder;
    import android.telephony.PhoneStateListener;
    import android.telephony.TelephonyManager;
    
    import java.io.File;
    import java.io.IOException;
    
    /**
     * Created by pactera on 2017/2/10.
     */
    
    public class PhoneListenerService extends Service {
    
        private TelephonyManager tm;
        private MediaRecorder mr;//通话音频捕获器
        private PhoneStateListener listener;
    
        @Override
        public IBinder onBind(Intent intent) {
            return null;
        }
    
        @Override
        public void onCreate() {
            tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
            listener = new PhoneStateListener(){
                @Override
                public void onCallStateChanged(int state, String incomingNumber) {
                    switch (state) {
                        case TelephonyManager.CALL_STATE_IDLE://电话空闲状态
                            if (mr != null) {
                                mr.stop();
                                mr.release();
                                mr = null;
                            }
                            break;
                        case TelephonyManager.CALL_STATE_OFFHOOK://通话状态
                            //实例化音频捕获器
                            mr = new MediaRecorder();
                            //指定录音机的生源,VOICE_CALL代表的是话筒和对方的声音
                            mr.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL);
                            //设置录制文件的格式
                            mr.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
                            //设置录制文件的路径以及名称
                            File file = new File(Environment.getExternalStorageDirectory(),System.currentTimeMillis()+".3gp");
                            mr.setOutputFile(file.getAbsolutePath());
                            //设置音频的品质
                            mr.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
                            //就绪录音机
                            try {
                                mr.prepare();
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                            //启动录音机
                            mr.start();
                            break;
                        case TelephonyManager.CALL_STATE_RINGING://响铃状态
                            break;
                    }
                }
            };
            tm.listen(listener,PhoneStateListener.LISTEN_CALL_STATE);
        }
    
        @Override
        public void onDestroy() {
            if (mr != null) {
                mr.stop();
                mr.release();
                mr = null;
            }
            tm.listen(listener,PhoneStateListener.LISTEN_NONE);
            listener = null;
        }
    }
    

    展开全文
  • 集成到APP里面,可以录制手机屏幕+音频,同时记录用户的操作手势, 用来录制测试视频、或者用作游戏视频分享,那都是极好的!!!~~~ 使用方法 ###1、 将HWScreenRecord.h和HWScreenRecord.m拖入自己的项目中,并...
  • 为避免出现问题(适配问题)。应该要调用:mMediaRecorder.setOnErrorListener(new MediaRecorder.OnErrorListener() { @Override public void onError(MediaRecorder...其中onError部分入下,部分手机定制系统后...

    为避免出现问题(适配问题)。



    应该要调用:

    mMediaRecorder.setOnErrorListener(new MediaRecorder.OnErrorListener() {
    
        @Override
        public void onError(MediaRecorder mr, int what, int extra) {...});

    其中onError部分入下,部分手机定制系统后Native会抛出异常:

                          java.lang.IllegalStateException


    if (mMediaRecorder != null) {
        mMediaRecorder.stop();
        mMediaRecorder.release();
        mMediaRecorder = null;
    }

    应该改为

    if (mMediaRecorder != null) {
        try {
            mMediaRecorder.stop();
        } catch (IllegalStateException e) {
            mMediaRecorder = null;
            mMediaRecorder = new MediaRecorder();
        }
        mMediaRecorder.release();
        mMediaRecorder = null;
    }
    具体原因可以参考:https://blog.csdn.net/u014737138/article/details/49737955


    展开全文
  • 录制音频和在手机系统中获取音频

    千次阅读 2015-12-21 16:13:28
    这里有两种获取音频的方式: 1.录音保存获取音频 点击开始录音按钮之后的开始录音,设置录音的状态,已经设置stop按钮停止录音按钮可以点击 /* ************************************************************...

    <span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">这里有两种获取音频的方式:</span>

    1.录音保存获取音频

    点击开始录音按钮之后的开始录音,设置录音的状态,已经设置stop按钮停止录音按钮可以点击

    	/* ****************************************************************
    	 * 
    	 * 开始录音
    	 */
    	private void startAudio() {
    		// 创建录音频文件
    		// 这种创建方式生成的文件名是随机的
    		fileAudioName = "audio" + GetSystemDateTime.now()
    				+ StringTools.getRandomString(2) + ".mp3";
    		mediaRecorder = new MediaRecorder();
    		// 设置录音的来源为麦克风
    		mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    		mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
    		mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
    		mediaRecorder.setOutputFile(filePath + "/" + fileAudioName);
    		try {
    			mediaRecorder.prepare();
    			mediaRecorder.start();
    			textViewLuYinState.setText("录音中。。。");
    
    			fileAudio = new File(filePath + "/" + fileAudioName);
    			buttonStart.setEnabled(false);
    			buttonStop.setEnabled(true);
    			listViewAudio.setEnabled(false);
    			isLuYin = true;
    		} catch (IllegalStateException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    
    	}

    然后录音有两种结束方式,一种是倒计时结束自动结束,一种是点击停止按钮停止录音

    按钮点击

    		// 停止按钮
    		buttonStop.setOnClickListener(new OnClickListener() {
    			@Override
    			public void onClick(View v) {
    				// TODO Auto-generated method stub
    				Toast.makeText(LuYinActivity.this, "录音时间到", Toast.LENGTH_SHORT).show();
                    <span style="white-space:pre">		</span>timedown.stop();
    				stopAudion();
    				rcChat_popup.setVisibility(View.GONE);
                    timedown.setVisibility(View.GONE);
    			}
    		});
    		

    调用的stopAudion方法,在listView中添加文件显示,更新listView同时更新数据库。

    	/* ******************************************************
    	 * 
    	 * 停止录制
    	 */
    	private void stopAudion() {
    		if (null != mediaRecorder) {
                mHandler.removeCallbacks(mPollTask);
    			// 停止录音
    			mediaRecorder.stop();
    			mediaRecorder.release();
    			mediaRecorder = null;
    			textViewLuYinState.setText("录音停止了");
    
    			// 开始键能够按下
    			buttonStart.setEnabled(true);
    			buttonStop.setEnabled(false);
    			listViewAudio.setEnabled(true);
    			String filePath_adapter = filePath + "/" + fileAudioName;
    			addItem(fileAudioName,filePath_adapter);
    			adapter.notifyDataSetChanged();
    	        volume.setImageResource(R.drawable.amp1);
    		}
    	}
    另一种,倒计时结束自动结束,Chronometer用来显示倒计时,Chronometer是一个控件,每一秒自动刷新

    	   private void initTimer(long total) {
    	        this.timeTotalInS = total;
    	        this.timeLeftInS = total;
    	        timedown.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() {
    	            @Override
    	            public void onChronometerTick(Chronometer chronometer) {
    	                if (timeLeftInS <= 0) {
    	                    Toast.makeText(LuYinActivity.this, "录音时间到", Toast.LENGTH_SHORT).show();
    	                    timedown.stop();
    	                    //录音停止
    	                    stopAudion();
    	                    rcChat_popup.setVisibility(View.GONE);
    	                    timedown.setVisibility(View.GONE);
    	                    return;
    	                }
    	                timeLeftInS--;
    	                refreshTimeLeft();
    	            }
    	        });
    	    }


    结束之后自动保存到之前初始化的地址:mediaRecorder.setOutputFile(filePath + "/" + fileAudioName);


    2.在手机中扫描获取音频然后添加到自己的数据库,由数据库中设置歌单的方式读出来

    点击from_file然后跳转Activity:

    	public void getFiles(){	
    		if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
    			Toast.makeText(this, "暂无外部存储", Toast.LENGTH_SHORT).show();
    			return;
    		}
    
    		new Thread(new Runnable() {
    			
    			@Override
    			public void run() {
    				
    				Uri mImageUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
    				ContentResolver mContentResolver = SearchMP3.this.getContentResolver();
    
    				Cursor mCursor = getContentResolver().query(
    						MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null,
    						MediaStore.MediaColumns.TITLE);
    				
    				while (mCursor.moveToNext()) {
    					//获取文件的路径
    					String filePath = mCursor.getString(mCursor
    							.getColumnIndex(MediaStore.Audio.AudioColumns.DATA));
    					
    					//获取文件的标题
    					String fileTitle = mCursor.getString(mCursor
    							.getColumnIndex(MediaStore.Audio.AudioColumns.TITLE));
    					
    					//获取该文件的时间
    					String fileTime = mCursor.getString(mCursor
    							.getColumnIndex(MediaStore.Audio.AudioColumns.TITLE));
    					
    					long modify = mCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATE_MODIFIED);
    					
    
    					int isMusic = mCursor.getInt(mCursor
    							.getColumnIndex(MediaStore.Audio.Media.IS_MUSIC)); // 是否为音乐
    										
    					if (isMusic!=0) {
    						
    						Map<String, String> map = new HashMap<String, String>();
    						map.put("fileTitle", fileTitle);
    						map.put("filePath", filePath);
    						map.put("fileTime", fileTime);
    						mGruopMap.put(filePath, map);
    						
    					} else {
    						//如果已经扫描过。。。。。不做处理
    					}
    				}
    				
    				mCursor.close();
    				
    				//通知Handler扫描图片完成
    				mHandler.sendEmptyMessage(SCAN_OK);
    			}
    		}).start();
    		
    		
    	}
    	


    	/**
    	 * 组装分组界面listView的数据源,因为我们扫描手机的时候将图片信息放在HashMap中
    	 * 所以需要遍历HashMap将数据组装成List
    	 * 
    	 * @param mGruopMap
    	 * @return
    	 */
    	private List<FileBean> makeFileList(HashMap<String, Map<String, String>> mGruopMap){
    		if(mGruopMap.size() == 0){
    			return null;
    		}
    		List<FileBean> list = new ArrayList<FileBean>();
    		
    		Iterator<Map.Entry<String, Map<String, String>>> it = mGruopMap.entrySet().iterator();
    		while (it.hasNext()) {
    			Map.Entry<String, Map<String, String>> entry = it.next();
    			FileBean mFileBean = new FileBean();
    			String key = entry.getKey();
    			Map<String, String> map = entry.getValue();
    			
    			mFileBean.setFilePath(map.get("filePath"));
    			mFileBean.setFileTime(map.get("fileTime"));
    			mFileBean.setFileTitle(map.get("fileTitle"));
    			
    			list.add(mFileBean);
    		}		
    		return list;
    		
    	}
    listview的自定义adapter:更新"确定(1)"括号里面的数字

    package com.monkeylluffy.recorder;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    
    import org.w3c.dom.Text;
    
    import com.monkeylluffy.recorder.tools.FileBean;
    import com.nineoldandroids.animation.AnimatorSet;
    import com.nineoldandroids.animation.ObjectAnimator;
    
    import android.content.Context;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    import android.widget.CheckBox;
    import android.widget.Checkable;
    import android.widget.CompoundButton;
    import android.widget.CompoundButton.OnCheckedChangeListener;
    import android.widget.TextView;
    
    public class AddFileAdapter extends BaseAdapter{
    
    	private List<FileBean> list;
    	protected LayoutInflater mInflater;
    	private TextView textView;
    	
    	public AddFileAdapter(Context context,List<FileBean> list,TextView textView){
    		this.list = list;
    		this.mInflater = LayoutInflater.from(context);
    		this.textView = textView;
    		
    	}
    	
    	@Override
    	public int getCount() {
    		// TODO Auto-generated method stub
    		return list.size();
    	}
    
    	@Override
    	public Object getItem(int position) {
    		// TODO Auto-generated method stub
    		return list.get(position);
    	}
    
    	@Override
    	public long getItemId(int position) {
    		// TODO Auto-generated method stub
    		return position;
    	}
    
    	@Override
    	public View getView(final int position, View convertView, ViewGroup parent) {
    		// TODO Auto-generated method stub
    		final ViewHolder viewHolder;
    		FileBean mFileBean = list.get(position);
    		String path = mFileBean.getFilePath();
    		if(convertView == null){
    			viewHolder = new ViewHolder();
    			convertView = mInflater.inflate(R.layout.additem, null);
    			viewHolder.mTextViewPath = (TextView) convertView.findViewById(R.id.filePath);
    			viewHolder.mTextViewTitle = (TextView) convertView.findViewById(R.id.fileTitle);
    			viewHolder.mChoose = (CheckBox) convertView.findViewById(R.id.filechoose);
    			convertView.setTag(viewHolder);
    		}else{
    			viewHolder = (ViewHolder) convertView.getTag();
    		}
    		
    		viewHolder.mTextViewTitle.setText(mFileBean.getFileTitle());
    		viewHolder.mTextViewPath.setText(mFileBean.getFilePath());
    		viewHolder.mChoose.setOnCheckedChangeListener(new OnCheckedChangeListener() {
    			
    			@Override
    			public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
    				// TODO Auto-generated method stub
    				if(!mSelectMap.containsKey(position) || !mSelectMap.get(position)){
    					addAnimation(viewHolder.mChoose);
    				}
    				mSelectMap.put(position, isChecked);
    				textView.setText("确定("+getSelectItems().size()+")");
    				
    			}
    		});	
    		viewHolder.mChoose.setChecked(mSelectMap.containsKey(position) ? mSelectMap.get(position) : false);
    		
    				
    		return convertView;
    		
    	}
    	
    	/**
    	 * 获取选中的Item的position
    	 * @return
    	 */
    	public List<Integer> getSelectItems(){
    		List<Integer> list = new ArrayList<Integer>();
    		for(Iterator<Map.Entry<Integer, Boolean>> it = mSelectMap.entrySet().iterator(); it.hasNext();){
    			Map.Entry<Integer, Boolean> entry = it.next();
    			if(entry.getValue()){
    				list.add(entry.getKey());
    			}
    		}
    		
    		return list;
    	}
    	
    	/**
    	 * 给CheckBox加点击动画,利用开源库nineoldandroids设置动画 
    	 * @param view
    	 */
    	private void addAnimation(View view){
    		float [] vaules = new float[]{0.5f, 0.6f, 0.7f, 0.8f, 0.9f, 1.0f, 1.1f, 1.2f, 1.3f, 1.25f, 1.2f, 1.15f, 1.1f, 1.0f};
    		AnimatorSet set = new AnimatorSet();
    		set.playTogether(ObjectAnimator.ofFloat(view, "scaleX", vaules), 
    				ObjectAnimator.ofFloat(view, "scaleY", vaules));
    				set.setDuration(150);
    		set.start();
    	}
    	
    	
    	private HashMap<Integer, Boolean> mSelectMap = new HashMap<Integer, Boolean>();
    	
    	public static class ViewHolder{
    		public TextView mTextViewTitle;
    		public TextView mTextViewPath;
    		public CheckBox mChoose;
    	}
    }


    点击确定:通过adpter中返回的position,将这几个的数据添加到数据库中,然后在页面读出来:

    		title_right.setOnClickListener(new OnClickListener() {
    			
    			@Override
    			public void onClick(View v) {
    				// TODO Auto-generated method stub
    				//添加数据库,跳转参数的设置
    				Toast.makeText(SearchMP3.this, "选中 " + adapter.getSelectItems().size() + " item", Toast.LENGTH_LONG).show();
    				List<Integer> theList = adapter.getSelectItems();
    			    db = myDBHelper.getWritableDatabase();
    				for (int i = 0; i < theList.size(); i++) {
    					FileBean fileBean = list.get(theList.get(i));
    					ContentValues values1 = new ContentValues();
    			        values1.put("filePath", fileBean.getFilePath());
    			        values1.put("fileName", fileBean.getFileTitle());
    			        //参数依次是:表名,强行插入null值得数据列的列名,一行记录的数据
    			        db.insert("songlist", null, values1);
    			        
    			        Toast.makeText(SearchMP3.this, "插入完毕~", Toast.LENGTH_SHORT).show();
    				}
    				
    				Intent intent = new Intent(SearchMP3.this,LuYinActivity.class);
    				startActivity(intent);
    			}
    		});





    //此处有几处瑕疵,晚上修改,xml明天上传

    1.在添加时没有避免列表中已经有的就不在扫描出来

    2.在点击确定的时候,应该做的是finish(),用startResultActivity和setResult()







    展开全文
  • 手机一般都提供了麦克风硬件,而Android系统就可以利用该硬件来录制音频了。 为了在Android应用中录制音频,Android提供了MediaRecorder类,使用MediaRecorder录制音频的过程如下: 1、创建MediaRecorder对象。 2...

    手机一般都提供了麦克风硬件,而Android系统就可以利用该硬件来录制音频了。

    为了在Android应用中录制音频,Android提供了MediaRecorder类,使用MediaRecorder录制音频的过程如下:

    1、创建MediaRecorder对象。

    2、调用MediaRecorder对象的setAudioSource()方法设置声音来源,一般传入MediaRecorder.AudioSource.MIC参数指定录制来自麦克风的声音。

    3、调用MediaRecorder对象的setOutputFormat()设置所录制的音频文件的格式。

    4、调用MediaRecorder对象的setAudioEncoder()、setAudioEncodingBitRate(int  bitRate)、setAudioSamplingRate(int  samplingRate)设置所录制的声音的编码格式、编码位率、采样率等,这些参数将可以控制所录制的声音的品质、文件的大小。一般来说,声音品质越好,声音文件越大。

    5、调用MediaRecorder的setOutputFile(String  path)方法设置录制的音频文件的保存位置。

    6、调用MediaRecorder的prepare()方法准备录制。

    7、调用MediaRecorder对象的start()方法开始录制。

    8

    录制完成,调用MediaRecorder对象的stop()方法停止录制,并调用release()方法释放资源。

    注:步骤3、4两个步骤千万不能搞反,否则程序将会抛出IllegalStateException异常。

     

    import java.io.File;
    import java.io.IOException;

     

    import android.media.MediaRecorder;
    import android.os.Bundle;
    import android.os.Environment;
    import android.app.Activity;
    import android.view.Menu;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.ImageButton;
    import android.widget.Toast;

     

    public class RecodeSound extends Activity implements OnClickListener{
      //程序中的按钮
      ImageButton recode;
      ImageButton stop;
      //系统的音频文件
      File soundFile;
      MediaRecorder mRecorder;

     

      @Override
      protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_recode_sound);
        //获取程序界面中的两个按钮
        recode = (ImageButton) findViewById(R.id.recode);
        stop = (ImageButton) findViewById(R.id.stop);
        //为两个按钮的单击事件绑定监听器
        recode.setOnClickListener(this);
        stop.setOnClickListener(this);
      }

      @Override
      protected void onDestroy() {
        if(soundFile != null && soundFile.exists()){
          //停止录音
          mRecorder.stop();
          //释放资源
          mRecorder.release();
          mRecorder = null;
        }
        super.onDestroy();
      }

     

      @Override
      public void onClick(View source) {
        switch(source.getId()){
          //单击录音按钮
          case R.id.recode:
            if(!Environment.getExternalStorageState()
                  .equals(android.os.Environment.MEDIA_MOUNTED)){
              Toast.makeText(RecodeSound.this, "SD卡不存在,请插入SD卡", 5000).show();
              return;
            }
            try {
              //创建保存录音的音频文件
              soundFile = new File(Environment.getExternalStorageDirectory().getCanonicalFile()+"/sound.amr");
              mRecorder = new MediaRecorder();
              //设置录音的声音来源
              mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
              //设置录制的声音的输出格式(必须在设置声音编码格式之前设置)
              mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
              //设置声音编码的格式
              mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
              mRecorder.setOutputFile(soundFile.getAbsolutePath());
              mRecorder.prepare();
              //开始录音
              mRecorder.start();
            } catch (IOException e) {
              e.printStackTrace();
            }
            break;
          //单击停止按钮
          case R.id.stop:
            if(soundFile != null && soundFile.exists()){
              //停止录音
              mRecorder.stop();
              //释放资源
              mRecorder.release();
              mRecorder = null;
            }
            break;
        }

      }

     

     }

    录制完成后将可以看到/mnt/sdcard/目录下生成一个sound.amr文件,这就是刚刚录制的音频文件-----Android模拟器将会直接使用宿主电脑上的麦克风,一次如果读者的电脑上有麦克风,那么该程序即可正常录制声音。

    上面的程序需要使用系统的麦克风进行录音,因此需要向该程序授予录音的权限没也就是在AndroidManifest.xml文件中增加如下配置:

    <!-- 授予该程序录制声音的权限 -->
    <uses-permission android:name="android.permission.RECORD_AUDIO"/>

    转载于:https://www.cnblogs.com/jiww/p/5619849.html

    展开全文
  • Android之MediaRecorder录制音频

    千次阅读 2016-07-06 21:18:29
    手机一般都提供麦克风硬件,而Android系统可以利用该硬件来录制音频了。 ——使用MediaRecorder录制音频的步骤:  1)创建MediaRecorder对象  2)调用MediaRecorder对象的setAudioSource()方法设置声音来源,一般...
  • Android手机一般都提供麦克风的硬件,而Android系统可以利用该硬件来录制音频。 为了在Android应用中录制音频,Android提供了MediaRecorder类,使用MediaRecorder录制音频的过程很简单,步骤如下: 1:创建...
  • MediaRecorder录制音频文件

    千次阅读 2017-06-08 23:57:20
    MediaRecorder录制音频文件使用手机麦克风硬件和Android系统MediaRecorder类实现。步骤: 在activity_main文件上添加两个按钮,分别为开始按钮和停止按钮。 //获取按钮 record = (Button)findViewById(R.id.record)...
  • 对于录音,很多人都很熟悉,不管是手机还是电脑都是可以录制外部声音的,但是对于录制内部声音很多人不是很了解,其实在生活中,使用较多的还是录制电脑内部的声音,至于外部声音,直接使用手机录制就可以了,那如果...
  • Android 手机录制wav格式音频文件实现

    万次阅读 2015-03-26 16:10:24
    上一篇文章已经实现了在Android手机上使用MediaRecorder录音,但是后期在处理这些音频文件的时候发现3gp格式的音频不大方便处理,使用wav格式的音频处理起来更方便一些! 这里需要用到AudioRecord 类,通过 int ...
  • Android手机一般都提供麦克风的硬件,而Android系统可以利用该硬件来录制音频。 为了在Android应用中录制音频,Android提供了MediaRecorder类,使用MediaRecorder录制音频的过程很简单,步骤如下: Step1:创建...
  • 可以把.amr格式的视频、音频文件转换成常见的视频、音频文件的软件,个人觉得这个软件非常不错,有需要的朋友可以下载试下。
  • 生活中,大家避不可免的想要记录下生活乐趣,这就需要手机录制音频和视频的功能,android提供了MediaRecorder来录制音频或者视频。 MediaRecorder包含了Audio和video的记录功能,在Android的界面上,Music和Video...
  • android音频录制

    2012-06-19 09:46:20
    目前,使用手机拍照、摄像几乎成了手机必备的功能。...第二:在要AndroidManifest.xml中添加音频录制和照相机权限,另外,我们采集的音视频最后是不是要保存到SDCard上呢,所以呢也要添加SDCard的读写权限
  • Android 开发 MediaRecorder音频录制 前言  MediaRecorder类是Android sdk提供的一个专门用于音视频录制,一般利用手机...这个类是属于简单的音频录制类,录制音频简单容易但是对音频流的控制也比较...
  • 最简单的大家应该都使用过,就是我们手机或者电脑自带的录音软件,这些用起来很简单,但是一般功能都比较单一,无法满足我们的需求,如果我们想录制电脑系统发出的声音该怎么办呢?那内录音频工具哪个好,怎么录制...
  • 通过Host.audio.startRecord方法开始录制音频文件,用Host.audio.stopRecord方法在5秒内停止录制,产生的音频文件可以通过Host.file.readFileList查询。 但是经过多次录制后</strong>,...
  • 大家在遇到这样的情况的时候会不会是不是直接用手机录制呢?生活中常常会需要用到一些录音软件,那么哪个录音软件比较简单又好用呢?该怎么做呢?下面小编就分享一个工具,让你们在轻松录音,这个方法录音工具效果...
  • 1、在电脑上录制QQ语音内容,相当于在线录音,除了有些手机不能支持外,当然就需要第三方录音软件的辅助了;   2、在电脑上运行录音工具,操作一目了然,把录音的格式,声音来源等都修改好,就可以准备录制了;...
  • 前言  Android SDK 提供了两套音频采集的API,分别是:MediaRecorder 和 AudioRecord,前者是一个更加上层一点的API,它可以... 开始录制与保存录制音频文件 停止录制 给音频文件添加头部信息,并且转换格式成wa.
  • 音频录制是不管生活还是...1、首先我们要明白的是录制屏幕声音,即系统内部声音,像平时手机中使用的录音机只能录制手机以外的其他声音,录制屏幕声音需要在电脑上进行; 2、在电脑上运行一个音频录制工具——迅...
  • 现在是互联网时代,我们都寸步不离手机,电脑等...1.首先今天要说的是有个电脑端的音频录制工具——迅捷音频录制工具,使用方便,而且是可以自定义音频的格式以及声音来源哦; 2.打开之后,首先看到的是格式选项...
  • AudioRecord音频录制

    2020-03-03 17:52:42
     Android SDK 提供了两套音频采集的API,分别是:MediaRecorder 和 AudioRecord,前者是一个更加上层一点的API,它可以直接把手机麦克风录入的音频数据进行编码压缩(如AMR、MP3等)并存成文件,而后者则更接近底层...
  • android手机设备提供了很多的硬件供用户操作,也提供了很多的api接口供程序员调用,由java代码调用c代码进而驱动硬件设备,如此精巧的一个设备,如此精巧的一套实现方案。 就像单片机控制需要设置很多参数一样 ,...
  • 使用MediaRecorder录制音频手机一般都提供麦克风硬件,而Android系统可以利用该硬件来录制音频了。使用MediaRecorder录制音频的步骤: 1)创建MediaRecorder对象 mediaRecorder = new MediaRecorder(); 2)调用...
  • 这里Android为我们提供了MedioRecorder来录制音频与视频。下图就是MediaRecorder的状态转换图。 音频状态转换 reset()–setAudioSource()设置声音来源MIC–setOutputFormat()设置所录制的音频文件的格式–...
  • 很多人潜意思的录音还存在与外部声音的录制,其实直接录制系统声音音质会好很多,但是目前只存在于电脑中可以录制内部声音,手机还是不支持的哦!那网页上的声音如何在线录制,电脑音频录制软件哪个好呢? ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 530
精华内容 212
关键字:

手机录制音频