Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C/C++ Сетевое программирование
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.07.2015, 08:12   #1
Programmer0
Пользователь
 
Регистрация: 05.05.2015
Сообщений: 55
По умолчанию Передача звука с микрофона по сети linux

Здравствуйте.

В windows используется буферизация: записывающее приложение создает несколько буферов, отдает их системе, система их заполняет по очереди и возвращает приложению по мере заполнения; при воспроизведении аналогично; буфера передаются по сети; в результате можно вещать звук непрерывно.

Как можно организовать непрерывную передачу звука по сети в linux?

P.S.Нашел, как записывать/воспроизводить в/из файла. А как огранизовать непрерывное вещание - не нашел.
Programmer0 вне форума Ответить с цитированием
Старый 21.07.2015, 09:14   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Вы не знаете как захватывать звук под linux или не знаете как отсылать его по сети?

Кстати, описанная вами модель для Windows несколько устарела, начиная с Vista все несколько иначе.
waleri вне форума Ответить с цитированием
Старый 21.07.2015, 09:42   #3
Programmer0
Пользователь
 
Регистрация: 05.05.2015
Сообщений: 55
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Вы не знаете как захватывать звук под linux или не знаете как отсылать его по сети?
Я нашел, как писать в файл http://rus-linux.net/lib.php?name=/M..._borovski.html:
Код:
#include <stdlib.h>
#include <sys/ioctl.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/soundcard.h>
#define BUF_SIZE 2048
int audio_fd, out_fd;
void onexit() {
close(audio_fd);
close(out_fd);
}
int main (int argc, char *argv[]) {
int format, nchans, rate;
int actlen, count;
unsigned char buf[BUF_SIZE];
if (argc < 2) {
printf("команда: %s filename [rate]\n", argv[0]);
return EXIT_SUCCESS;
}
out_fd = open(argv[1], O_CREAT|O_WRONLY, 0777); 
audio_fd = open("/dev/dsp", O_RDONLY, 0);
atexit(onexit);
format = AFMT_U8;
ioctl(audio_fd, SNDCTL_DSP_SETFMT, &format);
if (format != AFMT_U8) {
printf("ошибка: запрошенный формат не поддерживается");
return EXIT_FAILURE;
}
nchans = 1;
ioctl(audio_fd, SNDCTL_DSP_CHANNELS, &nchans);
if (argc == 3) rate = atoi(argv[2]);
else rate = 8000;
ioctl(audio_fd, SNDCTL_DSP_SPEED, &rate);
printf("Используемая частота дискретизации: %i Гц\n", rate);
for (count = 0; count <= (rate*30*nchans); count += actlen) {
actlen = read(audio_fd, buf, BUF_SIZE; 
write(out_fd, buf, actlen);
}
return EXIT_SUCCESS;
}
И нашел, как работать с UDP-сокетами http://habrahabr.ru/post/209524/.
Но не понимаю, как писать и передавать звук непрерывно. Если делать так: прочитал в буфер, отправил по udp, прочитал, отправил и т.д., тут ведь звук будет прерываться... Или я не прав?
Programmer0 вне форума Ответить с цитированием
Старый 21.07.2015, 09:45   #4
Programmer0
Пользователь
 
Регистрация: 05.05.2015
Сообщений: 55
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Кстати, описанная вами модель для Windows несколько устарела, начиная с Vista все несколько иначе.
А как иначе? Можно ткнуть, где посмотреть/почитать.
Programmer0 вне форума Ответить с цитированием
Старый 21.07.2015, 10:07   #5
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Цитата:
Сообщение от Programmer0 Посмотреть сообщение
Или я не прав?
Не прав - система может сама буферировать и заполнять ваш буфер при чтении. Естественно читать надо регулярно. В описанном вами варианте (pre-Vista) с этим решили не напрягатся и свалили все на приложение.

https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx
waleri вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача звука по сети koljsch Общие вопросы C/C++ 4 01.10.2013 10:41
Передача звука по сети с использованием UDP и BASS.DLL cactus628 Работа с сетью в Delphi 6 02.02.2012 14:11
статья - Передача звука по сети. Прототип VoIP телефона Pblog Обсуждение статей 4 30.01.2012 08:37
передача звука по сети и вэб Банзай Работа с сетью в Delphi 2 07.01.2008 22:21