我在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的问题吗?否则我可以做出哪些其他测试来理解这个问题?