![]() |
|
Модераторы: Akina |
![]()
|
|
| Гость_suvor |
|
|||
|
Unregistered |
Всем здравствуйте! Вот работаю я с микрофоном. То есть крутится некая апишка пишет звук в память, и "одновременно" я его обрабатываю. Возникает вопрос- как параллелить процессы. Либо пользовать в "обработчике" DoEvents-ы, либо все время его останавливать и стартовать по таймеру. Ну если по таймеру, то выходит "рывками" и код сложнее. Сделал с Events-ами. Вроде все работает, но как-то "нестабильно". Лезут такие эффекты что только ушами хлопаю! И вот я в сомнении - то ли это просто баг какой, то ли я в принципе пытаюсь достать гланды через задний проход? И далее:
Если в принципе, то -а как надо -через таймер? Или может можно как-то увеличить "размер" DoEvents-а? Или может еще как? И третье: вот положим время апишке читать уровень сигнала, а система занята - что тогда? -апишка ноль запишет? или вообще пропустит? или может такого вообще не бывает?(может она мимо процессора работает?) -я понимаю что наверняка навряд кто знает, но все же какие мнения? |
|||
|
||||
| cardinal |
|
|||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 19 Всего: 99 |
Никак. Ты можешь только переключаться между процессами. И таким образом создавать имитацию того, что они выполняются параллельно. То есть тебе надо придумать способ переключения между твоими процессами. Ты можешь создавать потоки, между которыми твоя ОС будет автоматом переключаться, но для этого тебе надо писать на чем угодно, но не на VB. Если честно я пока не очень понял, что ты делаешь (и чем тебя не устраивает DoEvents) поэтому больше ничего сказать не могу... -------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
|||
|
||||
| Vach |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 304 Регистрация: 17.10.2003 Где: Санкт-Петербург Репутация: 8 Всего: 18 |
2Гость_suvor
Тут с верху есть "Quick Search for" >> Multi threading "in language" >> Visual Basic. Найди чтото вроде "Multi Threading in VB6" или чтото типа того... Мало - иди в гугли. ЗЫ Работать вроде будет НО! отладка тебя доканает (только коректный выход и никаких остановок - всё валится). Подумай может тебе DoEvents хватит? Удачи. Это сообщение отредактировал(а) Vach - 3.6.2005, 21:23 |
|||
|
||||
| Guest |
|
|||
|
Unregistered |
Cardinal-у: Не, я наверно спросил очень непонятно! -Я понимаю что физической параллельности процессов нет (хотя может апишка может работать с аудиокартой без постоянного участия процессора?) Но далее. В рамках VB я вижу два способа дать время апишке на работу - или вставить DoEvents в обработчика или завершить его, а потом перевызвать по таймеру. И оба в общем работают. Я сделал с DoEvents. Но похоже что DoEvents дает системе слишком короткую передышку в результате чего лезут разные глюки (например апишке надо все время подсовывать память а это получается через раз! -видимо не успевает что-то там завершаться). И вот теперь я в сомнении -или переделать все на использование таймера (а там могут свои проблемы быть)или это без разницы? То есть вопрос не в том как вообще сделать, а как сделать правильно, что бы потом при развитии обработчика эти геморрои уже не доставали! Потому как ведь часто бывает, что вроде все работает, а на самом деле в соседнюю квартиру через Владивосток посылаешь! И потом это все аукается.
Vach-у: спасибо, попробую посмотреть, хотя звучит все страшновато. |
|||
|
||||
| efedron |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 135 Регистрация: 16.3.2005 Репутация: 4 Всего: 4 |
ты хотя бы кусок кода выложил, чтоб людям можно было поэксперементировать
--------------------
Прежде чем совершить акт разрезания определенной материи целесообразно удостовериться в правильности всех произведенных измерений. |
|||
|
||||
| Voldemar2004 |
|
||||||||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1650 Регистрация: 25.12.2004 Репутация: 7 Всего: 23 |
Если не жалко, скажи какая АПИ-шка. И можно ли записывать с линейного входа звуковой карты, или это в VB никак не прет? (С микрофона у меня тож примерчик есть - DirectX). А то у всех кого можно спрашиваю, во многих книжках приведены примеры записи с микрофона - а с Line-In - хоть головой об монитор, - нету.
Ага. Я когда в своей проге дохожу до финализации результирующего звукового файла, то приходится делать дополнительное время ожидания 3 секунды. Иначе возможны такие тормоза - ой-ой-ой.
Ну так, можно же при запуске твоей проги сделать приоритет всех остальных активных прог самым низким (если конечно не жалко:)). А приоритет твоей проги повысить. А в крайнем случае кэшировать в файл то, что записываешь в память, ну и обновлять (дописывать в этот файл) через регулярные промежутки времени. Такая технология реализована в Sound Forge например.
Не понял. ОС виндоус же мультизадачная, так процессов там полно работающих параллельно. Может Гость_suvor имеет в виду выделять им равные приоритеты работы ЦП: 2 процесса - 50% первому 50% второму процессу. Ну так это ж нереально просчитать (ЦП то у всех разные по производительности). Или Гость_suvor хотел один процесс разделить на 2 (3/4 и т.д.)? А?
Это как? ЦП всегда необходим для работы с любой железкой, пусть и загружен на 1%. -------------------- i_i (';') (V) ![]() |
||||||||||||
|
|||||||||||||
| Gannibal |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 742 Регистрация: 15.4.2003 Где: 010101 Репутация: 18 Всего: 17 |
попробуй в буффер записывать а потом из буффера обрабатывать а во второй буффер опять записывать вот может пример подтолкнёт на мысль
http://bbs.vbstreets.ru/viewtopic.php?p=14139#14139 там посмотри в два буффера записывать .. если так взять то можно с одного обрабатывать сразу а в другой писать// -------------------- Я родился в этом безумном мире - и Я сделаю всё чтобы в нём выжить! |
|||
|
||||
| Guest |
|
|||
|
Unregistered |
1. Апишек там цельный выодок -waveInOpen, waveInStart, WaveInPrepareHeader, WaveInAddBuffer...
2. Насчет линейного входа -понятия не имею. Могу только заметить, что микрофон работает как пассивный, так и активный (с батарейкой). Да и разьемы одинаковые. Так что может линейный вход и не актуален? 3. Насчет приоритета - ну меня же не другие задачи волнуют (хотя может и зря) а конкуренция моей же апишки которая звук принимает и моего же обработчика. Так что причем тут приоритеты я не понял. 5. Я может неграмотно слово процесс употребил что породило непонимание. -Работает мной же запущенная апишка и мой же обработчик. Не знаю процессы это или нет но Вопрос в том как грамотнее апишке дать время подышать- закрывая на время обработчик и потом открывая по таймеру или с помощью DoEvents. Вопрос то мне казался не слишком специфичным и я думал на него просто есть однозначный ответ. 6. ЦП то конечно необходим, но все ли время? Почему бы аудиокарте не иметь свою память и не писать туда сбрасывая в оперативную только когда система освободится? Именно это я имел в виду. То есть я понятия не имею так ли это. но почему бы нет? 7. Два буфера- хорошо, но не в том проблема. Трудность с подсовыванием памяти я привел как пример эффектов конкуренции. А так я действительно поставил перед вызовом цикл в 5000 DoEventsov и все тип топ. |
|||
|
||||
![]()
|
| Правила форума "VB6" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | VB6 | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |