android-AudioRecord start()错误状态-38

android-AudioRecord start()错误状态-38,第1张

概述我正在尝试设置一个录音机,但不断出现特定错误,我不知道为什么.在我的代码中,我在startrecording()方法之前和之后通过Log检查了录音机处于什么状态.ar=newAudioRecord(audiosource,sampleRate,channelConfiguration,audioEncoding,buffersizebytes);Log

我正在尝试设置一个录音机,但不断出现特定错误,我不知道为什么.在我的代码中,我在startrecording()方法之前和之后通过Log检查了录音机处于什么状态.

ar = new AudioRecord(audiosource, sampleRate, channelConfiguration,                audioEnCoding, buffersizebytes);Log.d("info", "ar.getState() before = " + String.valueOf(ar.getState()));ar.startRecording();Log.d("info", "ar.getState() after = " +String.valueOf(ar.getState()));

当我运行该应用程序时,我在logcat中收到了这些消息.

D/info﹕ ar.getState() before = 1E/AudioRecord﹕ start() status -38D/info﹕ ar.getState() after = 1

从我在文档中阅读的内容来看,状态1可以对应于处于RECORDSTATE_StopPED或STATE_INITIAliZED状态的音频记录器,这两种状态在调用startRecording()时都不会引起问题.

我认为状态-38是errno.h代码,用于/ *未实现的函数* /是指startRecording()方法,或者它在错误状态中声明了start()函数,该函数不是AudioRecorder类的方法.

我尝试了多种方法来确保调用了release()函数,因此我认为这不是问题所在.

任何帮助是极大的赞赏.

解决方法:

好吧,这就是我认为我需要做的,应该在AudioRecorder文档中进行讨论,但是这个类似的问题使我得到了答案AudioRecord object not initializing
基本上,您要做的是遍历所有配置,并针对AudioRecord.ERROR_BAD_VALUE进行检查,这也是因为我计划使用长度必须为2的幂的fft,所以我添加了一点if if if if if anybody否则会遇到类似情况

public AudioRecord findAudioRecord() {    for (int rate : mSampleRates) {        for (short audioFormat : new short[]{AudioFormat.ENCoding_PCM_8BIT, AudioFormat.ENCoding_PCM_16BIT}) {            for (short channelConfig : new short[]{AudioFormat.CHANNEL_IN_MONO, AudioFormat.CHANNEL_IN_STEREO}) {                try {                    //Log.d("audioSetup", "Attempting rate " + rate + "Hz, bits: " + audioFormat + ", channel: " + channelConfig);                    int bufferSize = AudioRecord.getMinBufferSize(rate, channelConfig, audioFormat);                    if (bufferSize > 0 && bufferSize <= 256){                        bufferSize = 256;                    }else if (bufferSize > 256 && bufferSize <= 512){                        bufferSize = 512;                    }else if (bufferSize > 512 && bufferSize <= 1024){                        bufferSize = 1024;                    }else if (bufferSize > 1024 && bufferSize <= 2048){                        bufferSize = 2048;                    }else if (bufferSize > 2048 && bufferSize <= 4096){                        bufferSize = 4096;                    }else if (bufferSize > 4096 && bufferSize <= 8192){                        bufferSize = 8192;                    }else if (bufferSize > 8192 && bufferSize <= 16384){                        bufferSize = 16384;                    }else{                        bufferSize = AudioRecord.getMinBufferSize(rate, channelConfig, audioFormat);                    }                    if (bufferSize != AudioRecord.ERROR_BAD_VALUE) {                        // check if we can instantiate and have a success                        AudioRecord recorder = new AudioRecord(MediaRecorder.AudioSource.DEFAulT, rate, channelConfig, audioFormat, bufferSize);                        if (recorder.getState() == AudioRecord.STATE_INITIAliZED) {                            Log.d("found", "rate: " + rate + " channelConfig: " + channelConfig + " bufferSize: " + bufferSize + " audioFormat: " + audioFormat);                            sampleRate = rate;                            channelConfiguration = channelConfig;                            audioEnCoding = audioFormat;                            buffersizebytes = bufferSize;                            return recorder;                        }                    }                } catch (Exception e) {                    Log.d("audioSetup", rate + "Exception, keep trying.", e);                    e.printstacktrace();                }            }        }    }    return null;}

似乎效果很好.谢谢您的帮助.

总结

以上是内存溢出为你收集整理的android-AudioRecord start()错误状态-38全部内容,希望文章能够帮你解决android-AudioRecord start()错误状态-38所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1094590.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-28
下一篇2022-05-28

发表评论

登录后才能评论

评论列表(0条)

    保存