package com.laifeng.sopcastsdk.audio; import android.annotation.TargetApi; import android.media.AudioFormat; import android.media.AudioRecord; import android.media.MediaRecorder; import com.laifeng.sopcastsdk.configuration.AudioConfiguration; /** * @Title: AudioUtils * @Package cn.wecoder.camerademo.audio * @Description: * @Author Jim * @Date 16/3/24 * @Time 下午5:54 * @Version */ public class AudioUtils { public static boolean checkMicSupport(AudioConfiguration audioConfiguration) { boolean result; int recordBufferSize = getRecordBufferSize(audioConfiguration); byte[] mRecordBuffer = new byte[recordBufferSize]; AudioRecord audioRecord = getAudioRecord(audioConfiguration); try { audioRecord.startRecording(); } catch (Exception e) { e.printStackTrace(); } int readLen = audioRecord.read(mRecordBuffer, 0, recordBufferSize); result = readLen >= 0; try { audioRecord.release(); } catch (Exception e) { e.printStackTrace(); } return result; } public static int getRecordBufferSize(AudioConfiguration audioConfiguration) { int frequency = audioConfiguration.frequency; int audioEncoding = audioConfiguration.encoding; int channelConfiguration = AudioFormat.CHANNEL_CONFIGURATION_MONO; if(audioConfiguration.channelCount == 2) { channelConfiguration = AudioFormat.CHANNEL_CONFIGURATION_STEREO; } int size = AudioRecord.getMinBufferSize(frequency, channelConfiguration, audioEncoding); return size; } @TargetApi(18) public static AudioRecord getAudioRecord(AudioConfiguration audioConfiguration) { int frequency = audioConfiguration.frequency; int audioEncoding = audioConfiguration.encoding; int channelConfiguration = AudioFormat.CHANNEL_CONFIGURATION_MONO; if(audioConfiguration.channelCount == 2) { channelConfiguration = AudioFormat.CHANNEL_CONFIGURATION_STEREO; } int audioSource = MediaRecorder.AudioSource.MIC; if(audioConfiguration.aec) { audioSource = MediaRecorder.AudioSource.VOICE_COMMUNICATION; } AudioRecord audioRecord = new AudioRecord(audioSource, frequency, channelConfiguration, audioEncoding, getRecordBufferSize(audioConfiguration)); return audioRecord; } }