Skip to content

Commit 9a515f1

Browse files
author
jicheng.gujc
committed
catch IllegalStateException of AudioRecord
1 parent 751a25d commit 9a515f1

File tree

1 file changed

+44
-35
lines changed

1 file changed

+44
-35
lines changed

src/com/libra/sinvoice/Record.java

Lines changed: 44 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)