我有一个关于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),并在模拟器/设备上激活,但什么都没有。这就是为什么我冒昧地问这个问题,因为他们给每个人的解决方案是在权限上。所以请,我错在哪里?
I would also like to ask if there is any book explaining how audio is being exploited in Android. So similar to the book "Learning Core Audio" for iOS. Finally there is some site that identifies errors in Android, such as "OSStatus.com" for iOS?
谢谢大家的关注。
- 更新1**
我继续尝试,但没有任何效果。我还尝试了放置非推荐的代码行,如System.exit(),但它不工作。我看到其他用户已经把我的问题与错误-22,但没有答案。我尝试了其他方法来实现AudioRecord,但没有任何效果。
同样,问题并不是AudioRecord第一次初始化然后在最后释放,而是在应用程序的第二次运行时。我还看到,如果我改变我的项目,并试图运行另一个应用程序,总是AudioRecord,我会立即得到错误。所以它使我认为:这是我的应用程序的问题吗?这是androidstudio的问题吗?否则我还能做什么其他测试来理解这个问题?
1条答案
按热度按时间ttcibm8c1#
我认为问题出在您的程序中。我也遇到过这个问题,我解决了它,然后在设备上的设置中手动打开了我的应用程序的记录权限。因此,问题在于程序文件中的权限设置错误,而不是Android Studio中的权限设置错误。