@@ -74,8 +74,6 @@ public void setListener(Listener listener) {
7474
7575 public void start () {
7676 if (STATE_STOP == mState ) {
77- mState = STATE_START ;
78-
7977 switch (mChannel ) {
8078 case CHANNEL_1 :
8179 mChannelConfig = AudioFormat .CHANNEL_IN_MONO ;
@@ -97,44 +95,55 @@ public void start() {
9795
9896 int minBufferSize = AudioRecord .getMinBufferSize (mFrequence , mChannelConfig , mAudioEncoding );
9997 LogHelper .d (TAG , "minBufferSize:" + minBufferSize );
98+ if ( mBufferSize >= minBufferSize ) {
99+ AudioRecord record = new AudioRecord (MediaRecorder .AudioSource .MIC , mFrequence , mChannelConfig , mAudioEncoding , mBufferSize );
100+ if (null != record ) {
101+ try {
102+ mState = STATE_START ;
103+ record .startRecording ();
104+ LogHelper .d (TAG , "record start" );
105+
106+ if (null != mCallback ) {
107+ if (null != mListener ) {
108+ mListener .onStartRecord ();
109+ }
110+
111+ while (STATE_START == mState ) {
112+ BufferData data = mCallback .getRecordBuffer ();
113+ if (null != data ) {
114+ if (null != data .mData ) {
115+ int bufferReadResult = record .read (data .mData , 0 , mBufferSize );
116+ data .setFilledSize (bufferReadResult );
117+
118+ mCallback .freeRecordBuffer (data );
119+ } else {
120+ // end of input
121+ LogHelper .d (TAG , "get end input data, so stop" );
122+ break ;
123+ }
124+ } else {
125+ LogHelper .d (TAG , "get null data" );
126+ break ;
127+ }
128+ }
129+
130+ if (null != mListener ) {
131+ mListener .onStopRecord ();
132+ }
133+ }
100134
101- AudioRecord record = new AudioRecord (MediaRecorder .AudioSource .MIC , mFrequence , mChannelConfig , mAudioEncoding , mBufferSize );
102- record .startRecording ();
103- LogHelper .d (TAG , "record start" );
135+ record .stop ();
136+ record .release ();
104137
105- if (null != mCallback ) {
106- if (null != mListener ) {
107- mListener .onStartRecord ();
108- }
109-
110- while (STATE_START == mState ) {
111- BufferData data = mCallback .getRecordBuffer ();
112- if (null != data ) {
113- if (null != data .mData ) {
114- int bufferReadResult = record .read (data .mData , 0 , mBufferSize );
115- data .setFilledSize (bufferReadResult );
116-
117- mCallback .freeRecordBuffer (data );
118- } else {
119- // end of input
120- LogHelper .d (TAG , "get end input data, so stop" );
121- break ;
122- }
123- } else {
124- LogHelper .d (TAG , "get null data" );
125- break ;
138+ LogHelper .d (TAG , "record stop" );
139+ } catch ( IllegalStateException e ) {
140+ e .printStackTrace ();
141+ LogHelper .e (TAG , "start record error" );
126142 }
127143 }
128-
129- if (null != mListener ) {
130- mListener .onStopRecord ();
131- }
144+ } else {
145+ LogHelper .e (TAG , "bufferSize is too small" );
132146 }
133-
134- record .stop ();
135- record .release ();
136-
137- LogHelper .d (TAG , "record stop" );
138147 }
139148 }
140149
0 commit comments