Я пишу приложение для Android, которое отправляет записанный звук на сервер, и мне нужно адаптировать его формат к требуемому. Мне сказали, что аудиоформат сервера задается конструктором класса javax.sound.sampled.AudioFormat со следующими параметрами: AudioFormat (44100, 8, 1, true, true), что означает, что требуемый звук должен иметь частоту дискретизации 44100, 8-разрядный размер выборки, моно-канал, подписать и закодировать с помощью байта большого байта. Мой вопрос: как я могу преобразовать записанный звук в тот, который мне нужен? Я думаю, что самая большая проблема может быть ограничение 16b Android, насколько маленький размер выборки обеспокоенСовместимость Android AudioRecord с Java SE AudioFormat
0
A
ответ
0
Вы можете записывать 44100 8bit непосредственно AudioRecord, указав формат в конструкторе
int bufferSize = Math.max(
AudioRecord.getMinBufferSize(44100,
AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_8BIT),
ENOUGH_SIZE_FOR_BUFFER);
AudioRecord audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC,
44100, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_8BIT, bufferSize);
затем извлекать данные из audioRecord, используя read(byte[], int, int) метод:
byte[] myBuf = new byte[bufferSize];
audioRecord.startRecording();
while (audioRecord.getRecordingState() == AudioRecord.RECORDSTATE_RECORDING) {
int l = audioRecord.read(myBuf, 0, myBuf.length);
if (l > 0) {
// process data
}
}
в этом случае данные в буфере будет, как вы хотите: 8 бит, моно, 44100.
Но некоторые деви ces не поддерживает 8-битную запись. В этом случае вы можете записать данные в 16-битном формате и получить его с помощью метода read(short[], int, int). В этом случае вам необходимо ресэмплировать данные по своему усмотрению:
short[] recordBuf = new short[bufferSize];
byte[] myBuf = new byte[bufferSize];
...
int l = audioRecord.read(recordBuf, 0, recordBuf.length);
if (l > 0) {
for (int i = 0; i < l; i++) {
myBuf[i] = (byte)(recordBuffer[I] >> 8);
}
// process data
}
Используя тот же подход, вы можете ресэмплировать любой формат PCM в любой другой формат;
Смежные вопросы
- 1. Ошибка инициализации Android AudioRecord
- 2. Android: AudioRecord Код ошибки -20 при инициализации встроенного объекта AudioRecord
- 3. Java SE android AsyncTask
- 4. Поскольку Android 6.0 проблемы Audiorecord
- 5. Audiorecord от Android не работает
- 6. Android AudioRecord не будет инициализировать
- 7. Android AudioRecord не может найти рабочую конфигурацию
- 8. Android AudioRecord MP3 кодирования AudioFormat.CHANNEL_IN_STEREO
- 9. Java Class AudioFormat: порядок байтов
- 10. Получить AudioRecord (Samsung Young) null в android
- 11. BufferSize уменьшается в android AudioRecord
- 12. Android: значение, рекомендованное bufferSizeInBytes в AudioRecord
- 13. Ошибка в AudioRecord - Android
- 14. Связь Dalvik с Java SE
- 15. Проект Eclipse, совместимый с Java SE и Android
- 16. Android AudioRecord/AudioTrack: Воспроизведение записи из буфера
- 17. Вопросы Android AudioRecord?
- 18. Android AudioRecord clipping
- 19. Пример Android AudioRecord
- 20. Android AudioRecord Initialization
- 21. Совместимость уровня Java на Android?
- 22. Как создать экземпляр класса AudioFormat в Android?
- 23. Android AudioRecord PCM в
- 24. AudioRecord размер буфера
- 25. Определение AudioFormat в Java на Ubuntu
- 26. Запустить код Java SE на Android
- 27. AudioRecord: переполнение буфера?
- 28. Настройки кодека Android AudioRecord и AudioTrack?
- 29. Android - Как добавить собственный аудиокодек в AudioRecord?
- 30. Разделить два канала AudioRecord из CHANNEL_IN_STEREO