Используйте Android AudioRecord, чтобы получить 32-битные образцы? - PullRequest
0 голосов
/ 04 мая 2019

Я провел большое исследование и не смог найти много информации об этом. Я хочу записывать аудиосэмплы с помощью Android AudioRecorder, но я не знаю, как это сделать в 32-битном формате. Я также использую AudioTrack для «мониторинга» микрофона и прослушивания звука во время записи, но если я установлю AudioManager и AudioTrack на ENCODING_PCM_FLOAT, то звук в буквальном смысле будет нулевым, я не смогу ничего слушать.

Таким образом, вопрос заключается в том, как записывать и слушать одновременно с AudioFormat.ENCODING_PCM_FLOAT в 32-битных сэмплах, чтобы я мог получить звук наилучшего качества.

Это быстрый взгляд на то, как я инициализирую AudioRecord, используя AXET Audio Library :

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);

Мой буфер - это короткий массив [].

Наконец-то я запускаю thread и проигрываю трек, как я уже говорил в PCM_16BIT отлично работает, но в PCM_FLOAT нет:

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

Так что, если у кого-то есть опыт записи в 32-битном формате, я был бы признателен, если бы знал, как это делается. Благодаря.

...