/** * Uses the settings from a CamcorderProfile object for recording. This method should be called * after the video AND audio sources are set, and before setOutputFile(). If a time lapse * CamcorderProfile is used, audio related source or recording parameters are ignored. * * @param profile the CamcorderProfile to use * @see android.media.CamcorderProfile */ public void setProfile(CamcorderProfile profile) { setOutputFormat(profile.fileFormat); setVideoFrameRate(profile.videoFrameRate); setVideoSize(profile.videoFrameWidth, profile.videoFrameHeight); setVideoEncodingBitRate(profile.videoBitRate); setVideoEncoder(profile.videoCodec); if (profile.quality >= CamcorderProfile.QUALITY_TIME_LAPSE_LOW && profile.quality <= CamcorderProfile.QUALITY_TIME_LAPSE_QVGA) { // Nothing needs to be done. Call to setCaptureRate() enables // time lapse video recording. } else { setAudioEncodingBitRate(profile.audioBitRate); setAudioChannels(profile.audioChannels); setAudioSamplingRate(profile.audioSampleRate); setAudioEncoder(profile.audioCodec); } }
/** Starts a new recording. */ public boolean startRecording(int seconds) { isRecordingStart = true; // String state = android.os.Environment.getExternalStorageState(); // if (!state.equals(android.os.Environment.MEDIA_MOUNTED)) { // throw new IOException("SD Card is not mounted. It is " + state + // "."); // } try { // make sure the directory we plan to store the recording in exists File directory = new File(path).getParentFile(); if (!directory.exists() && !directory.mkdirs()) { isRecordingStart = false; throw new IOException("Path to file could not be created."); } recorder = new MediaRecorder(); recorder.setAudioSource(MediaRecorder.AudioSource.MIC); if (MEDIA_TYPE.equals(".amr")) { recorder.setOutputFormat(MediaRecorder.OutputFormat.RAW_AMR); recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); } else { // recorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT); recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); recorder.setAudioChannels(1); // recorder.setAudioSamplingRate(SAMPLE_RATE); recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); // recorder.setAudioEncodingBitRate(AUDIO_BITRATE); } recorder.setOutputFile(path); // recorder.setMaxDuration(seconds * 1000); recorder.prepare(); recorder.start(); recorder.setOnErrorListener(this); recorder.setOnInfoListener(this); } catch (Exception ex) { ex.printStackTrace(); isRecordingStart = false; return false; } return true; }
/** * Default constructor * * <p>Instantiates a new recorder, in case of compressed recording the parameters can be left as * 0. In case of errors, no exception is thrown, but the state is set to ERROR */ public MediaRecorderWrapper() { try { mRecorder = new MediaRecorder(); mRecorder.setAudioEncodingBitRate(24000); mRecorder.setAudioChannels(1); mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); fPath = null; state = State.INITIALIZING; } catch (Exception e) { if (e.getMessage() != null) { SurespotLog.e(MediaRecorderWrapper.class.getName(), e, e.getMessage()); } else { SurespotLog.e( MediaRecorderWrapper.class.getName(), e, "Unknown error occured while initializing recording"); } state = State.ERROR; } }
/** * 开始录音 * * @version 1.0 * @author zyh * @param chatId 会话Id */ public void startRecording(String chatId) { if (recoder == null) { recoder = new MediaRecorder(); recoder.setAudioSource(1); recoder.setOutputFormat(3); recoder.setAudioEncoder(1); recoder.setAudioChannels(1); recoder.setAudioEncodingBitRate(12200); recoder.setOnErrorListener(new RecorderErrorListener()); } else { recoder.stop(); recoder.reset(); } recordFileName = System.currentTimeMillis() + ".amr"; recordFilePath = getRecordFilePath(chatId); file = new File(recordFilePath); recoder.setOutputFile(file.getAbsolutePath()); try { recoder.prepare(); recoder.start(); atomicBoolean.set(true); startTime = new Date().getTime(); executor.execute(new CalculateRunnable(this)); return; } catch (IllegalStateException localIllegalStateException) { Log.i("voice", "IllegalStateException thrown while trying to record a greeting"); atomicBoolean.set(false); recoder.release(); recoder = null; return; } catch (IOException localIOException) { Log.i("voice", "IOException thrown while trying to record a greeting"); atomicBoolean.set(false); recoder.release(); recoder = null; } }
private boolean initAndStartMediaRecorder(RecordParams recordParams, int fileSizeLimit) { LogUtils.i(TAG, "<initAndStartMediaRecorder> start"); try { /** * M:Changed to catch the IllegalStateException and NullPointerException. And the * IllegalStateException will be caught and handled in RuntimeException .@{ */ mSelectEffect = recordParams.mAudioEffect; mRecorder = new MediaRecorder(); mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); mRecorder.setOutputFormat(recordParams.mOutputFormat); mRecorder.setOutputFile(mSampleFile.getAbsolutePath()); if (RecordParamsSetting.canSelectMode()) { MediaRecorderEx.setHDRecordMode(mRecorder, recordParams.mHDRecordMode, false); } /** M:Add for create/activate/delete AudioEffect at native layer. @{ */ if (RecordParamsSetting.canSelectEffect()) { int iSelEffects = 0; if (mSelectEffect[RecordParamsSetting.EFFECT_AEC]) { iSelEffects |= (1 << RecordParamsSetting.EFFECT_AEC); } if (mSelectEffect[RecordParamsSetting.EFFECT_NS]) { iSelEffects |= (1 << RecordParamsSetting.EFFECT_NS); } if (mSelectEffect[RecordParamsSetting.EFFECT_AGC]) { iSelEffects |= (1 << RecordParamsSetting.EFFECT_AGC); } MediaRecorderEx.setPreprocessEffect(mRecorder, iSelEffects); } /** @} */ mRecorder.setAudioEncoder(recordParams.mAudioEncoder); mRecorder.setAudioChannels(recordParams.mAudioChannels); mRecorder.setAudioEncodingBitRate(recordParams.mAudioEncodingBitRate); mRecorder.setAudioSamplingRate(recordParams.mAudioSamplingRate); if (fileSizeLimit > 0) { mRecorder.setMaxFileSize(fileSizeLimit); } mRecorder.setOnErrorListener(this); /** @}* */ mRecorder.prepare(); mRecorder.start(); } catch (IOException exception) { LogUtils.e(TAG, "<initAndStartMediaRecorder> IO exception"); // M:Add for when error ,the tmp file should been delete. handleException(true, exception); mListener.onError(this, ErrorHandle.ERROR_RECORDING_FAILED); return false; } /** * M: used to catch the null pointer exception in ALPS01226113, and never show any toast or * dialog to end user. Because this error just happened when fast tapping the file list button * after tapping record button(which triggered by tapping the recording button in audio play * back view).@{ */ catch (NullPointerException exception) { handleException(true, exception); return false; } /** @} */ catch (RuntimeException exception) { LogUtils.e(TAG, "<initAndStartMediaRecorder> RuntimeException"); // M:Add for when error ,the tmp file should been delete. handleException(true, exception); mListener.onError(this, ErrorHandle.ERROR_RECORDER_OCCUPIED); return false; } LogUtils.i(TAG, "<initAndStartMediaRecorder> end"); return true; }