Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.01.05;
Скачать: CL | DM;

Вниз

как синхронизировать потоки данных?   Найти похожие ветки 

 
Goga   (2003-09-03 21:54) [0]

Господа! сразу прошу прощения за достаточно размытый вопрос. но все же...

я делаю передачу звука по сети. конечно тема довольно избитая. но у меня возникли трудности уже при воспроизведении полученного звука. использую WaveIn(Out). как известно эти функции используют буферы памяти. по сети я тоже получаю буферы памяти. но вот не могу понять как синхронизировать их работу. т.е. как сделать так чтоб при получении нового блока данных по сети не возникало ошибки доступа к памяти если в этот же момент WaveOut будет проигровать звук из этого же участка памяти. и конечно же чтобы не терять данные.

кто может подсказать, что для этого необходимо?


 
Крот ©   (2003-09-04 06:03) [1]

Не понял, а как может оказаться, что программа УЖЕ воспроизводит данные, которые только пришли по сети? Откуда она их взяла?


 
Goga   (2003-09-04 08:45) [2]

я имею ввиду что когда данные приходят их же нужно записать в в какойто кусок памяти. а если оттуда производится проигрование?...


 
Digitman ©   (2003-09-04 09:53) [3]


> Goga


а ты что-нибудь слышал о двойной буферизации воспроизведения звуковых данных ? сколько у тебя буферов воспроизведения ? один всего ?


 
pasha_676 ©   (2003-09-04 10:28) [4]

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


 
Крот ©   (2003-09-04 11:55) [5]


> pasha_676 © (04.09.03 10:28) [4]


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


 
pasha_676 ©   (2003-09-04 12:45) [6]


> когда закончишь его воспроизведение - удаляй.

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


 
Крот ©   (2003-09-04 14:38) [7]

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


 
Goga   (2003-09-04 21:16) [8]

вот хотел разобраться.

когда у меня 2 буфера в заголовке каждого я указываю его место в очереди - WHDR_BEGINLOOP и WHDR_ENDLOOP. а как же быть с остальными если их допустим 5. откуда драйвер знает в каком порядке с ними работать. или учитывается тот порядок в котором я передавал эти буферы драйверу?



Страницы: 1 вся ветка

Текущий архив: 2004.01.05;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.035 c
4-12192
Joye
2003-11-05 10:45
2004.01.05
Запрет открытия дверцы CD-ROM


3-11835
SergP
2003-12-09 22:22
2004.01.05
Не работает like


1-11877
SashaTihonov
2003-12-18 15:19
2004.01.05
Пржалуйста можно пример с TerminateProcess


9-11761
smilik
2003-06-15 12:08
2004.01.05
Файлы *.b3d


14-12074
Ega23
2003-12-10 11:23
2004.01.05
Дизайнер объектов