在Android上初始化AudioRecord时出错。错误号-22

时间:2017-04-27 16:48:56

标签: android audio initialization audiorecord audiotrack

我在Android上初始化AudioRecord时遇到了问题。我的应用程序只是在实时讲话时听取发言者的声音。

但我从一开始就遇到了问题。我的初始化代码如下:

 int Rate = AudioTrack.getNativeOutputSampleRate(AudioManager.STREAM_MUSIC);


 int MinBufferAM = AudioRecord.getMinBufferSize(Rate, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT);
 AudioRecord AR = new AudioRecord(MediaRecorder.AudioSource.VOICE_COMMUNICATION, Rate, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT, MinBufferAM);


 int MinBufferAT = AudioTrack.getMinBufferSize(Rate, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT);
 AudioTrack AT = new AudioTrack(AudioManager.MODE_IN_COMMUNICATION, Rate, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT, MinBufferAT, AudioTrack.MODE_STREAM);

运行应用时出现的错误是:

E/AudioRecord: Could not get audio input for session 89, record source 7, sample rate 44100, format 0x1, channel mask 0x10, flags 0

E/AudioRecord-JNI: Error creating AudioRecord instance: initialization check failed with status -22.

Error code -20 when initializing native AudioRecord object.

正如您所看到的,这是一个非常简单的代码,取自Android及其变体的官方文档,这里是stackoverflow。但没有人为我工作。与我在这里看到的其他错误代码不同,除了数字-20之外,我还看到数字-22。这是什么意思?我已经在两台计算机和一台真实设备上测试了代码。总是一样的错误。

显然我已经在模拟器/设备上设置了权限(RECORD_AUDIO)并且没有激活。这就是为什么我冒昧地问这个问题,因为他们给每个人的解决方案就是权限。那么,我错在哪里?

我还想问一下是否有任何一本书解释了如何在Android中利用音频。类似于iOS的“学习核心音频”一书。 最后有一些网站可以识别Android中的错误,例如iOS的“OSStatus.com”?

感谢您的关注。

更新1

我继续尝试但没有任何作用。我也尝试过像System.exit()这样的非推荐代码行,但它不起作用。我看到其他用户将我的问题与错误-22相提并论,但没有答案。我尝试了其他方法来实现AudioRecord,但没有。

同样,问题不是第一次初始化AudioRecord然后在结束时释放,而是在应用程序的第二次运行时。我也看到如果我改变了我的项目并试图运行另一个应用程序,总是AudioRecord,我会立即得到错误。所以它让我觉得:这是我的应用程序的问题吗?这是AndroidStudio的问题吗?否则我可以做出哪些其他测试来理解这个问题?

0 个答案:

没有答案