Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Media";
Текущий архив: 2004.01.05;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "Media";
Текущий архив: 2004.01.05;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.013 c
14-12166
Андреев
2003-12-09 19:38
2004.01.05
Код нулевого символа


6-12030
Fast
2003-11-03 15:31
2004.01.05
Параметры сети


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


11-11843
SerB
2003-04-14 07:30
2004.01.05
SizeGrip???


7-12173
Dima_dvp
2003-10-23 03:38
2004.01.05
Global HOOK без DLL.. Это как? Или вообще ни хук?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский