Re[7]: DS Filter as Audio Device
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 11.03.10 07:23
Оценка: +1
Здравствуйте, AcidTheProgrammer, Вы писали:

ATP>Какой MME ? Где в вопросе слово MME?


MME — это единственный звуковой интерфейс, поддерживаемый всеми без исключения 32-разрядными виндами. Когда говорят просто "звуковое устройство", без уточнения интерфейса — подразумевают именно MME. А в
вопросе было "причем что этот фильтр другие программы видели в списках устройств (всякие skype, виндовые аудио пропертиз)". При добавлении фильтра предложенными Вами методом он будет виден в списке устройств "Sound/Multimedia", его можно будет назначить стандартным системным устройством записи/воспроизведения, регулировать уровни и т.п.?

ATP>Зачем вы пользуетесь устаревшим интерфейсом waveInXxx/waveOutXxx


Затем, что это единственный универсальный и предсказуемый интерфейс общего назначения. Попробуйте, например, организовать надежную запись звука с относительно низким лагом и произвольным выбором форматов через "неустаревший" DirectSound, чтобы одинаково хорошо работало в XP/Vista/Win7 — посмеемся все вместе.

ATP>который к тому же еще и эмулируется через DirectSound?


Никогда и нигде MME не эмулировался через DirectSound. Вот DirectSound эмулировался через MME при отсутствии прямой поддержки VxD/WDM.

ATP>Примеры есть в PlatformSDK. Повторяю, для того что бы нормальные программы захвата видели ваше устройство в драйвера лезть необязательно.


Audacity, Sound Forge, Audition — это нормальные программы захвата? Какие именно примеры в PlatformSDK это позволяют? Коли заявляете о возможности — будьте добры указать конкретно, мне там копаться недосуг.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
DS Filter as Audio Device
От: amid493 СССР http://gesell-ru.blogspot.com/
Дата: 09.03.10 08:34
Оценка:
Здравствуйте!

может кто может подскзаать — можно ли зарегестрировать в реестре DirectShow Audio Filter как И/О Аудио устройство, в каком нить HKEY_CURRENT_USER\Software\Microsoft\ActiveMovie\devenum
причем что этот фильтр другие программы видели в списках устройств (всякие skype, виндовые аудио пропертиз)

можно ли так сделать или надо писать драйвер виртуального аудио устройства по типу VAC?

С уважением
Дмитрий

заранее спасибо за помощь
Re: DS Filter as Audio Device
От: AcidTheProgrammer Россия https://hts.tv/
Дата: 09.03.10 08:50
Оценка:
Здравствуйте, amid493, Вы писали:

A>Здравствуйте!


A>может кто может подскзаать — можно ли зарегестрировать в реестре DirectShow Audio Filter как И/О Аудио устройство, в каком нить HKEY_CURRENT_USER\Software\Microsoft\ActiveMovie\devenum

A>причем что этот фильтр другие программы видели в списках устройств (всякие skype, виндовые аудио пропертиз)

A>можно ли так сделать или надо писать драйвер виртуального аудио устройства по типу VAC?


A>С уважением

A>Дмитрий

A>заранее спасибо за помощь


Запросто! Смотри интерфейс CLSID_FilterMapper2. Регистрируешь в категории CLSID_AudioInputDeviceCategory.
Re[2]: DS Filter as Audio Device
От: alvas  
Дата: 09.03.10 09:02
Оценка:
Здравствуйте, AcidTheProgrammer, Вы писали:

A>>может кто может подскзаать — можно ли зарегестрировать в реестре DirectShow Audio Filter как И/О Аудио устройство, в каком нить HKEY_CURRENT_USER\Software\Microsoft\ActiveMovie\devenum

A>>причем что этот фильтр другие программы видели в списках устройств (всякие skype, виндовые аудио пропертиз)

A>>можно ли так сделать или надо писать драйвер виртуального аудио устройства по типу VAC?


ATP>Запросто! Смотри интерфейс CLSID_FilterMapper2. Регистрируешь в категории CLSID_AudioInputDeviceCategory.


А это устройство будет видимым только для DirectShow?
http://alvas.net — Аудио-инструменты для .Net разработчиков
Re[2]: DS Filter as Audio Device
От: amid493 СССР http://gesell-ru.blogspot.com/
Дата: 09.03.10 09:09
Оценка:
ATP>Запросто! Смотри интерфейс CLSID_FilterMapper2. Регистрируешь в категории CLSID_AudioInputDeviceCategory.

ок спасибо буду глядеть)
Re[2]: DS Filter as Audio Device
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 09.03.10 11:05
Оценка:
Здравствуйте, AcidTheProgrammer, Вы писали:

A>>можно ли зарегестрировать в реестре DirectShow Audio Filter как И/О Аудио устройство, в каком нить HKEY_CURRENT_USER\Software\Microsoft\ActiveMovie\devenum

A>>причем что этот фильтр другие программы видели в списках устройств (всякие skype, виндовые аудио пропертиз)

ATP>Запросто! Смотри интерфейс CLSID_FilterMapper2. Регистрируешь в категории CLSID_AudioInputDeviceCategory.


Человек спрашивал, можно ли сделать так, чтобы DirectShow Filter автоматически был представлен, как обычное звуковое устройство (MME/DS/WASAPI). А это, увы, невозможно. Наоборот — пожалуйста, стандартные фильтры DirectShow автоматически создаются для каждого известного звукового устройства.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: DS Filter as Audio Device
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 09.03.10 11:05
Оценка:
Здравствуйте, amid493, Вы писали:

A>можно ли зарегестрировать в реестре DirectShow Audio Filter как И/О Аудио устройство, в каком нить HKEY_CURRENT_USER\Software\Microsoft\ActiveMovie\devenum

A>причем что этот фильтр другие программы видели в списках устройств (всякие skype, виндовые аудио пропертиз)

Нет.

A>или надо писать драйвер виртуального аудио устройства по типу VAC?


Да, только так. Под 2k/XP/2k3 можно обойтись user-mode драйвером, под Vista/Win7 — только WDM.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: DS Filter as Audio Device
От: AcidTheProgrammer Россия https://hts.tv/
Дата: 09.03.10 13:32
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Здравствуйте, amid493, Вы писали:


A>>можно ли зарегестрировать в реестре DirectShow Audio Filter как И/О Аудио устройство, в каком нить HKEY_CURRENT_USER\Software\Microsoft\ActiveMovie\devenum

A>>причем что этот фильтр другие программы видели в списках устройств (всякие skype, виндовые аудио пропертиз)

ЕМ>Нет.


A>>или надо писать драйвер виртуального аудио устройства по типу VAC?


ЕМ>Да, только так. Под 2k/XP/2k3 можно обойтись user-mode драйвером, под Vista/Win7 — только WDM.


Вы хоть бы проверили сначала, прежде чем так уверенно утвердительно утверждать...

что этот фильтр другие программы видели в списках устройств (всякие skype, виндовые аудио пропертиз)

Skype — видит, Видео редакторы, граберы видят, почти все нормальные программы работающие с видео видят. Зачем посылать человека так далеко.... ???
Re[3]: DS Filter as Audio Device
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 09.03.10 17:17
Оценка:
Здравствуйте, AcidTheProgrammer, Вы писали:

ATP>Вы хоть бы проверили сначала, прежде чем так уверенно утвердительно утверждать...


Не видел ни одного DS-фильтра, который бы виделся, как стандартное MME/DS устройство, и не представляю, за счет какой технологии это возможно. Примеров есть?

Да, если речь идет о Vista-only — там такое вполне возможно, но в исходном посте это не оговаривалось.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: DS Filter as Audio Device
От: amid493 СССР http://gesell-ru.blogspot.com/
Дата: 10.03.10 03:41
Оценка:
ЕМ>Да, если речь идет о Vista-only — там такое вполне возможно, но в исходном посте это не оговаривалось.

речь идет о решении под XP, Vista, Win7 и последующие оси.
Re[3]: DS Filter as Audio Device
От: amid493 СССР http://gesell-ru.blogspot.com/
Дата: 10.03.10 03:50
Оценка:
ATP>Skype — видит, Видео редакторы, граберы видят, почти все нормальные программы работающие с видео видят. Зачем посылать человека так далеко.... ???

речь идет именно о аудио фильтре, а не видео.
Re[4]: DS Filter as Audio Device
От: AcidTheProgrammer Россия https://hts.tv/
Дата: 10.03.10 07:52
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Здравствуйте, AcidTheProgrammer, Вы писали:


ATP>>Вы хоть бы проверили сначала, прежде чем так уверенно утвердительно утверждать...


ЕМ>Не видел ни одного DS-фильтра, который бы виделся, как стандартное MME/DS устройство, и не представляю, за счет какой технологии это возможно. Примеров есть?


ЕМ>Да, если речь идет о Vista-only — там такое вполне возможно, но в исходном посте это не оговаривалось.


Обыкновенный System Device Enumerator (CLSID_SystemDeviceEnum) создает COM объект представляющий устройство. Да, вы правы над драйвером автоматически создается оболочка DS, но ни что не мешает зарегистрировать уже готовый COM объект своего класса.
Re[5]: DS Filter as Audio Device
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 10.03.10 16:43
Оценка:
Здравствуйте, AcidTheProgrammer, Вы писали:

ATP>Обыкновенный System Device Enumerator (CLSID_SystemDeviceEnum) создает COM объект представляющий устройство.


Какое устройство? Речь идет об устройствах, доступ к которым возможен через интерфейс MME (функции waveInXxx/waveOutXxx). Эти функции обслуживает winmm.dll. Первый раз за много лет слышу, чтобы winmm работала с устройствами, отличными от перечисленных в HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32\waveN. Поэтому повторяю вопрос: действующие примеры реализации есть? Где их можно посмотреть?

Разумеется, можно сделать свой user-mode драйвер, добавляемый через этот самый ключ Drivers32, а он уже может прокидывать запросы куда угодно, но это не будет работать в Vista/Win7.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[6]: DS Filter as Audio Device
От: AcidTheProgrammer Россия https://hts.tv/
Дата: 11.03.10 06:54
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Какое устройство? Речь идет об устройствах, доступ к которым возможен через интерфейс MME (функции waveInXxx/waveOutXxx). Эти функции обслуживает winmm.dll.


Какой MME ? Где в вопросе слово MME?

EM> Первый раз за много лет слышу, чтобы winmm работала с устройствами, отличными от перечисленных в HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32\waveN. Поэтому повторяю вопрос: действующие примеры реализации есть? Где их можно посмотреть?


Зачем вы пользуетесь устаревшим интерфейсом waveInXxx/waveOutXxx, который к тому же еще и эмулируется через DirectSound?

Примеры есть в PlatformSDK. Повторяю, для того что бы нормальные программы захвата видели ваше устройство в драйвера лезть необязательно.
Re[8]: DS Filter as Audio Device
От: AcidTheProgrammer Россия https://hts.tv/
Дата: 11.03.10 09:18
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ> Вами методом он будет виден в списке устройств "Sound/Multimedia", его можно будет назначить стандартным системным устройством записи/воспроизведения, регулировать уровни и т.п.?


Все эти требования прозвучали в вопросе топикастера? Потом причем тут это. Я описал самый простой метод.

ЕМ>Затем, что это единственный универсальный и предсказуемый интерфейс общего назначения. Попробуйте, например, организовать надежную запись звука с относительно низким лагом и произвольным выбором форматов через "неустаревший" DirectSound, чтобы одинаково хорошо работало в XP/Vista/Win7 — посмеемся все вместе.


Так делал (и не раз) — все замечательно работает. Лаг 20 миллисекунд. Считаю что достаточно мало, во всяком случае меньше на non-real time OS и не нужно.

ЕМ>Никогда и нигде MME не эмулировался через DirectSound.

Насколько мне известно функции DSound реализуются драйвером практически без изменений. MME — преобразуется в вызовы драйвера заточенного под DSound. Если все реализовано оптимально, то разницы нет никакой. От куда у вас выигрыш в скорости?

ЕМ>Вот DirectSound эмулировался через MME при отсутствии прямой поддержки VxD/WDM.

Ну вы еще вспомните что было при Царе Горохе. Начиная с 98 Windows это уже не так.

ЕМ>Audacity, Sound Forge, Audition — это нормальные программы захвата? Какие именно примеры в PlatformSDK это позволяют? Коли заявляете о возможности — будьте добры указать конкретно, мне там копаться недосуг.


Понятие нормальность — относительно. Вам нужно вы и копайтесь. Я с вами не спорю, но зачем же людям начинать с драйверов... не подойдет мое решение, сами до написания драйверов дойдут.
Re[2]: DS Filter as Audio Device
От: amid493 СССР http://gesell-ru.blogspot.com/
Дата: 11.03.10 11:49
Оценка:
ATP>Запросто! Смотри интерфейс CLSID_FilterMapper2. Регистрируешь в категории CLSID_AudioInputDeviceCategory.

интересно.
зарегистрировал фильтр в указанной категории — camfrog одно из целевых приложений видит этот фильтр-устройство, а skype видать как то хитрее к делу подходит и отказывается видеть устройство)
Re[9]: DS Filter as Audio Device
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 11.03.10 11:51
Оценка:
Здравствуйте, AcidTheProgrammer, Вы писали:

ЕМ>>Вами методом он будет виден в списке устройств "Sound/Multimedia", его можно будет назначить стандартным системным устройством записи/воспроизведения, регулировать уровни и т.п.?


ATP>Все эти требования прозвучали в вопросе топикастера?


Они подразумевались, ибо относятся к поведению любого стандартного звукового устройства Windows, с которым может работать практически любой звуковой софт, если он сделан "для звука вообще", а не заточен под определенный интерфейс. Это, если что, элементарно, и до Вашего появления ни разу не нуждалось в уточнениях. А Ваше наивное удивление похоже на реакцию иного продавца компьютерной лавки: "вы же просили модем — я вам и продал винмодем, откуда я знаю, что вы его под какой-то юникс поставите, я и слов-то таких не знаю".

ATP> Потом причем тут это. Я описал самый простой метод.


Угу — с претензией на то, что он еще и универсальный. Человек спрашивал общее решение, Вы же ему выдали очень частное, но с таким видом, будто всегда и везде только так и делают.

ЕМ>>Попробуйте, например, организовать надежную запись звука с относительно низким лагом и произвольным выбором форматов через "неустаревший" DirectSound, чтобы одинаково хорошо работало в XP/Vista/Win7 — посмеемся все вместе.


ATP>Так делал (и не раз) — все замечательно работает. Лаг 20 миллисекунд.


Это Вам очень повезло. Ибо мало что в винде сделано настолько криво, как запись звука через DirectSound. Ибо DS изначально проектировался исключительно для быстрого воспроизведения в игрушках, и записи там не было, как класса — ее прикрутили позднее, и откровенно по-босяцки.

ATP>Насколько мне известно функции DSound реализуются драйвером практически без изменений.


Так было только в 9x/ME, и только на уровне VxD. Только это была не стандартная модель драйвера (там такой вообще не было, каждый делал, как хотел), а для поддержки DS нужно было в базовый VxD-драйвер добавить специальный интерфейс, действительно повторяющий DS. В 98 и дальше DS транслируется в WDM/KS, который на него совершенно не похож.

ATP>MME — преобразуется в вызовы драйвера заточенного под DSound.


Никогда такого не было. Либо драйвер сам экспортировал все необходимые для MME функции (9x/ME/2k/XP/2k3), либо MME транслируется напрямую в WDM/KS.

ATP> Если все реализовано оптимально, то разницы нет никакой. От куда у вас выигрыш в скорости?


ЕМ>>Вот DirectSound эмулировался через MME при отсутствии прямой поддержки VxD/WDM.


ATP>Ну вы еще вспомните что было при Царе Горохе. Начиная с 98 Windows это уже не так.


Ну-ну, и как же это, по-Вашему, было, начиная с 98?

ЕМ>>Audacity, Sound Forge, Audition — это нормальные программы захвата? Какие именно примеры в PlatformSDK это позволяют? Коли заявляете о возможности — будьте добры указать конкретно, мне там копаться недосуг.


ATP>Понятие нормальность — относительно. Вам нужно вы и копайтесь.


Вообще-то, в приличном обществе принято, что заявившему о факте наличия чего-либо следует предоставить и некие конкретные обоснования. Перекладывать бремя доказательство на сомневающихся — типичный подход жулика.

Я вот сделал поиск по дереву Samples из PSDK 2003 Server, и не нашел там ни CLSID_FilterMapper, ни CLSID_AudioInputDeviceCategory. Я искал в каком-то не том PSDK?

ATP>Я с вами не спорю, но зачем же людям начинать с драйверов... не подойдет мое решение, сами до написания драйверов дойдут.


Ага, при этом потеряв изрядное количество времени на прохождение тупикового пути, и не менее изрядно поматерив доброхота, уверенно по этому пути направившего...
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: DS Filter as Audio Device
От: amid493 СССР http://gesell-ru.blogspot.com/
Дата: 11.03.10 11:51
Оценка:
ATP>Запросто! Смотри интерфейс CLSID_FilterMapper2. Регистрируешь в категории CLSID_AudioInputDeviceCategory.

но я не исключаю что я где то накосячил потому как с ДШ только начал знакомиться и возможно не правильно прописал пины или фильтр инфо.
Re[2]: DS Filter as Audio Device
От: amid493 СССР http://gesell-ru.blogspot.com/
Дата: 11.03.10 11:53
Оценка:
еще интересно что GraphEdit видит данный фильтр в категории Инпут Девайсов.
Re[2]: DS Filter as Audio Device
От: amid493 СССР http://gesell-ru.blogspot.com/
Дата: 11.03.10 12:10
Оценка:
похоже дело в том что фильтр прописался в CLSID_AudioInputDeviceCategory
но почему то не прописался в
HKEY_CURRENT_USER\Software\Microsoft\ActiveMovie\devenum
а скайп похоже именно оттуда берет список устройств
Re: DS Filter as Audio Device
От: amid493 СССР http://gesell-ru.blogspot.com/
Дата: 11.03.10 12:19
Оценка:
кстати задача уточнилась — запись звука не требуется
требуется подсовывать приложениям типа скайп, камфрог звук из этого фильтра
а в фильтр звук будет пихать другое приложение
то есть фильтр по сути будет абсолютно прозрачным
но для указанных приложений он будет выглядеть микрофоном — и эти приложения будут думать и соотв передавать полученный звук из фильтра как будто они получили его из микрофона.
Re[3]: DS Filter as Audio Device
От: AcidTheProgrammer Россия https://hts.tv/
Дата: 11.03.10 12:20
Оценка:
Здравствуйте, amid493, Вы писали:

A>похоже дело в том что фильтр прописался в CLSID_AudioInputDeviceCategory

A>но почему то не прописался в
A>HKEY_CURRENT_USER\Software\Microsoft\ActiveMovie\devenum
A>а скайп похоже именно оттуда берет список устройств

Если все нормально написано, то должен видеть, у меня видит во всяком случае.
Посмотрите создает ли он экземпляр вашего фильтра, какие интерфейсы запрашивает. Поддержите их для фильтра и для принов.
Re[4]: DS Filter as Audio Device
От: amid493 СССР http://gesell-ru.blogspot.com/
Дата: 11.03.10 12:38
Оценка:
ATP>Если все нормально написано, то должен видеть, у меня видит во всяком случае.
ATP>Посмотрите создает ли он экземпляр вашего фильтра, какие интерфейсы запрашивает. Поддержите их для фильтра и для принов.

а можете выложить функцию DllRegisterServer вашего фильтра со всеми соответствующими REGFILTERPINS, REGFILTER2 и тд
?

спасиб)
Re[10]: DS Filter as Audio Device
От: AcidTheProgrammer Россия https://hts.tv/
Дата: 11.03.10 12:38
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Они подразумевались, ибо относятся к поведению любого стандартного звукового устройства Windows, с которым может работать практически любой звуковой софт, если он сделан "для звука вообще", а не заточен под определенный интерфейс. Это, если что, элементарно, и до Вашего появления ни разу не нуждалось в уточнениях. А Ваше наивное удивление похоже на реакцию иного продавца компьютерной лавки: "вы же просили модем — я вам и продал винмодем, откуда я знаю, что вы его под какой-то юникс поставите, я и слов-то таких не знаю".


До какого появления, я с технологией DShow и DSound уже лет 10 работаю и на 95,98,NT и т.д.

ЕМ>Угу — с претензией на то, что он еще и универсальный. Человек спрашивал общее решение, Вы же ему выдали очень частное, но с таким видом, будто всегда и везде только так и делают.


Претензии пока только с вашей стороны Евгений.

ЕМ>Это Вам очень повезло. Ибо мало что в винде сделано настолько криво, как запись звука через DirectSound. Ибо DS изначально проектировался исключительно для быстрого воспроизведения в игрушках, и записи там не было, как класса — ее прикрутили позднее, и откровенно по-босяцки.


Не нужно мне рассказывать об игрушках, я уже 10 лет за работу с мультимедиа деньги получаю и причем неплохие.

ЕМ>Никогда такого не было. Либо драйвер сам экспортировал все необходимые для MME функции (9x/ME/2k/XP/2k3), либо MME транслируется напрямую в WDM/KS.


Куда напрямую и кто прямее — посмотрите картинки по ссылке на MSDN, я вам прислал.
Обе технологии в конце концов обращаются к драйверу, т.ч. разницы нет никакой, но — DSound проще.

ЕМ>Вообще-то, в приличном обществе принято, что заявившему о факте наличия чего-либо следует предоставить и некие конкретные обоснования. Перекладывать бремя доказательство на сомневающихся — типичный подход жулика.


По вашим намекам я делаю вывод что вы как раз из "приличного" общества и считаете себя самым умным

ЕМ>Ага, при этом потеряв изрядное количество времени на прохождение тупикового пути, и не менее изрядно поматерив доброхота, уверенно по этому пути направившего...


Евгений, если вы умеете не только драйвера писать, но считать деньги и время — вы быстро поймете, что пути бывают разными и начинают все обычно с самых простых и проверенных.
Человеку не нужен драйвер, он хочет просто подставить свои данные и все.
Re[5]: DS Filter as Audio Device
От: AcidTheProgrammer Россия https://hts.tv/
Дата: 11.03.10 12:44
Оценка:
Здравствуйте, amid493, Вы писали:


ATP>>Если все нормально написано, то должен видеть, у меня видит во всяком случае.

ATP>>Посмотрите создает ли он экземпляр вашего фильтра, какие интерфейсы запрашивает. Поддержите их для фильтра и для принов.

A>а можете выложить функцию DllRegisterServer вашего фильтра со всеми соответствующими REGFILTERPINS, REGFILTER2 и тд

A>?

Могу, но дело в том что там используются внутренние библиотеки, без которых код неполон, которые выложить у меня нет возможности. Но я вас уверяю что кроме FilterMapper-а там ничего не используется. 99% — фильтр у вас создается но потом отсеивается по причине нехватки каких-нибудь стандартных интерфейсов.
Re[6]: DS Filter as Audio Device
От: amid493 СССР http://gesell-ru.blogspot.com/
Дата: 11.03.10 12:49
Оценка:
ATP>Могу, но дело в том что там используются внутренние библиотеки, без которых код неполон, которые выложить у меня нет возможности. Но я вас уверяю что кроме FilterMapper-а там ничего не используется. 99% — фильтр у вас создается но потом отсеивается по причине нехватки каких-нибудь стандартных интерфейсов.

да полный код и не нужен — нужна фактически только вот эта часть

возможно еще нужно регистрировать в CLSID_SystemDeviceEnum?


REGPINTYPES sudInputTypes = { &MEDIATYPE_Audio, &MEDIASUBTYPE_PCM };   
REGPINTYPES sudOutputTypes = { &MEDIATYPE_Audio, &MEDIASUBTYPE_PCM };   

REGFILTERPINS sudPinReg[] = {   
    // Input pin.   
    { 0, FALSE, // Rendered?   
    FALSE, // Output?   
    FALSE, // Zero?   
    FALSE, // Many?   
    0, 0,    
    1, &sudInputTypes  // Media types.   
    },   
    // Output pin.   
    { 0, FALSE, // Rendered?   
    TRUE, // Output?   
    FALSE, // Zero?   
    FALSE, // Many?   
    0, 0,    
    1, &sudOutputTypes      // Media types.   
    }   
};   
// Declare filter information.   
REGFILTER2 rf2FilterReg = {   
    1,                // Version number.   
    MERIT_DO_NOT_USE, // Merit.   
    2,                // Number of pins.   
    sudPinReg         // Pointer to pin information.   
};   


STDAPI DllRegisterServer()
{
    HRESULT hr = AMovieDllRegisterServer2( TRUE );   
    if (FAILED(hr))   
    {   
        return hr;   
    }   
    IFilterMapper2 *pFM2 = NULL;   
    //CoCreateInstance (CLSID_SystemDeviceEnum, nil, CLSCTX_INPROC_SERVER,
    //    IID_ICreateDevEnum, pSysDevEnum);
    hr = CoCreateInstance(CLSID_FilterMapper2, NULL, CLSCTX_INPROC_SERVER,   
        IID_IFilterMapper2, (void **)&pFM2);   
    if (SUCCEEDED(hr))   
    {   
        hr = pFM2->RegisterFilter(   
            CLSID_WavDest,                // Filter CLSID.    
            sudWavDest.strName,                       // Filter name.   
            NULL,                            // Device moniker.    
            &CLSID_AudioInputDeviceCategory,  // Video compressor category.   
            sudWavDest.strName,                       // Instance data.   
            &rf2FilterReg                    // Filter information.   
            );   
        pFM2->Release();   
    }   
    return hr;   
}
Re[7]: DS Filter as Audio Device
От: AcidTheProgrammer Россия https://hts.tv/
Дата: 11.03.10 12:58
Оценка:
Здравствуйте, amid493, Вы писали:

У меня все также. Эти reg структуры на практике никак не влияют (кроме пожалуй MERIT-а) на процесс подбора фильтра при попытке его присоединить, можете сами попробовать указать любые параметры или нули — dll все равно загрузится и граф будет пытаться вставить зарегистрированный фильтр.
Попробуйте запустить skype из под отладчика и поставьте брикпоинт в конструкторе фильра. Он срабатывает?
Re[8]: DS Filter as Audio Device
От: squid  
Дата: 11.03.10 14:55
Оценка:
Здравствуйте, AcidTheProgrammer, Вы писали:

а еще лучше — добавить вывод отладочной инфыв файл или банальных messagebox штук 5. Skype ведь шифрование трафика использует, не думаю что его просто так дебажить можно...

ATP>Попробуйте запустить skype из под отладчика и поставьте брикпоинт в конструкторе фильра. Он срабатывает?
Re[7]: DS Filter as Audio Device
От: 3dlev  
Дата: 11.03.10 16:08
Оценка:
Не забудьте реализовать интерфейс IKsPropertySet у вас в фильтре — без него многие программы не работают
Re[11]: DS Filter as Audio Device
От: 3dlev  
Дата: 11.03.10 16:16
Оценка:
ATP>Человеку не нужен драйвер, он хочет просто подставить свои данные и все.

Я долго работал над проблемой виртуального источника звука, но в конце концов пришел к драйверу, так как часть программ (в том числе и Скайп, AOL messenger, итд) так и не сработались с решением которое вы предлагаете (может быть потому что они вызывают CreateClassEnumerator со флагом CDEF_DEVMON_PNP_DEVICE ??). Простой вопрос — то, что вы предлагаете со Скайпом когда либо работало?
Re[12]: DS Filter as Audio Device
От: AcidTheProgrammer Россия https://hts.tv/
Дата: 12.03.10 08:17
Оценка:
Здравствуйте, 3dlev, Вы писали:

ATP>>Человеку не нужен драйвер, он хочет просто подставить свои данные и все.


3>Я долго работал над проблемой виртуального источника звука, но в конце концов пришел к драйверу, так как часть программ (в том числе и Скайп, AOL messenger, итд) так и не сработались с решением которое вы предлагаете (может быть потому что они вызывают CreateClassEnumerator со флагом CDEF_DEVMON_PNP_DEVICE ??). Простой вопрос — то, что вы предлагаете со Скайпом когда либо работало?


Да у меня работает, вот прямо сейчас — мои DS фильтры как видео и аудио девайсы скайп видит и берет с них данные.
Re[13]: DS Filter as Audio Device
От: amid493 СССР http://gesell-ru.blogspot.com/
Дата: 12.03.10 09:14
Оценка:
ATP>Да у меня работает, вот прямо сейчас — мои DS фильтры как видео и аудио девайсы скайп видит и берет с них данные.

Плз, можешь показать реализацию IKsPropertySet, IAMStreamConfig, IAMStreamControl в классе фильтра?
Re[14]: DS Filter as Audio Device
От: AcidTheProgrammer Россия https://hts.tv/
Дата: 12.03.10 09:31
Оценка:
Здравствуйте, amid493, Вы писали:


ATP>>Да у меня работает, вот прямо сейчас — мои DS фильтры как видео и аудио девайсы скайп видит и берет с них данные.


A>Плз, можешь показать реализацию IKsPropertySet, IAMStreamConfig, IAMStreamControl в классе фильтра?


IAMStreamControl — точно не нужен, просто возвращай E_NOTIMPL

IAMStreamConfig:

////////////////////////////////////////////////////////////////////////
        // class AMStreamConfig
        ////////////////////////////////////////////////////////////////////////

        ////////////////////////////////////////////////////////////////////////
        // Construction/Destruction
        ////////////////////////////////////////////////////////////////////////

        AMStreamConfig::AMStreamConfig(const TCHAR* pName, CaptureOutputPin& pin, HRESULT* phr)
        :    CUnknown(pName, static_cast<IPin*>(&pin))
        ,    m_pin(pin)
        {
        }



        ////////////////////////////////////////////////////////////////////////
        // Public methods

        STDMETHODIMP AMStreamConfig::NonDelegatingQueryInterface(REFIID riid, void **ppv)
        {
            if(riid == IID_IAMStreamConfig) {
                CheckPointer(ppv, E_POINTER);
                return GetInterface(static_cast<IAMStreamConfig*>(this), ppv);
            }
            
            return CUnknown::NonDelegatingQueryInterface(riid, ppv);
        }



        ////////////////////////////////////////////////////////////////////////
        // Implementation


        ////////////////////////////////////////////////////////////////////////
        // Implementation of IAMStreamConfig interface

        STDMETHODIMP AMStreamConfig::SetFormat(AM_MEDIA_TYPE* pMType)
        {
            CheckPointer(pMType, E_POINTER);

            CMediaType& mtype = *reinterpret_cast<CMediaType*>(pMType);
            if (FAILED(m_pin.CheckMediaType(mtype)))
                return VFW_E_INVALIDMEDIATYPE;

            // Set preferred media type
            m_pin.SetPreferredMeidaType(*pMType);

            return S_OK;
        }



        ////////////////////////////////////////////////////////////////////////
        STDMETHODIMP AMStreamConfig::GetFormat(AM_MEDIA_TYPE** ppMType)
        {
            // Try to get current preferred media type

            CMediaType mtPreferred = m_pin.GetPreferredMediaType();

            if (!mtPreferred.IsValid()) {
                // If not set try to get preferred media type from derived class 

                mtPreferred = OnGetPreferredMediaType();
            }

            // Allocate memory for output media type

            *ppMType = reinterpret_cast<AM_MEDIA_TYPE*>(::CoTaskMemAlloc(sizeof(**ppMType)));
            if (*ppMType == NULL)
                return E_OUTOFMEMORY;

            // Copy preferred media type to output media type

            ZeroMemory(*ppMType, sizeof(**ppMType));
            CMediaType& mtype = *reinterpret_cast<CMediaType*>(*ppMType);
            mtype = mtPreferred;

            // Media type successfully return
            return S_OK;
        }



        ////////////////////////////////////////////////////////////////////////
        STDMETHODIMP AMStreamConfig::GetNumberOfCapabilities(int* pnCount, int* pnSize)
        {
            CheckPointer(pnCount, E_POINTER);
            CheckPointer(pnSize, E_POINTER);

            // Return number of media types supported
            *pnCount = m_pin.GetMediaTypeCount();

            // Return stream config capability structure size
            *pnSize = m_pin.GetCapabilitiesSize();

            return S_OK;
        }



        ////////////////////////////////////////////////////////////////////////
        STDMETHODIMP AMStreamConfig::GetStreamCaps(int nIndex, AM_MEDIA_TYPE** ppMType, BYTE* pStreamConfigCaps)
        {
            CheckPointer(ppMType, E_POINTER);
            CheckPointer(pStreamConfigCaps, E_POINTER);

            // Get capability parameters

            int nCapabilityCount;
            int nCapabilitySize;
            GetNumberOfCapabilities(&nCapabilityCount, &nCapabilitySize);

            // Check index

            if (nIndex < 0)
                return E_INVALIDARG; // Negative index

            if (nIndex >= nCapabilityCount)
                return S_FALSE;

            CMediaType mtCaps;
            if (!m_pin.OnGetMediaType(nIndex, mtCaps))
                return E_FAIL; // Can't get media type

            // Allocate memory for output media type

            *ppMType = reinterpret_cast<AM_MEDIA_TYPE*>(::CoTaskMemAlloc(sizeof(**ppMType)));
            if (*ppMType == NULL)
                return E_OUTOFMEMORY;

            // Copy media type

            ZeroMemory(*ppMType, sizeof(**ppMType));
            CMediaType& mtype = *reinterpret_cast<CMediaType*>(*ppMType);
            mtype = mtCaps;

            // Copy capabilities
            m_pin.GetCapabilities(pStreamConfigCaps);

            return S_OK;
        }


IKsPropertySet:

        ////////////////////////////////////////////////////////////////////////
        // class KsPropertySet
        ////////////////////////////////////////////////////////////////////////

        ////////////////////////////////////////////////////////////////////////
        // Construction/Destruction
        ////////////////////////////////////////////////////////////////////////

        KsPropertySet::KsPropertySet(const TCHAR* pName, CaptureOutputPin& pin, HRESULT* phr)
        :    CUnknown(pName, static_cast<IPin*>(&pin))
        ,    m_pin(pin)
        {
        }



        ////////////////////////////////////////////////////////////////////////
        // Public methods

        STDMETHODIMP KsPropertySet::NonDelegatingQueryInterface(REFIID riid, void **ppv)
        {
            if(riid == IID_IKsPropertySet) {
                CheckPointer(ppv, E_POINTER);
                return GetInterface(static_cast<IKsPropertySet*>(this), ppv);
            }

            return CUnknown::NonDelegatingQueryInterface(riid, ppv);
        }



        ////////////////////////////////////////////////////////////////////
        // Implementation of IKsPropertySet interface

        STDMETHODIMP KsPropertySet::Set(REFGUID guidPropSet, DWORD dwPropID, void* pInstanceData, DWORD cbInstanceData
            , void* pPropData, DWORD cbPropData)
        {
            return E_NOTIMPL;
        }



        ////////////////////////////////////////////////////////////////////////
        STDMETHODIMP KsPropertySet::Get(REFGUID guidPropSet, DWORD dwPropID, void* pInstanceData, DWORD cbInstanceData
            , void* pPropData, DWORD cbPropData, DWORD* pcbReturned)
        {
            if (guidPropSet != AMPROPSETID_Pin) 
                return E_PROP_SET_UNSUPPORTED;

            if (dwPropID != AMPROPERTY_PIN_CATEGORY)
                return E_PROP_ID_UNSUPPORTED;

            if (pPropData == NULL && pcbReturned == NULL)
                return E_POINTER;

            if (pcbReturned != NULL)
                *pcbReturned = sizeof(GUID);

            if (pPropData == NULL) 
                return S_OK; // Caller just wants to know the size.

            if (cbPropData < sizeof(GUID))
                return E_UNEXPECTED; // The buffer is too small.

            *reinterpret_cast<GUID*>(pPropData) = PIN_CATEGORY_CAPTURE;
            
            return S_OK;

        }



        ////////////////////////////////////////////////////////////////////////
        STDMETHODIMP KsPropertySet::QuerySupported(REFGUID guidPropSet, DWORD dwPropID, DWORD* pTypeSupport)
        {
            if (guidPropSet != AMPROPSETID_Pin)
                return E_PROP_SET_UNSUPPORTED;

            if (dwPropID != AMPROPERTY_PIN_CATEGORY)
                return E_PROP_ID_UNSUPPORTED;

            if (pTypeSupport != NULL)
                // We support getting this property, but not setting it.
                *pTypeSupport = KSPROPERTY_SUPPORT_GET; 

            return S_OK;
        }
Re[15]: DS Filter as Audio Device
От: amid493 СССР http://gesell-ru.blogspot.com/
Дата: 12.03.10 10:02
Оценка:
ATP>IAMStreamConfig:


ATP>IKsPropertySet:


ок и кто от кого наследуется тут?
AMStreamConfig :IAMStreamConfig
KsPropertySet : IKsPropertySet

а сам фильтр-класс как соотноситься с AMStreamConfig, KsPropertySet?
фильтр-класс : CBaseFilter, AMStreamConfig, KsPropertySet?
Re[15]: DS Filter as Audio Device
От: 3dlev  
Дата: 12.03.10 11:22
Оценка:
Здравствуйте, AcidTheProgrammer, Вы писали:

ATP>>>Да у меня работает, вот прямо сейчас — мои DS фильтры как видео и аудио девайсы скайп видит и берет с них данные.


A>>Плз, можешь показать реализацию IKsPropertySet, IAMStreamConfig, IAMStreamControl в классе фильтра?


ATP>IAMStreamControl — точно не нужен, просто возвращай E_NOTIMPL


ATP>IAMStreamConfig:


...

Странно, у меня все так же, но Скайп его не видит. Спасибо за инфу, покопаюсь, выходит даром драйвером занимался
Re[16]: DS Filter as Audio Device
От: AcidTheProgrammer Россия https://hts.tv/
Дата: 13.03.10 19:51
Оценка:
Здравствуйте, 3dlev, Вы писали:

3>Здравствуйте, AcidTheProgrammer, Вы писали:


ATP>>>>Да у меня работает, вот прямо сейчас — мои DS фильтры как видео и аудио девайсы скайп видит и берет с них данные.


A>>>Плз, можешь показать реализацию IKsPropertySet, IAMStreamConfig, IAMStreamControl в классе фильтра?


ATP>>IAMStreamControl — точно не нужен, просто возвращай E_NOTIMPL


ATP>>IAMStreamConfig:


3>...


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


А с какой версией Skype-a, он DShow начиная с 4.1 начал использовать.
Re[16]: DS Filter as Audio Device
От: AcidTheProgrammer Россия https://hts.tv/
Дата: 13.03.10 19:55
Оценка:
Здравствуйте, amid493, Вы писали:

A>ок и кто от кого наследуется тут?

A>AMStreamConfig :IAMStreamConfig
A>KsPropertySet : IKsPropertySet

да именно так

A>а сам фильтр-класс как соотноситься с AMStreamConfig, KsPropertySet?

A>фильтр-класс : CBaseFilter, AMStreamConfig, KsPropertySet?

QueryIntyerface просто должен поддерживать IAMStreamConfig и IKsPropertySet интерфейсы. Простейшую реализацию, с которой Skype работает я вам и привёл.
Re[17]: DS Filter as Audio Device
От: 3dlev  
Дата: 14.03.10 09:56
Оценка:
3>>Странно, у меня все так же, но Скайп его не видит. Спасибо за инфу, покопаюсь, выходит даром драйвером занимался

ATP>А с какой версией Skype-a, он DShow начиная с 4.1 начал использовать.


Версия скайпа как раз 4.1. Значит что-то у меня не так. Если можете послать такой фильтр буду очень благодарен — думаю у меня в регистрации проблема, зарегистрирую посмотрю какая разница.
Re[3]: DS Filter as Audio Device
От: Аноним  
Дата: 14.03.10 13:31
Оценка:
Здравствуйте, alvas, Вы писали:

A>А это устройство будет видимым только для DirectShow?


Для любых DMO. Но если вопрос, будет ли видеть его windows media, то ответ — нет.
Re[4]: DS Filter as Audio Device
От: alvas  
Дата: 14.03.10 14:59
Оценка:
Здравствуйте, Аноним, Вы писали:

A>>А это устройство будет видимым только для DirectShow?


А>Для любых DMO. Но если вопрос, будет ли видеть его windows media, то ответ — нет.


У если любые DMO будут видеть — это уже хорошо
http://alvas.net — Аудио-инструменты для .Net разработчиков
Re[5]: DS Filter as Audio Device
От: alvas  
Дата: 14.03.10 15:00
Оценка:
Здравствуйте, alvas, Вы писали:

A>У если любые DMO будут видеть — это уже хорошо


У = Ну
http://alvas.net — Аудио-инструменты для .Net разработчиков
Re[15]: DS Filter as Audio Device
От: amid493 СССР http://gesell-ru.blogspot.com/
Дата: 15.03.10 07:13
Оценка:
ATP>        AMStreamConfig::AMStreamConfig(const TCHAR* pName, CaptureOutputPin& pin, HRESULT* phr)
ATP>        :    CUnknown(pName, static_cast<IPin*>(&pin))
ATP>        ,    m_pin(pin)

ATP>        KsPropertySet::KsPropertySet(const TCHAR* pName, CaptureOutputPin& pin, HRESULT* phr)
ATP>        :    CUnknown(pName, static_cast<IPin*>(&pin))
ATP>        ,    m_pin(pin)
ATP>


а можешь выложить или отправить на личку класс CaptureOutputPin?
сенкс!
Re: DS Filter as Audio Device
От: amid493 СССР http://gesell-ru.blogspot.com/
Дата: 17.03.10 12:45
Оценка:
реализовал IKsPropertySet, IAMStreamConfig
но Скайп все равно не видит фильтр((
версия скайпа — 4.1 с копейками
Re[2]: DS Filter as Audio Device
От: AcidTheProgrammer Россия https://hts.tv/
Дата: 18.03.10 09:53
Оценка:
Здравствуйте, amid493, Вы писали:

A>реализовал IKsPropertySet, IAMStreamConfig

A>но Скайп все равно не видит фильтр((
A>версия скайпа — 4.1 с копейками

Что значит "не видит" ?
Re[3]: DS Filter as Audio Device
От: amid493 СССР http://gesell-ru.blogspot.com/
Дата: 18.03.10 10:14
Оценка:
Здравствуйте, AcidTheProgrammer, Вы писали:

ATP>Здравствуйте, amid493, Вы писали:


A>>реализовал IKsPropertySet, IAMStreamConfig

A>>но Скайп все равно не видит фильтр((
A>>версия скайпа — 4.1 с копейками

ATP>Что значит "не видит" ?


то есть данный фильтр не появляется в списке input auidio устройств в настройках скайпа.
Re[3]: DS Filter as Audio Device
От: amid493 СССР http://gesell-ru.blogspot.com/
Дата: 19.03.10 04:13
Оценка:
Здравствуйте, AcidTheProgrammer, Вы писали:

ATP>Здравствуйте, amid493, Вы писали:


A>>реализовал IKsPropertySet, IAMStreamConfig

A>>но Скайп все равно не видит фильтр((
A>>версия скайпа — 4.1 с копейками

ATP>Что значит "не видит" ?


и кстати у тебя получалось чтоб твой фильтр виделся вкачестве инпут аудио устройства в МСН?
потому как МВП один пишет
"On Wed, 26 Mar 2008 01:34:17 -0700 (PDT), Joseph wrote:

Hide the quote
Any body knows how to debug MSN enumerate which kind of interface in
audio/video setting?
Is it API hooking related?(sorry, I do not know how to do it...)



As far as I know MSN doesn't use DirectShow for audio capture so writing a
source filter won't work like it did for the video.
Chris P. http://www.chrisnet.net/code.htm
[MS MVP for DirectShow / MediaFoundation]"
Re[4]: DS Filter as Audio Device
От: AcidTheProgrammer Россия https://hts.tv/
Дата: 19.03.10 08:17
Оценка:
Здравствуйте, amid493, Вы писали:

A>и кстати у тебя получалось чтоб твой фильтр виделся вкачестве инпут аудио устройства в МСН?

A>потому как МВП один пишет
A>"On Wed, 26 Mar 2008 01:34:17 -0700 (PDT), Joseph wrote:

MCH я не проверял, т.к пользуюсь Skype. Более того я занимаюсь обработкой видео, и все программы которые я ипользую для захвата видео, обычно пользуются DShow и видят мои виртуальные источники. Для того что бы аудио устройство виделось всеми (без исключения программами), без написания драйвера ты не обойдешься, как уже написали ранее.
Re[5]: DS Filter as Audio Device
От: amid493 СССР http://gesell-ru.blogspot.com/
Дата: 19.03.10 09:32
Оценка:
Здравствуйте, AcidTheProgrammer, Вы писали:

ATP>Здравствуйте, amid493, Вы писали:


A>>и кстати у тебя получалось чтоб твой фильтр виделся вкачестве инпут аудио устройства в МСН?

A>>потому как МВП один пишет
A>>"On Wed, 26 Mar 2008 01:34:17 -0700 (PDT), Joseph wrote:

ATP>MCH я не проверял, т.к пользуюсь Skype. Более того я занимаюсь обработкой видео, и все программы которые я ипользую для захвата видео, обычно пользуются DShow и видят мои виртуальные источники. Для того что бы аудио устройство виделось всеми (без исключения программами), без написания драйвера ты не обойдешься, как уже написали ранее.


все без исключения не нужны
но скайп и мсн нужен
да вот беда походу в том что ДШ был как раз разработан когда приложениям нужен был единый интерфейс для захвата и обработки видео
звук же появился раньше и многие приложения похоже до сих пор работают через драйвера а не ДШ в случае работы со звуком то есть
самое забавное — что я зарегил свой фильтр в категории видео инпут устройств и тот же скайп его увидел как виртуальную камеру)
а как аудио устройство хоть убей не желает видеть.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.