使用android AudioRecord获得32位样本吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用android AudioRecord获得32位样本吗?相关的知识,希望对你有一定的参考价值。

我一直在进行大量研究,找不到很多与此有关的信息。我想使用android AudioRecorder录制音频样本,但我不知道如何以32位格式进行录制。我还使用AudioTrack来“监视”麦克风并在录制时收听音频,但是如果我将AudioManager和AudioTrack设置为ENCODING_PCM_FLOAT,则音频实际上为空,那么我什么也听不到。

所以问题是如何在AudioFormat.ENCODING_PCM_FLOAT中同时录制和收听32位样本,以便获得最佳质量的音频。

这是我如何使用AXET Audio Library初始化AudioRecord的快速外观:

final AudioRecord recorder = Sound.createAudioRecorder(context, sampleRate, ss, 0);

AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);


final int maxJitter = AudioTrack.getMinBufferSize(sampleRate,AudioFormat.CHANNEL_OUT_MONO,AudioFormat.ENCODING_PCM_16BIT);


audioTrack = new AudioTrack(AudioManager.MODE_IN_COMMUNICATION,sampleRate,AudioFormat.CHANNEL_OUT_MONO,
                    AudioFormat.ENCODING_PCM_FLOAT,maxJitter, AudioTrack.MODE_STREAM);

audioManager.setSpeakerphoneOn(false);   
audioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);

在线程内部,我只是将缓冲区写入audioTrack:

audioTrack.write(buffer,0,bufferSize);

我的缓冲区是一个short []数组。

最后,我运行线程并播放曲目,正如我在PCM_16BIT中所说的那样,效果很好,但在PCM_FLOAT中却没有:

thread.start();
audioTrack.play();

因此,如果有人有32位录制的经验,我将不胜感激。谢谢。

答案

使用ENCODING_PCM_FLOAT时是否将短数组更改为浮点型?当使用32位编码时,还有另一种从AudioRecord读取数据的方法:

read(float[] audioData, int offsetInFloats, int sizeInFloats, int readMode)

以上是关于使用android AudioRecord获得32位样本吗?的主要内容,如果未能解决你的问题,请参考以下文章

<AudioRecord> "无法获得记录源 1 的音频输入"

Audiorecord.read() 中值的含义

我可以从 AudioRecord 获取 MediaStreamTrack 吗?

无法在 Android 中使用 AudioRecord 进行录制

Android技术分享| Android WebRTC 对 AudioRecord 的使用

Android技术分享| Android WebRTC 对 AudioRecord 的使用