может ли аудиоплеер в opensl выводить на два приемника данных?

Есть ли способ для аудиоплеера вывести на два приемника данных?

более конкретно, я пытаюсь передать mp3 из сети с помощью аудиоплеера с источником данных, установленным как uri, в буфер и выходной микс. Прямо сейчас у меня есть приемник аудиоплеера, настроенный только на выходной микс, поэтому я могу передавать этот файл и воспроизводить его, когда предварительная выборка говорит, что данных достаточно, но я также хочу поместить эти потоковые данные в буфер в то же самое время. время.


person iedoc    schedule 18.01.2013    source источник


Ответы (1)


Ответ отрицательный, но есть способ обойти это.

Я не понимал, что когда вы создаете аудиоплеер с очередью буфера и выводом в нее, а приемник в качестве uri, он воспроизводится в буфер так же быстро, как получает данные.

Поэтому, когда я понял, что это то, что происходит, я создал еще один аудиоплеер, который имеет буферную очередь в качестве источника и выходной микс в качестве приемника.

После того, как все настроено, я приостанавливаю первый аудиоплеер (uriPlayer), который запускает «загрузку» и передает данные в буфер. когда предварительная выборка uriPlayer говорит, что данных достаточно, я проверяю «длительность» uriPlayer, чтобы узнать, как долго длится песня, и затем создаю буфер, достаточно большой для хранения данных PCM из uriPlayer на основе продолжительности и выборки. скорость (и выходные каналы, 2 для стерео и 1 для моно).

Я ставлю этот буфер в очередь приемных буферов uriPlayers, затем устанавливаю состояние uriPlayers в Play, чтобы он начал загружать все данные в буфер в своей очереди буферов.

Затем я ставлю этот же буфер в очередь исходного буфера второго проигрывателя (musicPlayer) и также устанавливаю его состояние в Play, что запускает воспроизведение буфера в его очереди буферов.

пока uriPlayer может загружать содержимое музыкального файла быстрее, чем музыкальный проигрыватель воспроизводит из буфера, просто вызвав getPosition из uriPlayer, чтобы узнать, где в песне идет его текущий поток, и находится ли он «впереди» позиции musicPlayer сейчас играет, все работает отлично! если загрузка замедляется или идет слишком медленно, просто приостановите воспроизведение musicPlayer, если он опережает uriPlayer.

person iedoc    schedule 18.01.2013