Page 1 of 1

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

PostPosted: 05 Feb 2019, 23:48
by Select
Всех приветствую,
столкнулся с необычным решением с многоканальной потоковой трансляцией НЧ сигналов.
В качестве источника выступают НЧ :labview: генераторы с подключением их на Play Wafe Form, сконфигурированные под соответствующие USB аудио карты по их номерам, в моем случае их 3 и одна PCE встроенная.
Все работает превосходно до момента переноса vi на другой ПК. После запуска в конфигурациях все настройки слетают, номера портов перемешиваются в произвольном порядке или совпадают. Причина скорей всего в произвольной активизации со стороны OS USB устройств при загрузке.
Существует ли метод жесткой привязки по заранее прописанным USB номерам портов.
Пробовал компилировать в exe та же история. :think:

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

PostPosted: 11 Feb 2019, 00:57
by taras_33
номера портов перемешиваются в произвольном порядке или совпадают

Речь идет о виртуальных COM портах? Как определяютя в Диспетчере устройств сисемы ваши устройства?

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

PostPosted: 15 Feb 2019, 23:17
by ladik
Можно попробовать получать device ID либо с помощью dll и call library node либо с помощью функций VISA. Зависит от спецификации и реализации драйвера устройства. Попробуйте поискать информацию в Гугл по ключевым словам LabVIEW+USB+device Id.

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

PostPosted: 16 Feb 2019, 02:41
by taras_33
ladik wrote:Можно попробовать получать device ID либо с помощью dll и call library node либо с помощью функций VISA. Зависит от спецификации и реализации драйвера устройства. Попробуйте поискать информацию в Гугл по ключевым словам LabVIEW+USB+device Id.

Согласен. В одном из древних проектов использовал функцию из библиотеки FTDI для LabVIEW, что бы определить номер VCP который присвоила Windows моему устройству. Что бы в последствии знать какой порт открывать...
FTDI.png
FTDI.png (9.84 KiB) Viewed 1679 times

В другом проекте для этих же целей использовал VISA Find Resource Function, получаешь список устройств и выискивай свое. В моем конкретном случае было достаточно выловить по имени, которое видно в Диспетчере устройств. Но можно и с другими параметрами поиграться..
Visa.png

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

PostPosted: 16 Feb 2019, 10:24
by dadreamer
Select wrote: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.

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

PostPosted: 22 Feb 2019, 01:47
by Select
Мои извинения за свое отсутствие в обсуждениях темы, все это время занимался поиском решения, в который раз все оказалось до неприличия просто.
Как выяснилось, ExpressVI, в моем случае их 5 присваивает ID номера хаотично для обнаруженных USB карт и в далצнейшем ведет себя непредсказуемо в случае их многократного перемешивания между USB портами. Оно и понятно, так традиционно устроен OC Win, когда происходит автоматическая регистрация подключаемого USB устройства.
Как я и говорил, мне каждый раз приходилось править свойства ExpressVI расставляя карты по своим местам.
Поступил следующим образом:
после очередной отладки, внешний хаб становится частью оборудования раз и навсегда, соответсвенно USB караты в дальнейшем никогда не изымаются из хаба и не переставляются, все синхронизируется посредством драйвера Realtec HD и всЁ :super:
Имеем контролируем многоканальную трансляцию.
Я обкуривался среди админов, но так ответ и не нашел, как и чем профиксить OC, чтоб она не меняла, однажды присвоенные регистрационные номера подключаемых USBшек.

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

PostPosted: 22 Feb 2019, 08:08
by dadreamer
Select, а чем не угодил предложенный мной вариант? Или у карт имена одинаковые?.. Есть ещё вот такой вариант, хотя наверно это то же самое, только под другим соусом. По идее можно через WinAPI все данные вытащить, у каждой карты должен быть уникальным как минимум VID/PID, по нему уже отсортировать. Просто со всем, что касается звука, в ОС довольно-таки всё заморочено. Впрочем, вопрос уже решился.

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

PostPosted: 22 Feb 2019, 14:32
by Select
dadreamer, благодарю, да это мой случай, взял там пример, попробую в качестве альтенативы :drink:

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

PostPosted: 22 Feb 2019, 15:04
by Select
dadreamerПо идее можно через WinAPI все данные вытащить, у каждой карты должен быть уникальным как минимум VID/PID, по нему уже отсортировать. Просто со всем, что касается звука, в ОС довольно-таки всё заморочено. Впрочем, вопрос уже решился.
тот же расклад, но проще, все карты видны и можно выполнять выборку.

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

PostPosted: 22 Feb 2019, 17:32
by dadreamer
Select wrote:тот же расклад, но проще, все карты видны и можно выполнять выборку.

Это ведь вручную делается. Я писал насчёт программного способа формирования аналогичного списка карт. InitializeInputDeviceRing.vi как раз и выполняет это при открытии панели Play Waveform и Acquire Sound. Подприбор легко приспособить под свои нужды, если имена карт не повторяются: модифицируем как описано выше, сохраняем под другим именем, вызываем данный SubVI, в выходном массиве ищем карту по её имени, находим пару "имя - dev id", дальше этот id подаём на стандартные инструменты :labview: . Если имена повторяются, ну, в таком случае необходим дополнительный идентификатор. Кроме WinAPI можно также выдернуть системную инфу через WMI. Для меня только один здесь сомнительный момент: будет ли список, полученный через WinAPI или WMI, совпадать со списком, полученным через InitializeInputDeviceRing.vi. Это надо практически проверять.

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

PostPosted: 22 Feb 2019, 22:48
by Select
Имена карт не повторяются и метод раздельной трансляции работает, значения в контролах установил по номерам карт в дифолт.
Есть еще один вопрос, если я хочу сохранить эти потоки в wav формате под разными именам, трансляция потоков идет последовательно по каждой карте, далее в таком же порядке я хочу каждый поочередно проиграть.
В этом примере пишутся одновременно в два файла но сигнал в обоих файлах только от одной карты и разделения не происходит, хотя аппаратно на динамики потоки идут раздельно. Что я делаю не так?
Для наглядности, в качестве источника я взял две разнесенные частоты.

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

PostPosted: 23 Feb 2019, 12:25
by dadreamer
Select wrote:В этом примере пишутся одновременно в два файла но сигнал в обоих файлах только от одной карты

Из того, что я вижу на картинке, сигнал генерируется инструментом Simulate Signal и сразу же пишется в файл. Вывод на аудиокарту выполняется "до кучи", т.е. к записи в файл он никак не привязан. Поэтому то, что в файл запишется, целиком определяется настройками Simulate Signal (можно даже удалить Play Waveform, чтобы в этом убедиться). Попробуйте сделать запись не в одном, а в двух параллельных циклах. И выкладывайте программу или сниппет, чтобы можно было открыть, посмотреть, какие параметры стоят у :vi: , запустить.

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

PostPosted: 25 Feb 2019, 02:15
by Select
dadreamer, действительно размещение в отдельных циклах решило проблему, так же найдено решение, на проигрывание распределением файлов по USB устройствам:

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

PostPosted: 25 Feb 2019, 09:17
by dadreamer
Select wrote:dadreamer, действительно размещение в отдельных циклах решило проблему

Только это один цикл, а не два параллельных. :) И ещё не хватает Sound File Close после цикла.

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

PostPosted: 26 Feb 2019, 02:41
by Select
В.у. диаграмма, продолжение темы, с вариантом распределения потоков от сохраненных файлов на разные USB в одном цикле.
Изначально у меня задача была в сохранении в разные wav от каждой USB. Разнос на 2 цикла дает нужный результат, при этом полный останов приходится выполнять внешней командой меню или запускать эти процедуры в отдельных sub vi, что работает, но не так чтоб культурно, пока все суб vi висят в фоновом режиме, они записывают белый шум.