Распределение звуковых потоков

Простейшие вопросы в области инженерной разработки
Ответить
Аватара пользователя
Select
developer
developer
Сообщения: 281
Зарегистрирован: 12 дек 2017, 23:56
Версия LabVIEW: 18
Откуда: Врата надежды.
Поблагодарили: 2 раза

Распределение звуковых потоков

Сообщение Select »

Всех приветствую,
столкнулся с необычным решением с многоканальной потоковой трансляцией НЧ сигналов.
В качестве источника выступают НЧ :labview: генераторы с подключением их на Play Wafe Form, сконфигурированные под соответствующие USB аудио карты по их номерам, в моем случае их 3 и одна PCE встроенная.
Все работает превосходно до момента переноса vi на другой ПК. После запуска в конфигурациях все настройки слетают, номера портов перемешиваются в произвольном порядке или совпадают. Причина скорей всего в произвольной активизации со стороны OS USB устройств при загрузке.
Существует ли метод жесткой привязки по заранее прописанным USB номерам портов.
Пробовал компилировать в exe та же история. :think:
LabView 14,18
Аватара пользователя
taras_33

Activity
professional
professional
Сообщения: 391
Зарегистрирован: 31 окт 2009, 18:25
Награды: 1
Версия LabVIEW: 2019
Поблагодарили: 13 раз
Контактная информация:

Re: Распределение звуковых потоков

Сообщение taras_33 »

номера портов перемешиваются в произвольном порядке или совпадают
Речь идет о виртуальных COM портах? Как определяютя в Диспетчере устройств сисемы ваши устройства?
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
Аватара пользователя
ladik

Silver
developer
developer
Сообщения: 275
Зарегистрирован: 18 ноя 2014, 11:45
Награды: 1
Версия LabVIEW: 2015, 2019
Откуда: Екатеринбург
Благодарил (а): 4 раза
Поблагодарили: 3 раза
Контактная информация:

Re: Распределение звуковых потоков

Сообщение ladik »

Можно попробовать получать device ID либо с помощью dll и call library node либо с помощью функций VISA. Зависит от спецификации и реализации драйвера устройства. Попробуйте поискать информацию в Гугл по ключевым словам LabVIEW+USB+device Id.
Дорогу осилит идущий.
Аватара пользователя
taras_33

Activity
professional
professional
Сообщения: 391
Зарегистрирован: 31 окт 2009, 18:25
Награды: 1
Версия LabVIEW: 2019
Поблагодарили: 13 раз
Контактная информация:

Re: Распределение звуковых потоков

Сообщение taras_33 »

ladik писал(а):Можно попробовать получать device ID либо с помощью dll и call library node либо с помощью функций VISA. Зависит от спецификации и реализации драйвера устройства. Попробуйте поискать информацию в Гугл по ключевым словам LabVIEW+USB+device Id.
Согласен. В одном из древних проектов использовал функцию из библиотеки FTDI для LabVIEW, что бы определить номер VCP который присвоила Windows моему устройству. Что бы в последствии знать какой порт открывать...
FTDI.png
FTDI.png (9.84 КБ) 4120 просмотров
В другом проекте для этих же целей использовал VISA Find Resource Function, получаешь список устройств и выискивай свое. В моем конкретном случае было достаточно выловить по имени, которое видно в Диспетчере устройств. Но можно и с другими параметрами поиграться..
Visa.png
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Распределение звуковых потоков

Сообщение dadreamer »

Select писал(а):USB аудио карты по их номерам, в моем случае их 3 и одна PCE встроенная.
...
Существует ли метод жесткой привязки по заранее прописанным USB номерам портов.
Если имеется ввиду Device Id, который нужно подавать на некоторые :vi: с палитры Graphics & Sound -> Sound, то можно попробовать кое что. Откройте панель Acquire Sound, проверьте, что все ваши устройства отображаются в выпадающем списке. На втором компе проделайте то же самое. Если все ЗК на месте, то идём сюда: <labview directory>\vi.lib\sound2\_SoundAcquireConfig.llb\InitializeInputDeviceRing.vi, вносим маленькую модификацию и снова проверяем вывод:
InitializeInputD_BD.png
Все звуковухи также должны быть на месте. После этого не должно составлять труда разобрать выходной массив и вытащить оттуда Dev Id.
Аватара пользователя
Select
developer
developer
Сообщения: 281
Зарегистрирован: 12 дек 2017, 23:56
Версия LabVIEW: 18
Откуда: Врата надежды.
Поблагодарили: 2 раза

Re: Распределение звуковых потоков

Сообщение Select »

Мои извинения за свое отсутствие в обсуждениях темы, все это время занимался поиском решения, в который раз все оказалось до неприличия просто.
Как выяснилось, ExpressVI, в моем случае их 5 присваивает ID номера хаотично для обнаруженных USB карт и в далצнейшем ведет себя непредсказуемо в случае их многократного перемешивания между USB портами. Оно и понятно, так традиционно устроен OC Win, когда происходит автоматическая регистрация подключаемого USB устройства.
Как я и говорил, мне каждый раз приходилось править свойства ExpressVI расставляя карты по своим местам.
Поступил следующим образом:
после очередной отладки, внешний хаб становится частью оборудования раз и навсегда, соответсвенно USB караты в дальнейшем никогда не изымаются из хаба и не переставляются, все синхронизируется посредством драйвера Realtec HD и всЁ :super:
Имеем контролируем многоканальную трансляцию.
Я обкуривался среди админов, но так ответ и не нашел, как и чем профиксить OC, чтоб она не меняла, однажды присвоенные регистрационные номера подключаемых USBшек.
LabView 14,18
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Распределение звуковых потоков

Сообщение dadreamer »

Select, а чем не угодил предложенный мной вариант? Или у карт имена одинаковые?.. Есть ещё вот такой вариант, хотя наверно это то же самое, только под другим соусом. По идее можно через WinAPI все данные вытащить, у каждой карты должен быть уникальным как минимум VID/PID, по нему уже отсортировать. Просто со всем, что касается звука, в ОС довольно-таки всё заморочено. Впрочем, вопрос уже решился.
Аватара пользователя
Select
developer
developer
Сообщения: 281
Зарегистрирован: 12 дек 2017, 23:56
Версия LabVIEW: 18
Откуда: Врата надежды.
Поблагодарили: 2 раза

Re: Распределение звуковых потоков

Сообщение Select »

dadreamer, благодарю, да это мой случай, взял там пример, попробую в качестве альтенативы :drink:
LabView 14,18
Аватара пользователя
Select
developer
developer
Сообщения: 281
Зарегистрирован: 12 дек 2017, 23:56
Версия LabVIEW: 18
Откуда: Врата надежды.
Поблагодарили: 2 раза

Re: Распределение звуковых потоков

Сообщение Select »

dadreamerПо идее можно через WinAPI все данные вытащить, у каждой карты должен быть уникальным как минимум VID/PID, по нему уже отсортировать. Просто со всем, что касается звука, в ОС довольно-таки всё заморочено. Впрочем, вопрос уже решился.
тот же расклад, но проще, все карты видны и можно выполнять выборку.
Вложения
screenshot 2019-02-22 001.png
screenshot 2019-02-22 001.png (2.67 КБ) 3980 просмотров
LabView 14,18
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Распределение звуковых потоков

Сообщение dadreamer »

Select писал(а):тот же расклад, но проще, все карты видны и можно выполнять выборку.
Это ведь вручную делается. Я писал насчёт программного способа формирования аналогичного списка карт. InitializeInputDeviceRing.vi как раз и выполняет это при открытии панели Play Waveform и Acquire Sound. Подприбор легко приспособить под свои нужды, если имена карт не повторяются: модифицируем как описано выше, сохраняем под другим именем, вызываем данный SubVI, в выходном массиве ищем карту по её имени, находим пару "имя - dev id", дальше этот id подаём на стандартные инструменты :labview: . Если имена повторяются, ну, в таком случае необходим дополнительный идентификатор. Кроме WinAPI можно также выдернуть системную инфу через WMI. Для меня только один здесь сомнительный момент: будет ли список, полученный через WinAPI или WMI, совпадать со списком, полученным через InitializeInputDeviceRing.vi. Это надо практически проверять.
Аватара пользователя
Select
developer
developer
Сообщения: 281
Зарегистрирован: 12 дек 2017, 23:56
Версия LabVIEW: 18
Откуда: Врата надежды.
Поблагодарили: 2 раза

Re: Распределение звуковых потоков

Сообщение Select »

Имена карт не повторяются и метод раздельной трансляции работает, значения в контролах установил по номерам карт в дифолт.
Есть еще один вопрос, если я хочу сохранить эти потоки в wav формате под разными именам, трансляция потоков идет последовательно по каждой карте, далее в таком же порядке я хочу каждый поочередно проиграть.
В этом примере пишутся одновременно в два файла но сигнал в обоих файлах только от одной карты и разделения не происходит, хотя аппаратно на динамики потоки идут раздельно. Что я делаю не так?
Для наглядности, в качестве источника я взял две разнесенные частоты.
Вложения
screenshot 2019-02-22 001.png
LabView 14,18
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Распределение звуковых потоков

Сообщение dadreamer »

Select писал(а):В этом примере пишутся одновременно в два файла но сигнал в обоих файлах только от одной карты
Из того, что я вижу на картинке, сигнал генерируется инструментом Simulate Signal и сразу же пишется в файл. Вывод на аудиокарту выполняется "до кучи", т.е. к записи в файл он никак не привязан. Поэтому то, что в файл запишется, целиком определяется настройками Simulate Signal (можно даже удалить Play Waveform, чтобы в этом убедиться). Попробуйте сделать запись не в одном, а в двух параллельных циклах. И выкладывайте программу или сниппет, чтобы можно было открыть, посмотреть, какие параметры стоят у :vi: , запустить.
Аватара пользователя
Select
developer
developer
Сообщения: 281
Зарегистрирован: 12 дек 2017, 23:56
Версия LabVIEW: 18
Откуда: Врата надежды.
Поблагодарили: 2 раза

Re: Распределение звуковых потоков

Сообщение Select »

dadreamer, действительно размещение в отдельных циклах решило проблему, так же найдено решение, на проигрывание распределением файлов по USB устройствам:
Вложения
screenshot 2019-02-25 001.png
LabView 14,18
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Распределение звуковых потоков

Сообщение dadreamer »

Select писал(а):dadreamer, действительно размещение в отдельных циклах решило проблему
Только это один цикл, а не два параллельных. :) И ещё не хватает Sound File Close после цикла.
Аватара пользователя
Select
developer
developer
Сообщения: 281
Зарегистрирован: 12 дек 2017, 23:56
Версия LabVIEW: 18
Откуда: Врата надежды.
Поблагодарили: 2 раза

Re: Распределение звуковых потоков

Сообщение Select »

В.у. диаграмма, продолжение темы, с вариантом распределения потоков от сохраненных файлов на разные USB в одном цикле.
Изначально у меня задача была в сохранении в разные wav от каждой USB. Разнос на 2 цикла дает нужный результат, при этом полный останов приходится выполнять внешней командой меню или запускать эти процедуры в отдельных sub vi, что работает, но не так чтоб культурно, пока все суб vi висят в фоновом режиме, они записывают белый шум.
LabView 14,18
Ответить

Вернуться в «Для чайников»