大佬教程收集整理的这篇文章主要介绍了获取 AudioRecord:start() 状态 -38 仅低于 android 10 版本,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我想通过声音媒体发送和接收字符串消息,在那里我打印出接收消息的日志。我的代码似乎与 androID 10 版本完美兼容,但在 androID pIE 上遇到了这个问题。
实际上,我面临的问题是,收到的消息在第一次之后没有打印出来。我只在第一次收到消息,但在第二次之后没有收到消息,而且我只在低于 androID 10 的版本上收到此错误消息。我能知道这条错误消息背后的实际问题吗。
经过一些研究,我知道AudioRecord应该在我处理过的暂停或停止生命周期中停止和释放他们在我的活动课上,每次我打电话给这门课时,我也要求获得 RECORD_AUdio 许可。请帮我解决这个问题,提前谢谢!!
记录器类:
public class Recorder {
private static String TAG = "Recorder";
//Recorder parameters
private int audiosource = MediaRecorder.Audiosource.DEFAulT;
//Mono=8b,Stereo=16b
privatE int chAnnelConfig = AudioFormat.CHAnnEL_IN_MONO;
//16b or 8b per sample
private int audioEnCoding = AudioFormat.ENCoding_PCM_16BIT;
//number of samples in 1sec
privatE int sampleRate = 44100;//44100;
//Recording thread
private Thread thread;
//CallBACk used to set up filled buffer
private CallBACk callBACk;
public Recorder() {
}
public Recorder(CallBACk callBACk) {
this.callBACk = callBACk;
}
public voID setCallBACk(CallBACk callBACk) {
this.callBACk = callBACk;
}
public voID start() {
if (thread != null) return;
thread = new Thread(() -> {
Process.setThreadPriority(Process.THREAD_PRIORITY_URGENT_AUdio);
//Gets minimum buffer size (can be larger)
int minBufferSize = AudioRecord.getMinBufferSize(sampleRate,chAnnelConfig,audioEnCoding);
int optimalBufSize = 12000;
if (optimalBufSize < minBufferSizE) {
optimalBufSize = minBufferSize;
}
try {
//Sets the chosen buffer size in analyzing (father) activity
callBACk.setBufferSize(optimalBufSizE);
//Create recorder
AudioRecord recorder = new AudioRecord(audiosource,sampleRate,audioEnCoding,optimalBufSizE);
if (recorder.getState() == AudioRecord.STATE_UNINITIAliZED) {
Thread.currentThread().interrupt();
return;
} else {
Log.i(Recorder.class.getSimplename(),"Started.");
}
byte[] buffer = new byte[optimalBufSize];
//Start recording
recorder.startRecording();
while (thread != null && !thread.isInterrupted() && (recorder.read(buffer,optimalBufSizE)) > 0) {
callBACk.onBufferAvailable(buffer);
}
recorder.stop();
recorder.release();
} catch (Exception E) {
Log.e("Recorder",e.getmessage());
}
},Recorder.class.getname());
thread.start();
}
public voID stop() {
if (thread != null) {
thread.interrupt();
thread = null;
}
}
}
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
以上是大佬教程为你收集整理的获取 AudioRecord:start() 状态 -38 仅低于 android 10 版本全部内容,希望文章能够帮你解决获取 AudioRecord:start() 状态 -38 仅低于 android 10 版本所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。