gpt4 book ai didi

android - 使用 android AudioRecord 获取 32 位样本?

转载 作者:行者123 更新时间:2023-11-29 02:20:43 24 4
gpt4 key购买 nike

我一直在进行大量研究,但找不到很多关于此的信息。我想使用 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 时,您是否将短数组更改为 float ?当使用 32 位编码时,还有一种从 AudioRecord 读取数据的不同方法:

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

关于android - 使用 android AudioRecord 获取 32 位样本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55985232/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com