Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/13: Рейтинг темы: голосов - 13, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 28.07.2009
Сообщений: 17
1

Обращаюсь к профи, сопряжение программ по сокету структурами

28.07.2009, 21:51. Показов 2480. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вопрос следующий, есть программа

Написана на Си (что не столь важно), и она может сопрягаться с другими программами по сокету. Назначение программы, - фильтровать сигнал входящий в звуковую карту и на выход выдавать уже отфильтрованный сигнал. Технические подробности (не столь важные, но все же):
-Частота дискретизации 8 кГц
-Уровень квантования 16 бит
-Фильтр полосовой, меняется от единиц герц до 4 кГц
-Добротность от 64 до 1024 (на самом деле не добротность, а количество отчетов участвующих в обратной свертке, от чего собственно и зависит добротность).
В ссылке (в архиве) есть файл README.doc, в нем описан принцип сопряжения. Для управления параметрами фильтра ему по UDP посылается структура, в которой описаны параметры фильтра. Фильтр принимает их перестраивается. Можно послать HWND окна своей программы, в котором фильтр начнет рисовать. В командной строке при запуске фильтра надо указать что бы программа в этом случае не показывалась. Звуковой поток который идет со звуковой карты также идет по UDP. Управляющая программа может использовать его в своих интересах. Также передается по UDP автокорреляция сигнала. Его можно использовать для приема азбуки морзе, или для приема сигналов точного времени.
Программа фильтра это cwfilter.exe.
karkas.exe - пример сопряжения на языке Си
KARKAS.CPP - ее исходник на Си. Собственно этот пример принимает азбуку Морзе и печатает знаки.

Ч Т О Н А Д О !!!
Написать пример на дельфи, который может изменять параметры фильтра и принимать звуковой поток. Это нужно, что бы оказать содействие программистам дельфистам с которыми я сотрудничаю. Принимать и передавать UDP пакеты у них уже получилось, а вот работать со структурами данных не получается. А изучать Дельфи из-за них я не собираюсь. В качестве компенсации за труд, предлагаю для свободного пользования программу фильтра (она может не только фильтровать, что не всем нужно, но и организовывать переговоры голосом через Инет). Так же каждый волен ковырять мой исходник KARKAS.CPP, как заблагорассудиться.

karkas.zip

UDPT.zip
А это пример на Visual Basic. Мой товарищ занимается проектной строительной документацией. Для автоматизации своей работы начал изучать этот язык и его среду. Ему потребовалось пол дня для того что бы выкатить мне этот конечный результат. К сожалению вокруг меня не оказалось того кто бы сделал это на Дельфи. Помогите, плиззз....
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.07.2009, 21:51
Ответы с готовыми решениями:

Подойдут ли вентиляторы от сокету 1150 к сокету 1151
Хочу собирать компьютер на сокете 1151 , но не вижу вентиляторов к такому процессору , подойдут ли...

Обращаюсь к знатокам
Можно ли как то установить винду на сервер и пользоваться как комп? Или сделать сайт в котором...

Обращаюсь к ученым мужам
Я совсем неуч и невежда, по этому доносить то что хочу решить буду соответствующе, а не примерами,...

Обращаюсь к понимающим людям
Толко начали изучать Паскаль турбо и мне задали задачи, а я немного не понимаю этого. Буду очень...

14
0 / 0 / 0
Регистрация: 28.07.2009
Сообщений: 17
29.07.2009, 19:20  [ТС] 2
Неужто помощи не будет? Где вы чудо-дельфи-богатыри?
0
Эксперт С++
3071 / 1409 / 425
Регистрация: 19.01.2009
Сообщений: 3,880
29.07.2009, 21:05 3
ОК, еще раз, что Вам конкретно нужно?
Вам всю прогу karkas.cpp на Дельфи перевести нужно или что?
Ничего заковыристого в исходниках найти немогу. С чем проблемы, собственно?
0
0 / 0 / 0
Регистрация: 28.07.2009
Сообщений: 17
29.07.2009, 21:53  [ТС] 4
Цитата Сообщение от polivets Посмотреть сообщение
ОК, еще раз, что Вам конкретно нужно?
Вам всю прогу karkas.cpp на Дельфи перевести нужно или что?
Ничего заковыристого в исходниках найти немогу. С чем проблемы, собственно?
Мне хотя бы в таком виде как на пример на Visual Basic. Там правда нет приема звуковых данных. Если бы они были в виде какого либо потока или графика, все было бы прекрасно. А каркас повторять не стоит. Лишний труд. Я его реализовывал в виде простого приложения на WinAPI. Наверное для Дельфи, это не совсем то. А в чем проблема сам не знаю. Просто не хочу разбираться с Дельфи. Поискал в инете как объявляются структуры в Дельфях, показал коллеге. Он все равно не понимает. Единственный способ ему объяснить, это показать пример в работе. Вот и прошу помощи.
А теперь подробнее.
-Запустить программу фильтра из своей программы
-Объявить в своей программе какое либо окно для рисования. Его HWND в виде 32 разрядного числа передать программе фильтра по сокету (пакетом UDP).
-Сделать какую либо форму, где параметры фильтра устанавливаются по протоколу что я описал в файле readme, и передаются фильтру для изменений в нем самом
-показать как звуковые данные идут с программы фильтра, можно обычным временным графиком
-при закрытии своей программы, сначала выдать программе фильтра команду закрытия, для того что бы она корректно сама закрылась. Просто убивать процесс не стоит. Лучше командой через сокет.
0
Эксперт С++
3071 / 1409 / 425
Регистрация: 19.01.2009
Сообщений: 3,880
30.07.2009, 00:53 5
Как cwfilter.exe тестить?
Команды по UDP приходят и мне и от меня .
И от фильтра приходят данные, но только в массивах klop и buf одни нули.
Как я понимаю, фильтр пишет со входа звуковой карты (с выбранного устройства ввода) данные.
Значит что-то не так при записи.

В аттаче только сорцы для Delphi 7.
0
0 / 0 / 0
Регистрация: 28.07.2009
Сообщений: 17
30.07.2009, 05:56  [ТС] 6
Надо подать какой либо звук на вход звуковой карты. Если в системе несколько звуковых карт, то надо для фильтра указать какую именно принимать. Сетевые установки выбора описаны у меня в README.doc, но для начала можно просто запустить cwfilter.exe, сам по себе без Вашей программы. В левой части программы фильтра щелкнуть правой кнопкой мыши, и в появившемся списке выбрать нужную звуковую карту.
Если по сети устанавливать
Выдержка из readme
Установить устройство ввода звука.
int kod; // равно 7
int kol; // -1 по умолчанию,0 – первое устройство в списке устройств, 1- второе и т.д.

то для первого элемента в списке соответсвует число = -1
для второго = 0
для третьего = 1

Обращаюсь к профи, сопряжение программ по сокету структурами

Для настройки входов и уровней в системе надо воспользоваться стандартными настройками. Открыть регулятор громкости.
Обращаюсь к профи, сопряжение программ по сокету структурами

Выбрать в Меню ПАРАМЕТРЫ - СВОЙСТВА - ЗАПИСЬ
Там желательно пометить все входы
И уже при открытии входов, выбрать нужный
Обращаюсь к профи, сопряжение программ по сокету структурами

В моем случае это микрофонный вход. Теперь если подавать на вход какой либо сигнал, то будут идти не только нули. Если бы Вы прислали мне бинарник, я бы уже проверил в работе Вашу программу
0
Эксперт С++
3071 / 1409 / 425
Регистрация: 19.01.2009
Сообщений: 3,880
30.07.2009, 12:13 7
Ну вот рабочая версия, прорисовку временного графика выдрал из karkas.cpp.
Клавиши 1-9 и колесико мышки воздействуют на программу аналогично, как и в karkas.
Команды отсылаются по UDP, а прорисовка в окне, происходит после получения данных из сокета.
1
0 / 0 / 0
Регистрация: 28.07.2009
Сообщений: 17
30.07.2009, 12:39  [ТС] 8
Все отлично, Вы супер. Но хотелось бы еще попросить. Если фильтру послать хендел окна вашей программы, то фильтр свое окошко начнет рисовать в вашем окне. Не могли бы Вы еще этот момент реализовать. Временной график опустите ниже, а фильтр будет рисовать начиная с верхнего левого угла. Пожалуйста
0
Эксперт С++
3071 / 1409 / 425
Регистрация: 19.01.2009
Сообщений: 3,880
30.07.2009, 12:47 9
Временной график опустите ниже, а фильтр будет рисовать начиная с верхнего левого угла.
координаты, по которым рисует фильтр фиксированные и какие они?

Он использует свои Pen, Brush и цвета для них, или нужно в свое проге, ассоциировать (выбрать) эти настройки.

А как фильтр ищет окно, на котором будет рисовать ему нужно передать HWND или HDC. Передаю первое, но он чего-то не хочет рисовать.
0
0 / 0 / 0
Регистрация: 28.07.2009
Сообщений: 17
30.07.2009, 12:52  [ТС] 10
Ему надо передать HWND, щас попробую Вам скинуть пример на Си
0
0 / 0 / 0
Регистрация: 28.07.2009
Сообщений: 17
30.07.2009, 13:04  [ТС] 11
tmp.ZIP
Вот высылаю. Вывод графика я у себя заремил, что бы не мешал. Возможно что у Вас не получилось из за того, что Вы послали команду, до того как фильтр был готов принимать UDP, и поэтому он ее просто не получил. Я у себя в примере просто тупо поставил Sleep
Вы можете поставить одноразовый таймер, или послать эту команду при первом получении звукового потока

Ширина окна должна будет быть 506
а высота может менятся 181, 202, 292, 118
Возможно чуть больше будет, так подсмотреть подсчитать быстро не могу
0
Эксперт С++
3071 / 1409 / 425
Регистрация: 19.01.2009
Сообщений: 3,880
30.07.2009, 13:21 12
Цитата Сообщение от was Посмотреть сообщение
Вложение 7903
Вот высылаю. Вывод графика я у себя заремил, что бы не мешал. Возможно что у Вас не получилось из за того, что Вы послали команду, до того как фильтр был готов принимать UDP, и поэтому он ее просто не получил. Я у себя в примере просто тупо поставил Sleep
Вы можете поставить одноразовый таймер, или послать эту команду при первом получении звукового потока
все намного прозаичней, вместо SET_HWND, я использовал SET_WINDOW!

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// создание формы
procedure TForm1.FormCreate(Sender: TObject);
begin
  PRYGOK := 1;
 
  // запуск фильтра
  WinExec('cwfilter.exe UDPSEND', SW_HIDE);
 
  // активируем сокеты
  udpCmd.Active   := True;
  udpReciv.Active := True;
  // устанавливаем окно
  SendCommand(SET_HWND, Form1.Handle, 0, 0, 0);
end;
Теперь работает
1
0 / 0 / 0
Регистрация: 28.07.2009
Сообщений: 17
30.07.2009, 13:38  [ТС] 13
Все получилось, УРРА. Полгода уже пинаю знакомых, что бы они мне сделали этот пример. Обещаниями все и заканчивалось. Большое спасибо!!! Вы самый большой гений в Дельфи, с которым мне пришлось общаться!!!
Что я могу сделать для Вас?
0
Эксперт С++
3071 / 1409 / 425
Регистрация: 19.01.2009
Сообщений: 3,880
30.07.2009, 13:52 14

Не по теме:

Вы очень сильно приувеличиваете, видать такие плохие Дельфисты Вам попадались, сам я программирую на С/С++ подобных языках.



Я бы на Вашем месте, изменил бы название команды SET_WINDOW, на SET_WINDOWTYPE или что-нибудь на вроде.

Если тема исчерпана, то отпишитесь, что тема закрыта.
0
0 / 0 / 0
Регистрация: 28.07.2009
Сообщений: 17
30.07.2009, 14:01  [ТС] 15
Цитата Сообщение от polivets Посмотреть сообщение
Вы очень сильно приувеличиваете.
Мое право , говорить людям в глаза только правду
Цитата Сообщение от polivets Посмотреть сообщение
Если тема исчерпана, то отпишитесь, что тема закрыта.
Тема закрыта. Большое спасибо за помощь!!!

Добавлено через 7 минут 14 секунд
Цитата Сообщение от polivets Посмотреть сообщение
Добавлено через 6 минут 34 секунды

Не по теме:

Вы очень сильно приувеличиваете, видать такие плохие Дельфисты Вам попадались, сам я программирую на С/С++ подобных языках.

Я сразу понял что Вы владеете несколькими языками. Вокруг меня Дельфисты, которые не всегда понимают программирование вне Дельфи. И не сильно опускаются к истокам программирования. Сам я по принципиальным соображениям
(хотя еще и времени жалко, и так не успеваю изучать много интересного) не лезу ни в Дельфи, ни в Visual Basic, ни тем более в 1С. Хотя последняя и прибыльная в части доходов.
0
30.07.2009, 14:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.07.2009, 14:01
Помогаю со студенческими работами здесь

Когда обращаюсь к массиву, выскакивает ошибка:
Доброго времени суток, уважаемые форумчани! Выскакивает ошибка "нарушение доступа для записи". Вот...

Не работает fopen или я не правильно с файлами обращаюсь
Вот программа, только проблема в том, что fopen yt открывает файлы. Я их кидал и в корень C и D...

Обращаюсь к знающим людям насчет датчиков видеокарты
Приветствую Вас хацкеры админы и знающие компьютерщики, у меня как у профана в этой области есть...

Извините, что к Вам обращаюсь! Мы сами не местные...
Здрасте всем! У меня вопрос для гурей (гурьев) баз данных. Нужен совет. Есть проект на VB6, но к...

обращаюсь к тем,кто знает JavaScript и Perl.
обращаюсь к тем,кто знает JavaScript и Perl. такая проблема...есть у меня две задачки.обе...

сопряжение
помогите пжлста


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru