0 / 0 / 0
Регистрация: 28.07.2009
Сообщений: 17
|
|
1 | |
Обращаюсь к профи, сопряжение программ по сокету структурами28.07.2009, 21:51. Показов 2480. Ответов 14
Метки нет (Все метки)
Вопрос следующий, есть программа
Написана на Си (что не столь важно), и она может сопрягаться с другими программами по сокету. Назначение программы, - фильтровать сигнал входящий в звуковую карту и на выход выдавать уже отфильтрованный сигнал. Технические подробности (не столь важные, но все же): -Частота дискретизации 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
|
28.07.2009, 21:51 | |
Ответы с готовыми решениями:
14
Подойдут ли вентиляторы от сокету 1150 к сокету 1151 Обращаюсь к знатокам Обращаюсь к ученым мужам Обращаюсь к понимающим людям |
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 |
Мне хотя бы в таком виде как на пример на 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 | |||||
все намного прозаичней, вместо SET_HWND, я использовал SET_WINDOW!
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 |
Мое право , говорить людям в глаза только правду
Тема закрыта. Большое спасибо за помощь!!! Добавлено через 7 минут 14 секунд Я сразу понял что Вы владеете несколькими языками. Вокруг меня Дельфисты, которые не всегда понимают программирование вне Дельфи. И не сильно опускаются к истокам программирования. Сам я по принципиальным соображениям (хотя еще и времени жалко, и так не успеваю изучать много интересного) не лезу ни в Дельфи, ни в Visual Basic, ни тем более в 1С. Хотя последняя и прибыльная в части доходов.
0
|
30.07.2009, 14:01 | |
30.07.2009, 14:01 | |
Помогаю со студенческими работами здесь
15
Когда обращаюсь к массиву, выскакивает ошибка: Не работает fopen или я не правильно с файлами обращаюсь Обращаюсь к знающим людям насчет датчиков видеокарты Извините, что к Вам обращаюсь! Мы сами не местные... обращаюсь к тем,кто знает JavaScript и Perl. сопряжение Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |