2013-07-17 3 views
0

Основная идея - создать приложение, которое может записывать аудио с одного устройства и отправлять его через Wlan, используя сокеты на другое устройство, которое будет воспроизводить его. В двух словах программа голосовой чаты Lan.Android: ручная потоковая передача звука с использованием AudioTrack и Socket

Я записываю живое аудио с микрофона с помощью объекта AudioRecord, а затем считываю записанные данные в массив байтов, а затем записываю массив байтов в сокет TCP. Затем принимающее устройство считывает этот массив байтов из сокета и записывает его в буфер объекта AudioTrack.

его как

Audio Record -> массив -> гнездо ---> LAN ---> розетка -> массив байт -> AudioTrack

Процесс повторяют, используя время петли.

Несмотря на то, что звук воспроизводится там, где он находится между кадрами. когда я говорю «Привет», приемник слышит He-ll-O. Хотя звук завершен, но есть промежуток между буферными блоками.

Насколько я знаю, что задержка происходит из-за задержки в передаче Lan

Как это исправить? Какой подход следует использовать, чтобы он был гладким, как в коммерческих онлайн-чатах, таких как skype и gtalk?

ответ

0

Похоже, вам нужен более длинный буфер где-нибудь, чтобы справиться с изменением аудиопередачи по LAN. Чтобы справиться с этим, вы можете создать промежуточный буфер между массивом байтов сокетов и звуковой дорожкой. Ваш буфер может быть в x раз больше размера буфера, используемого в объекте AudioTrack. Так что-то вроде этого:

Торцевые байт -> Audio Buffer -> Buffer, чтобы получить подается звуковой дорожки -> Audio Track

Если звук начинает запись, ничего не воспроизводить, пока он полностью не заполнится дольше буфер. А после этого вы можете загружать блоки размера вашего звукового трека в ваш объект Audio Track.

+0

Но буфер не начнет уменьшаться, поскольку звук будет подаваться с большей скоростью, чем он поступает – Allahjane

+0

Буфер будет уменьшаться по мере появления буферов. Но нужно также заполнить резервную копию, поскольку в конце концов приходят. Одна вещь, о которой стоит подумать, - это согласование времени подачи буфера в сеть с частотой дискретизации записанного звука. Другое дело, что вы можете получить буферы из строя. Таким образом, ваша задержка перед воспроизведением звука в приемнике должна быть достаточно щедрым, чтобы иметь время с этим. – Ehz

Смежные вопросы