Добрый день, уважаемый All. Есть 2 простенькие программы, одна из которых берет звук с микрофона (/dev/dsp) и отправляет его в открытый порт. Вторая получает этот поток и перенаправляет на динамик (всё тот же /dev/dsp). Проблема со второй программой: сразу после запуска всё отрабатывает корректно, но уже через 1-1.5 минуты(сугубо субъективное восприятие + добежать до устройства, на котором реально запущена вторая функция) воспроизведение начинает отставать от микрофона на 2-3 секунды... со временем эта задержка может дорости до 5ти секунд. Вырезки из програмы «приемника»:
#define CAPTURE_DEV "/dev/dsp"
#define BUF_SIZE 1024
...
unsigned char buff[BUF_SIZE];
...
out_fd = open(CAPTURE_DEV, O_WRONLY, 0);
channels = 1;
format = AFMT_S16_LE;
rate = 22050;
ioctl(out_fd, SNDCTL_DSP_SETFMT, &format);
ioctl(out_fd, SNDCTL_DSP_CHANNELS, &channels);
ioctl(out_fd, SNDCTL_DSP_SPEED, &rate);
...
while 1
{
recv(sock, buff, BUF_SIZE, 0);
write(out_fd, buff, BUF_SIZE);
}
...
ioctl(out_fd, SNDCTL_DSP_GETBLKSIZE, &bytes) возвращает значение 4096, тупое увеличение BUF_SIZE до этого значения ситуацию не исправило. Гугление дало направление в сторону использования фреймов, но каюсь - не силен в англицком, а абсолютно вся документация, найденная мной, была именно на английском(( Просьба к уважаемому сообществу, ежели кто-то может «на пальцах» объяснить что куда нужно вставить и как корректно «переписать» алгоритм воспроизведения - буду шибко признателен! Если ткнёте носом в ссылку с уже готовым описанием этой же проблемы - мы люди не гордые, будем не менее благодарны, абы на родном наречии без басурманских премудростей! ))