У кого-нибудь есть исходники программы на С++ для работы со звуковой картой? Задача несложная, надо выдавать синус нужной частоты и амплитуды и "хватать" отклик с линейного входа.
"Хватать" отклик пробовал зписав его обычным Виндовым рекордером и разбирать WAV файл программкой. Всё получается, но теперь надо смотреть отклики от разных частот и амплитуд, поэтому хочется знать в каком месте в отклике какое было воздействие.... поэтому хочу совместить всё в одно.
Если есть какое-нить описание как с картой работать, то было бы тоже здорово. Правда конечно много лучше с примерами.
AlexZander Пост: 98782 От 31.Jan.2008 (08:37)
Ну если сильено надо, заведи выход правого канала(пусть там будет синус) на вход правого канала, а исследуемый сигнал на вход левого канала - и смотри две осцилограммы синхронно вместе(левый, правый канал).
Ну наконец, ДОШЛО!!(кто ещё кроме AlexZander, повторит то что я напечатал в начале темы)
AlexZander Пост: 98782 От 31.Jan.2008 (08:37)
Не нужен такой синхронизм входа с выходом как факт...
А вот здесь ВЫ заблуждаетесь БАТЕНЬКА!!** существует куча прог,
которые стремятся к этому вашему синхронизму.
Мой вопрос малость не в тему, но про ПК и приборы, хе-хе...
У КОГО ЕСТЬ ЖУРНАЛ "Радиолюбитель. Ваш компьютер" 6,7,8 номера за 98 год??? Там были статейки по подключению и работе устройств с шиной I2C на LPT-порт. Очень надо!!!
P.S. Может у кого исходники есть по работе с I2C под DOS'om, можно на Трупо-Паскакале, Васике или Трупо-си. Просто есть ЦАП и АЦП + шинный расширитель и всё это с I2C-шиной. Нужно прогу под DOS'ом, которая читает и пишет по определённым адресам байтики.
_________________ Не бойся делать то, чего не знаешь. Ковчег построил любитель - профи создали Титаник.
Наверное я не прав в том, что не полностью описал свою задачу.
необходимо сканируя амплитудой и частотой (1-100 мВ, 1-20000 Гц) снять импеданс электродной ячейки при разных частотах и напряжениях(например дистиллированная вода или очень слабый раствор на золотых электродах или на платина-хлорсеребрянной паре).
для этого используется выход генератора, включенный последовательно с сопротивлением и ячейкой. Сигнал снимается на два входных канала, один прямо с выхода, другой с сопротивления. Получается на одном канале ток, на другом напряжение (есть аналогичные программки для измерения емкости, но там свои амлитуды и частоты и они не управляются).
Далее данные в виде таблиц можно подавать на существующие программы, например EIS анализатор и прочие.
В программированием я достаточно плотно знаком я просто спросил про кусочки на СРР с помощью которых можно выдать и скэтчить.
Я уже нашел на Паскале, но его в свободном распространении нету, да и взаимоотношения с ним у меня не сложились. Если никто не может помочь, то пойду читать Win32 API.......
proggi, на чем оно написано? Исходник есть? Почем кусочки будут?
Так недолго и аудиометр-приставку к ПК сделать... а это уже реальные деньги от всяких поликлиник и мед.учреждений, хе-хе...Может ну его нафиг вечняк...Аудиометр за 10 т.р в каждый лор-кабинет!
_________________ Не бойся делать то, чего не знаешь. Ковчег построил любитель - профи создали Титаник.
есть утилита (консольная) для проигрывания wav [ссылка]
WAV.zip
А с входным потоком сложнее.
Для измерения импеданса программы есть готовые, которые для измерений, как описано. Для поиска -параметры Тилля-Смолла.
Своя программа всегда лучше, но винды прямо не дают подступиться.
а программу попробуйте написать.
Что бы поток данных с линейного входа обрабатывался по заданному мат. алгоритму и складывался в файл?
Наверно не хотите - и я не хочу в виндовом мусоре копаться.
Допустим нужно прочитать данные и поделить каждое из чисел на два.
К простому вычислению в одну строчку надо прицепить вагон разных заклинаний типа:
HMMIO hMMIO = mmioOPen(fileName,
NULL, MMIO_READ | MMIO_ALLOCBUF);
Вместо простого -взял из регистра, поделил, положил в память.
Реальное время не доступно. Информации по железу почти нет,кроме самой простой. Никогда нет уверенности что работает так как надо, а не так как винда захотела.
В результате чем больше программируешь, тем больше ...программируешь
Все уже написал и работает. Остался микшер. Думаю на днях закончить. Большое всем спасибо. Как допишу - выложу на всеобщее обозрение. Может кому понадобится.
Однако конечно дискретность 48 кГц это
Математику надо прикладывать к этому однако....
согласен. звуковуха ESI Juli@ к примеру 24 бит и 192 кГц на запись поддерживает и при использовании ASIO драйвера задержка в районе 2 мс. к тому же есть балансные входы (выходы).
SergeyA Пост: 99323 От 03.Feb.2008 (22:05)
Друзья!
Все уже написал и работает. Остался микшер. Думаю на днях закончить. Большое всем спасибо. Как допишу - выложу на всеобщее обозрение. Может кому понадобится.
Однако конечно дискретность 48 кГц это
Математику надо прикладывать к этому однако....
Получилось? Это здорово!
Я бы не отказался от такой программы
Могу поделиться взамен чем нибудь полезным, математикой в том числе, например как 48 кгц пересчитать в 480 кгц или что еще.
Или хорошим фильмом напрмер
А почему 48? У меня две встроенных карты и одна внешняя USB и все на 192 работают, максимум 200 кгц.
=согласен. звуковуха ESI Juli@ к примеру 24 бит и 192 кГц на запись поддерживает и при использовании ASIO драйвера задержка в районе 2 мс. к тому же есть балансные входы (выходы).=
между каналами задержка практически 0, они одновременно тактируются.
Прога получилась идеологически совсем несложная. Основные проблемы именно с дискретностью входа и наличием различных искажений при низком входном сигнале (шумы, наводки).
1. Заполнение буфера для генерации синуса нужной частоты (1 период).
2. Запуск воспроизведения в кольцевом режиме.
3. Считывание сигнала в 2 массива (по каналам), пока длина записи считается в сеундах, а не в периодах.
4. Разбор входного сигнала: наложение фильтра при необходимости на нижних частотах - использован способ скользящего среднего, вычисление массива периодов входного сигнала, вычисление массива разностей фаз (поиском точек перехода через ноль), поиск в обоих массивах значений с наименьшим матожиданием. Анализ максимальной амплитуды сигнала по каждому каналу... далее здесь должно быть выравнивание уровней микшера и в цикл на считывание до получения качественного сигнала.
5. выключение воспроизведения и опять на 1
Поскольку частота известна, то думаю будет много точнее восстановить синус входного сигнала по входным значениям и от него расчитать фазу, поскольку погрешность в один такт на 48кГц дискретизации приводит к достаточно большим девиациям угла фазы.
Потом появились "ньюансы". Новый выходной сигнал почему-то изменяется по прошествии некоторого времени, хотя выход был сброшен, петли остановлены, прошло несколько секунд (трассирование проги в ручном режиме)... То есть сначала в буфере старый сигнал, потом переходный процесс, потом новый. Задержка до 8000 тактов....
Наличие во входном буфере старых остатков думаю можно исключить. поскольку все программные буфера на каждом цикле пересоздаются и вход закрывается и открывается заново, ровно как и выход.
Ну и разные прочие.
Прогу в текущем состоянии в исходнике могу выложить сегодня вечером.
Написана в консольном варианте.