Как воспроизвести аудиофайлы, перекрывая некоторую область между 2 смежными аудиофайлами? - PullRequest
0 голосов
/ 17 апреля 2019

У меня есть 5 аудиофайлов, каждый из которых имеет длину 5 секунд.Я хотел воспроизводить каждый звуковой файл один за другим, но условие состояло в том, чтобы аудиофайл, воспроизводящий следующий файл, воспроизводился через 4 секунды, т.е. звуки соседних аудиофайлов должны перекрываться в течение 1 секунды.Как я могу это реализовать?Какой лучший аудиоплеер вы можете предложить?

1 Ответ

0 голосов
/ 23 апреля 2019

Объем конкретной работы, которую вы можете выполнять с воспроизведением звука на стороне Java, довольно ограничен для Android.

Похоже, вам нужно будет смешивать звуки в какой-то момент во время их воспроизведения, чтобы они перекрывались.

Лучший способ сделать это в моей голове - использовать библиотеку C ++ под названием Oboe (я сейчас работаю с этим). Это библиотека, созданная Google для воспроизведения аудио. Теперь держись, позволь мне объяснить! Я знаю, что реализация C ++ (особенно если вы сейчас работаете только в стеке Java) может добавить немного времени вашему проекту.

Причина, по которой это пришло в голову, состоит в том, что при таком способе воспроизведения аудио (через Oboe / C ++) вы физически перемещаете отдельные биты аудиосэмпла через buffer stream. Библиотеки C ++ также на самом деле имеют класс Mixer, в который можно поместить 2 различных аудиосэмпла (фактически до 100) для микширования, а затем в конечном итоге выполнить рендеринг через буферный поток.

Используя эту методологию, вы можете добавить определенную логику для управления началом воспроизведения звука (через 4 секунды, если рядом). В этот момент вы можете смешать первую секунду следующего клипа с текущим воспроизводимым клипом.

Теперь самое интересное, вы можете повторить этот процесс на Java! Я нашел этот пост, который может быть вам полезен:

Android: как смешать 2 аудиофайла и воспроизвести их с помощью soundPool

Теперь я предупреждаю вас, что воспроизведение аудио таким способом (через буферные потоки) является сложным процессом, и для полного понимания процесса могут потребоваться дополнительные исследования. Я не могу сказать, что знаю все функциональные возможности аудио-библиотек Java, но я готов поспорить, что они не имеют достаточной поддержки для микширования звука так, как вам нужно. Поэтому, скорее всего, вам придется смешать его самостоятельно, или в крайнем случае вы можете использовать NDK (C ++).

Надеюсь, этот ответ поможет. Наилучшие пожелания в вашем исследовании! Надеюсь, вы найдете простой способ, который работает. (Если вы это сделаете, не забудьте поделиться своими выводами по этому вопросу!)

...