Skip to content

Commit dbb25ce

Browse files
committed
[BugFix]修复mp3暂停后停止回调及录音问题
Signed-off-by: zhaolewei <739043667@qq.com>
1 parent 7bcefbf commit dbb25ce

File tree

1 file changed

+21
-105
lines changed

1 file changed

+21
-105
lines changed

recorderlib/src/main/java/com/zlw/main/recorderlib/recorder/RecordHelper.java

Lines changed: 21 additions & 105 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
import java.util.List;
2929
import java.util.Locale;
3030

31-
import fftlib.FFT;
3231
import fftlib.FftFactory;
3332

3433
/**
@@ -121,10 +120,12 @@ public void stop() {
121120
if (state == RecordState.PAUSE) {
122121
makeFile();
123122
state = RecordState.IDLE;
123+
notifyState();
124+
stopMp3Encoded();
124125
} else {
125126
state = RecordState.STOP;
127+
notifyState();
126128
}
127-
notifyState();
128129
}
129130

130131
void pause() {
@@ -196,20 +197,7 @@ public void run() {
196197

197198
private FftFactory fftFactory = new FftFactory(FftFactory.Level.Original);
198199

199-
200-
private long time;
201-
202-
203-
int i = 0;
204-
205200
private void notifyData(final byte[] data) {
206-
// Logger.w(TAG, "time: %s", System.currentTimeMillis() - time);
207-
208-
time = System.currentTimeMillis();
209-
210-
if (++i % 4 == 0) {
211-
return;
212-
}
213201
if (recordDataListener == null && recordSoundSizeListener == null && recordFftDataListener == null) {
214202
return;
215203
}
@@ -235,76 +223,7 @@ public void run() {
235223
});
236224
}
237225

238-
/**
239-
* 优化处理FFT数据
240-
*
241-
* @param data pcm byte[]数据
242-
* @return fft
243-
*/
244-
private byte[] makeFftData(byte[] data) {//data.length = 1280
245-
if (data.length < 1024) {
246-
return null;
247-
}
248-
try {
249-
double[] ds = toHardDouble(ByteUtils.toShorts(data));
250-
double[] fft = FFT.fft(ds, 62);
251-
//start
252-
double[] newFft = new double[128];
253-
for (int i = 16; i < 16 + newFft.length; i++) {
254-
if (i < 24) {
255-
newFft[i - 16] = fft[i] * 0.2;
256-
} else if (i < 36) {
257-
newFft[i - 16] = fft[i] * 0.4;
258-
} else if (i < 48) {
259-
newFft[i - 16] = fft[i] * 0.6;
260-
} else {
261-
newFft[i - 16] = fft[i];
262-
}
263-
if (newFft[i - 16] < 10 * 128) {
264-
newFft[i - 16] = newFft[i - 16] * 0.6;
265-
}
266-
}
267-
fft = newFft;
268-
//end
269-
int step = fft.length / 128;
270-
byte[] fftBytes = new byte[128];
271-
272-
273-
int scale = 128;//压缩128基准
274-
double max = getMax(fft);
275-
if (max > 128 * 128) {//高音优化
276-
scale = (int) (max / 128) + 2;
277-
}
278-
279-
for (int i = 0; i < fftBytes.length; i++) {
280-
double tmp = fft[i * step] / scale;
281-
if (tmp > 127) {
282-
fftBytes[i] = 127;
283-
} else if (tmp < -128) {
284-
fftBytes[i] = -127;
285-
286-
} else {
287-
fftBytes[i] = (byte) tmp;
288-
}
289-
}
290-
return fftBytes;
291-
} catch (Exception e) {
292-
Logger.w(TAG, e.getMessage());
293-
}
294-
return null;
295-
}
296-
297-
private double getMax(double[] data) {
298-
double max = 0;
299-
for (int i = 0; i < data.length; i++) {
300-
if (data[i] > max) {
301-
max = data[i];
302-
}
303-
}
304-
return max;
305-
}
306-
307-
public int getDb(byte[] data) {
226+
private int getDb(byte[] data) {
308227
double sum = 0;
309228
double ave;
310229
int length = data.length > 128 ? 128 : data.length;
@@ -317,15 +236,6 @@ public int getDb(byte[] data) {
317236
return i < 0 ? 27 : i;
318237
}
319238

320-
private double[] toHardDouble(short[] shorts) {
321-
int length = 512;
322-
double[] ds = new double[length];
323-
for (int i = 0; i < length; i++) {
324-
ds[i] = shorts[i];
325-
}
326-
return ds;
327-
}
328-
329239
private void initMp3EncoderThread(int bufferSize) {
330240
try {
331241
mp3EncodeThread = new Mp3EncodeThread(resultFile, bufferSize);
@@ -348,6 +258,8 @@ private class AudioRecordThread extends Thread {
348258
if (currentConfig.getFormat() == RecordConfig.RecordFormat.MP3) {
349259
if (mp3EncodeThread == null) {
350260
initMp3EncoderThread(bufferSize);
261+
} else {
262+
Logger.e(TAG, "mp3EncodeThread != null, 请检查代码");
351263
}
352264
}
353265
}
@@ -431,23 +343,27 @@ private void startMp3Recorder() {
431343
if (state != RecordState.PAUSE) {
432344
state = RecordState.IDLE;
433345
notifyState();
434-
if (mp3EncodeThread != null) {
435-
mp3EncodeThread.stopSafe(new Mp3EncodeThread.EncordFinishListener() {
436-
@Override
437-
public void onFinish() {
438-
notifyFinish();
439-
mp3EncodeThread = null;
440-
}
441-
});
442-
} else {
443-
notifyFinish();
444-
}
346+
stopMp3Encoded();
445347
} else {
446348
Logger.d(TAG, "暂停");
447349
}
448350
}
449351
}
450352

353+
private void stopMp3Encoded() {
354+
if (mp3EncodeThread != null) {
355+
mp3EncodeThread.stopSafe(new Mp3EncodeThread.EncordFinishListener() {
356+
@Override
357+
public void onFinish() {
358+
notifyFinish();
359+
mp3EncodeThread = null;
360+
}
361+
});
362+
} else {
363+
Logger.e(TAG, "mp3EncodeThread is null, 代码业务流程有误,请检查!! ");
364+
}
365+
}
366+
451367
private void makeFile() {
452368
switch (currentConfig.getFormat()) {
453369
case MP3:

0 commit comments

Comments
 (0)