jimu-decompiled/sources/com/ubt/jimu/blockly/feature/audio/AudioRecoder.java
2025-05-13 19:24:51 +02:00

160 lines
5.0 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.ubt.jimu.blockly.feature.audio;
import android.media.MediaRecorder;
import android.text.TextUtils;
import android.util.Log;
import com.ubtech.utils.FileHelper;
import java.io.File;
/* loaded from: classes.dex */
public class AudioRecoder {
private static AudioRecoder audioRecoder = null;
public static boolean recoding = false;
private String fileName;
private MediaRecorder recorder;
private final String TAG = AudioRecoder.class.getSimpleName();
private int sampleRateInHz = 16000;
private long lastRecordTime = 0;
private class RecorderInfoListener implements MediaRecorder.OnInfoListener {
private RecorderInfoListener() {
}
@Override // android.media.MediaRecorder.OnInfoListener
public void onInfo(MediaRecorder mediaRecorder, int i, int i2) {
if (i == 1) {
Log.e(AudioRecoder.this.TAG, "OnInfo: MEDIA_RECORDER_INFO_UNKNOWN");
return;
}
if (i == 800) {
AudioRecoder.recoding = false;
Log.e(AudioRecoder.this.TAG, "OnInfo: MEDIA_RECORDER_INFO_MAX_DURATION_REACHED");
} else {
if (i != 801) {
return;
}
AudioRecoder.recoding = false;
Log.e(AudioRecoder.this.TAG, "OnInfo: MEDIA_RECORDER_INFO_MAX_FILESIZE_REACHED");
}
}
}
private class RecorderOnErrorListener implements MediaRecorder.OnErrorListener {
private RecorderOnErrorListener() {
}
@Override // android.media.MediaRecorder.OnErrorListener
public void onError(MediaRecorder mediaRecorder, int i, int i2) {
AudioRecoder.recoding = false;
Log.e(AudioRecoder.this.TAG, "录音失败what=" + i + " extra=" + i2);
File file = new File(AudioRecoder.this.fileName);
if (file.exists()) {
FileHelper.a(file.getParentFile());
}
}
}
private AudioRecoder() {
}
private boolean aacLibRecord(String str) {
return true;
}
private boolean aacRecord(String str) throws Exception {
try {
release();
File parentFile = new File(str).getParentFile();
if (!parentFile.exists()) {
parentFile.mkdirs();
}
this.fileName = str;
this.recorder = new MediaRecorder();
this.recorder.setAudioSource(1);
this.recorder.setOutputFormat(6);
this.recorder.setAudioEncoder(3);
this.recorder.setAudioSamplingRate(8000);
this.recorder.setAudioChannels(1);
this.recorder.setOutputFile(str);
this.recorder.setOnErrorListener(new RecorderOnErrorListener());
this.recorder.setOnInfoListener(new RecorderInfoListener());
this.recorder.prepare();
this.recorder.start();
return true;
} catch (Exception e) {
onRecordFailed(str);
e.printStackTrace();
release();
Log.e(this.TAG, "prepare() failed");
throw e;
}
}
public static synchronized AudioRecoder getInstance() {
AudioRecoder audioRecoder2;
synchronized (AudioRecoder.class) {
if (audioRecoder == null) {
audioRecoder = new AudioRecoder();
}
audioRecoder2 = audioRecoder;
}
return audioRecoder2;
}
private void onRecordFailed(String str) {
File parentFile = new File(str).getParentFile();
if (parentFile.exists()) {
FileHelper.a(parentFile);
try {
FileHelper.a(parentFile);
} catch (Exception e) {
e.printStackTrace();
}
}
}
public String getFileName() {
return this.fileName;
}
public String getKey() {
if (TextUtils.isEmpty(this.fileName)) {
return null;
}
String str = this.fileName;
String substring = str.substring(str.lastIndexOf(File.separator) + 1, this.fileName.length());
return substring.substring(0, substring.lastIndexOf("."));
}
public void release() {
MediaRecorder mediaRecorder = this.recorder;
if (mediaRecorder != null) {
try {
try {
mediaRecorder.release();
} catch (IllegalStateException e) {
e.printStackTrace();
}
} finally {
this.recorder = null;
}
}
}
public boolean startRecord(String str) throws Exception {
recoding = true;
long currentTimeMillis = System.currentTimeMillis();
if (currentTimeMillis - this.lastRecordTime < 500) {
return false;
}
Log.i(this.TAG, "调用录音:" + str);
this.lastRecordTime = currentTimeMillis;
return aacRecord(str);
}
public void stopRecod() {
recoding = false;
release();
}
}