Ваш вопрос широк, я могу рассказать вам, как вы должны его использовать и как вы можете манипулировать аудиоданными, полученными при записи.
1) После того, как вы правильно настроили движок OpenSL_ES, рекордер и проигрыватель (есть много примеров), вы предоставили OpenSL_ES буфер для чтения данных PCM с микрофона, а также буфер для чтения из данных вы хотели бы предусмотреть приемник воспроизведения вместе с двумя функциями обратного вызова, которые будут вызываться после завершения процесса чтения данных (через некоторое время в соответствии с вашими настройками, такими как частота дискретизации, размер буфера и т. д.), обратный вызов записи вызывается из потока, созданного OpenSL_ES, который, в зависимости от устройства и конфигурации, может быть потоком с высоким приоритетом, обычно называемым ускоренным режимом (поэтому вы не работаете над своим потоком в обратном вызове, а в потоке OpenSL_ES и должны будьте осторожны, чтобы не выполнять там блокирующие операции). Теперь, если вы хотите воспроизвести аудио как можно быстрее, обработайте аудиосигнал изнутри обратного вызова, если время отклика не слишком важно для вас, вы можете использовать обратный вызов в качестве сигнала для вашего потока, чтобы начать чтение аудио процесса данные в буфере, как вы хотите. В обоих случаях для воспроизведения звука необходимо поставить в очередь данные (обработанные или необработанные) для процесса воспроизведения (воспроизведение также вызывает обратный вызов проигрывателя по завершении).
2) Теперь, если вы хотите обработать звук, вам нужно применить фильтры, существует множество типов фильтров аудиосигнала, которые можно применять, вам следует искать динамические фильтры в случае воспроизведения в реальном времени. (некоторые фильтры требуют большого количества данных для начала обработки и могут плохо работать в режиме реального времени, некоторые другие оптимизированы для использования небольших фрагментов данных и динамической адаптации вывода). Таким образом, вам нужно будет сделать цепочку фильтров в определенном порядке, чтобы получить то, что вы хотите. Мир аудио огромен, вам нужно довольно много читать, чтобы начать понимать обработку звука. Качество звука — это другое дело, и оно зависит напрямую от вашего устройства (жесткое, софтовое).
3) Обработка данных в буфере, который вы получаете, зависит от вашего процессора. Например, порядок следования байтов, некоторые процессоры могут работать с прямым или обратным порядком байтов, и вы получаете свои данные в формате прямого байта. Сжатие отсутствует, поэтому данные PCM готовы к обработке. (если вы хотите создать из него wav, вам нужно только добавить заголовок волны и добавить данные PCM в фрагмент данных заголовка, если вам нужен другой формат, такой как mp3, вам также необходимо обработать ваши данные с помощью алгоритма сжатия в соответствии с в нужный формат и добавьте эти данные в соответствующий заголовок)
Также для воспроизведения данных через OpenSL_ES вам нужны несжатые аудиоданные, поэтому вы не можете воспроизводить mp3 напрямую, вам нужно сначала распаковать их в данные PCM.
Это основное функционирование OpenSL_ES, надеюсь, это ответит на ваш вопрос. Если что-то неясно, дайте мне знать.
PS: Android говорит, что манипулировать звуком теперь стало проще благодаря новой библиотеке AAudio, которая обещает выполнять те же задачи, что и OpenSL_ES, но в три раза легче (могут быть некоторые проблемы с задержкой, некоторые люди сталкивались но держу пари, они исправляются, пока вы читаете)
person
alexm
schedule
15.02.2018
Audio_Processing
, будь то предварительная обработка или постобработка: Android_Audio_Processing_Using_WebRTC. Вы также можете посетить эту ссылку: stackoverflow.com/a/58546599/10413749 - person Muhammad Usman   schedule 07.04.2020