Активное устройство микшер для windows

Содержание
  1. Запуск «Микшера громкости» в Windows 7
  2. Способ 1: Системный трей
  3. Способ 2: «Панель управления»
  4. Способ 3: «Командная строка»
  5. Способ 4: «Выполнить»
  6. Способ 5: «Диспетчер задач»
  7. Способ 6: «Поиск»
  8. Решение возможных проблем
  9. Пропал значок громкости из системного трея
  10. Значок громкости не активен
  11. Микшер звука не открывается
  12. Микшер для Windows ПК
  13. Программирование микшеров и дополнительных устройств
  14. Основные черты и понятия микшерной подсистемы
  15. Линии
  16. Активность линий
  17. Соединения
  18. Каналы
  19. Органы управления и индикации
  20. Индексы и идентификаторы
  21. Отношение к подсистемам MIDI и Audio/Wave
  22. Доступ к микшерам
  23. Поддержка нескольких клиентов
  24. Идентификаторы и ключи устройств
  25. Программные события и уведомление о них
  26. Именование интерфейсных функций
  27. Общая схема взаимодействия программы и устройств регулировки
  28. Средства разработки, включаемые файлы и библиотеки
  29. Типы управляющих элементов
  30. Типы объектов, идентифицирующих микшер
  31. Структуры, используемые для связи с подсистемой
  32. Структура MIXERCAPS
  33. Структура AUXCAPS
  34. Структура MIXERLINE
  35. Структуры значений управляющих элементов
  36. Структура MIXERCONTROLDETAILS_BOOLEAN:
  37. Структура MIXERCONTROLDETAILS_SIGNED:
  38. Структура MIXERCONTROLDETAILS_UNSIGNED:
  39. Структура MIXERCONTROLDETAILS_LISTTEXT:
  40. Структура MIXERCONTROL
  41. Структура MIXERLINECONTROLS
  42. Структура MIXERCONTROLDETAILS
  43. Уведомления, передаваемые программе
  44. Набор интерфейсных функций подсистем Aux и Mixer
  45. Перечень интерфейсных функций
  46. Значения, возвращаемые интерфейсными функциями
  47. Описание интерфейсных функций
  48. GetNumDevs — запрос количества устройств
  49. GetDevCaps — запрос параметров и возможностей устройств
  50. SetVolume — установка уровня сигнала для устройства aux
  51. GetVolume — запрос текущего уровня сигнала для устройства aux
  52. Open — открывание микшера
  53. Close — закрывание микшера
  54. GetLineInfo — запрос описателя линии
  55. GetLineControls — запрос описателей управляющих элементов линии
  56. GetControlDetails / SetControlDetails — запрос/установка состояния элемента
  57. GetID — запрос системного номера микшера по ключу
  58. Message — передача сообщения драйверу микшера или устройства aux
  59. Пример программы, использующий интерфейс с микшерами

Запуск «Микшера громкости» в Windows 7

Способ 1: Системный трей

Самым простым методом открытия искомой оснастки будет использование области системного трея: найдите в ней значок динамика, наведите на него указатель курсора, щёлкните правой кнопкой мыши и воспользуйтесь опцией «Открыть микшер громкости».

Способ 2: «Панель управления»

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

  1. Запустите оснастку, проще всего это сделать через пункт в «Пуске».

Убедитесь, что содержимое отсортировано по категориям, после чего кликните левой кнопкой по пункту «Оборудование и звук».

Далее найдите блок «Звук» – среди его опций должна быть ссылка «Настройка громкости», щёлкните по ней.

Способ 3: «Командная строка»

Инструмент ввода команд, встроенный в Windows 7, тоже способен решить нашу задачу.

    Откройте «Пуск», введите в поиске запрос cmd, затем кликните ЛКМ по результату.

Читайте также: Как открыть «Командную строку» в Windows 7
Далее напишите в окне команду sndvol и нажмите Enter.

Способ 4: «Выполнить»

Более быстрый вариант предыдущего метода – задействование системного инструмента «Выполнить». Воспользуйтесь комбинацией клавиш Win+R, а после появление окна введите в нём запрос sndvol и кликните «ОК».

Способ 5: «Диспетчер задач»

Команду запуска «Микшера громкости» можно ввести и в «Диспетчере задач» Виндовс 7.

    Для открытия этой оснастки воспользуйтесь панелью задач – наведите курсор на пустое место, нажмите ПКМ и выберите в контекстном меню требуемый пункт.

  • Появится небольшое окно, в котором и следует вводить запрос на запуск нужной оснастки, как в Способе 4.
  • Способ 6: «Поиск»

    Наконец, последний метод открытия «Микшера громкости» – найти ярлык его вызова в общесистемном поиске. Алгоритм простой: вызовите «Пуск», введите в строке sndvol и нажмите Enter и требуемая утилита сразу же запустится.

    Решение возможных проблем

    В процессе выполнения инструкций выше пользователь может столкнуться с теми или иными сбоями. Рассмотрим наиболее частые и подскажем методы их устранения.

    Пропал значок громкости из системного трея

    Множество юзеров время от времени сталкиваются с подобной проблемой. Решений у неё есть несколько, самое основное – использовать другие методы открытия «Микшера громкости», но если они недоступны или оснастка всё равно не запускается, воспользуйтесь инструкциями из статьи далее.

    Значок громкости не активен

    В некоторых случаях происходит так, что нужный элемент управления в системном трее светится серым или показывает ошибку, отчего запуск «Микшера громкости» становится невозможен. Мы уже рассматривали причины такого поведения – обратитесь к материалу по ссылке далее для решения вашей проблемы.

    Микшер звука не открывается

    Одна из самых неприятных ситуаций – оснастка не запускается ни одним из представленных в статье методов. Это может означать как программный, так и аппаратный сбои, поэтому далее приведём универсальный алгоритм диагностики и устранения.

      В качестве первого шага проведите проверку целостности системных компонентов: возможно, файл sndvol.exe, который отвечает за «Микшер громкости», оказался повреждён.

    Если с элементами ОС всё в порядке, стоит обновить или переустановить драйвера звуковой карты – нередко проблема может заключаться именно в них.

    Для владельцев ноутбуков с чипсетами Intel есть не самое очевидное решение, а конкретно — обновление системного ПО для встроенной в процессор графической подсистемы – вместе с софтом для собственно GPU устанавливаются и звуковые библиотеки.

    Подробнее: Установка драйверов на Intel HD

  • Не всегда проблема может заключаться в программном обеспечении – порой её вызывают аппаратные неполадки. Убедитесь, что звуковая карта работает как на ввод, так и на вывод, плюс прочистите все разъёмы на ней. Если вы используете беспроводные аксессуары (наушники, колонки), попробуйте отключить их и проверить, как себя ведёт ОС – известны случаи, когда системное средство управления Bluetooth зависает на этапе подключения, отчего звуковая подсистема не может запуститься.
  • Если понять, что именно вызывает сбой, никак не получается, остаётся единственное решение – обратиться в сервисный центр.
  • Микшер для Windows ПК

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

    Virtual DJ — профессиональный набор инструментов для микширования или наложения различных спецэффектов в музыкальных треках для получения высококачественной электронной музыки. Atomix Productions предлагает действительно первоклассный набор функций и возможностей для персонального использования абсолютно бесплатно.

    Mixxx — программное обеспечение распространяемое разработчиками по лицензии GPL, предназначенное для ди-джеев как профессионалов, так и любителей. Это серьезная программа, работа над которой начиналась ещё в 2001 году и с тех пор не прекращала своё развитие и совершенствование в этой области. Mixxx является если не первой цифровой системой DJ, то одной из первых, которая бала предложена пользователю для микширования треков.

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

    Cross DJ Free — ещё один продукт, пополнивший коллекцию программа для микширования звуков. Это бесплатная версия профессиональной программы для создания качественной музыки. Авторы приложения предлагают любому пользователю попробовать себя в роли ди-джея, используя различные спецэффекты и другие инструменты для смешивания аудио.

    Kristal Audio Engine — представляет собой достаточно серьёзный многодорожечный рекордер, аудио секвенсор и микшер. Данное приложение, это хороший выбор для тех, кто решил заняться записью звука и всерьез попробовать себя в качестве звукооператора. Эта бесплатная версия программы, в случае персонального использования для обучения предлагает громадный выбор различных инструментов для редактирования, микширования цифрового аудио, ну и конечно записи звука.

    Программирование микшеров и дополнительных устройств


    Автор: Евгений Музыченко
    Источник: Компьютер Пресс

    Опубликовано: 14.07.2003
    Исправлено: 10.12.2016
    Версия текста: 1.0

    Как было сказано в первой статье, посвященной программированию звука в Windows, базовый звуковой интерфейс ( MME ) включает три класса устройств — Wave (собственно цифровой звук), MIDI (синтезаторы и устройства управления в стандарте MIDI) и Mixer / Aux (микшеры и дополнительные устройства). Такая структура отражает устройство типового звукового адаптера, содержащего тракт цифрового звука, синтезатор и микшер, соединяющий выходы источников звука со входами приемных устройств. Микшеры, как вполне самостоятельные блоки звуковых адаптеров и виртуальных синтезаторов, также управляются в MME отдельной подсистемой, которая и будет описана в этой статье.

    К дополнительным (auxiliary) устройствам относятся источники и приемники звуковых сигналов, внешние по отношению к звуковым адаптерам, но имеющие возможности управления от компьютера — например, приводы CD-ROM, внешние усилители и т.п. В отношении дополнительных устройств доступно только управление громкостью.

    Микшер (mixer) — устройство для коммутации источников и приемников звука, регулировки уровня, панорамы, тембра и других параметров звука, смешивания нескольких источников звука в единый звуковой сигнал, контрольного прослушивания сигнала и т.п. В профессиональной звуковой аппаратуре используются микшерные пульты — основной инструмент звукооператора и звукорежиссера. Концепция микшерной подсистемы Windows в значительной мере отражает принцип построения аппаратных микшерных пультов, хотя чаще всего устройство микшера под Windows является частью достаточно простого звукового адаптера.

    Подсистема управления дополнительными устройствами реализована, начиная с Windows 3.0 (Win16). Подсистема управления микшерами реализована только на платформе Win32, в системах Win16 ее нет. Строго говоря, подсистема Aux не относится к микшерам, однако имеет то же самое назначение. Фактически, микшерная подсистема в Win32 является развитием Aux в Win16.

    Основные черты и понятия микшерной подсистемы


    Линии

    Выходы источников (source) звукового сигнала и входы приемников (destination) сигнала в терминах микшерной подсистемы Windows называются линиями (lines). Соответственной, линии могут быть входными (линии назначения, destination lines), и выходными (линии источников, source lines).

    Важно, что смысл входов и выходов с точки зрения микшера и пользователя диаметрально противоположен. Для пользователя, находящегося снаружи звукового адаптера, разъем микрофона является входом (приемником) сигнала с микрофона (источника), а разъем для наушников — выходом (источником) сигнала, приемником которого являются наушники. Микшер же находится внутри адаптера, и для него микрофонный предусилитель является источником (выходной линией) сигнала с микрофона, а АЦП цифрового (Wave) тракта адаптера — приемником (входной линией), на который подается сигнал с выбранных выходных линий. Соответственно, выход ЦАП является выходной линией цифрового тракта, а вход оконечного усилителя мощности — входной линией.

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

    Активность линий

    Каждая линия может находиться в активном либо неактивном состоянии. Неактивное состояние линии означает, что соответствующее ей устройство отключено и сигнал либо не генерируется, либо не воспринимается устройством. Активное состояние означает, что устройство включено и способно генерировать либо воспринимать сигнал в линии, однако ничего не говорит о наличии в линии какого-либо сигнала в данный момент времени. Например, открывание устройства типа Wave Out переводит его выходную линию в активное состояние; появление же сигнала на этой линии зависит от выполнения открывшим приложением функций вывода звуковых данных. Заглушенные (muted) линии становятся неактивными.

    Линии, относящиеся к устройствам, которые не могут быть программно включены или выключены, всегда находятся в активном состоянии.

    Соединения

    Взаимное подключение (коммутация) линий называется соединением (connection). Входная линия может быть одновременно подключена к нескольким выходным линиям (смешивание сигнала от нескольких источников в один), однако каждая выходная линия может быть подключена только к одной входной линии (коммутация направлений).

    Читайте также:  How to remove java from linux

    Инженеру, знакомому с электрическими системами, такой подход может показаться странным — в электрических системах могут объединяться входы, но не выходы; однако в микшерах используется несколько другая технология — открывания/закрывания различных источников сигнала, которые затем смешиваются в один сигнал и далее подаются на выбранное приемное устройство.

    Каналы

    Каждая линия состоит из одного или нескольких звуковых каналов . Монофоническая линия состоит из одного канала, стереофоническая — из двух и т.п. Соединения выполняются только над линиями в целом, когда все каналы выходной линии направляются в соответствующие каналы входной, однако управление параметрами сигнала может быть раздельным в каждом из каналов.

    Органы управления и индикации

    Каждая линия может иметь произвольное количество органов управления (controls) и индикации (indicators). Органы управления предназначены для воздействия на параметры сигнала в линии — уровень, стереобаланс, тембр и т.п., а индикаторы — для отображения текущего состояния линии и сигнала в ней. Количество и типы управляющих элементов и индикаторов для каждой линии определяется драйвером микшера, и зависит от аппаратной организации управляемого звукового устройства.

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

    По сути, все элементы управления являются набором свойств (properties) линии, и представляются своими значениями — логическими (включено/выключено, активно/неактивно, разрешено/запрещено), и знаковыми/беззнаковыми целыми, отражающими положения регуляторов, уровни сигнала, частоты эквалайзера и т.п.

    Орган управления может состоять из одной или нескольких частей — например, эквалайзер состоит из нескольких частотных полос, для каждой из которых имеется свой независимый регулятор уровня.

    Индексы и идентификаторы

    Для обращения к линиям микшера и соединениям линий используются индексы — внутренние номера линий, начинающиеся с нуля. Для обращения к входной линии, каждая из которых является собственностью микшера, применяется непосредственно индекс самой линии; для обращения к выходной линии, каждая из которых находится «снаружи» микшера, применяется номер соединения, установленного между заданной входной линией и требуемой выходной. Иначе говоря, входные линии имеют прямые индексы, а выходные — косвенные, основанные на текущем наборе соединений.

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

    Отношение к подсистемам MIDI и Audio/Wave

    Поскольку микшерная подсистема является частью MME — она несколько похожа на подсистемы MIDI и Audio/Wave, однако это сходство касается лишь общей схемы построения интерфейса. В отличие от устройств типа Wave и MIDI, являющихся устройствами ввода/вывода данных, микшеры являются устройствами управления с принципиально иной структурой. Единственное, что объединяет все эти подсистемы — общая структура набора интерфейсных функций и способы уведомления приложения о событиях.

    Тем не менее, поскольку микшер чаще всего является частью того же звукового адаптера, что и устройства Wave/MIDI, подсистема предоставляет средства связи между ними. В частности, можно обратиться к микшеру заданного устройства типа Wave/MIDI, определить, к какому из устройств относится заданная линия, и т.п.

    Для устройств Aux предусмотрено наличие службы переназначения (Mapper), которая, впрочем, нигде не реализована. В микшерной подсистеме службы переназначения нет.

    Доступ к микшерам

    В отличие от устройств типа Wave/MIDI, микшеры не требуют обязательного открывания перед использованием. Однако, если приложение нуждается в уведомлении об изменениях состояния микшера — устройство микшера должно быть открыто в начале работы и закрыто после ее завершения.

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

    Поддержка нескольких клиентов

    В отличие от драйверов Wave/MIDI, драйверы микшерных устройств чаще всего допускают параллельное открывание микшеров несколькими процессами. Это связано прежде всего с тем, что параллельное использование устройств Wave/MIDI требует от драйвера смешивания и разделения потоков данных, в то время как в отношении микшера это не требуется, и драйвер может ограничиться лишь рассылкой уведомляющих сообщений.

    Идентификаторы и ключи устройств

    При открывании микшера подсистема возвращает его идентификатор, или ключ (handle), по которому затем происходит обращение к микшеру. Ключи микшерных устройств имеют тип HMIXER .

    Как уже говорилось, к микшеру можно обращаться, и не открывая его — в этом случае вместо ключа указывается номер самого микшерного устройства, либо номер/ключ одного из других устройств, связанных с микшером — Wave, MIDI или Aux. Смысл указанного значения в этом случае задается специальным флагом.

    Программные события и уведомление о них

    В микшерной подсистеме может возникать два типа событий — изменение состояния линии (line status change) и изменение состояния элемента управления (control status change). О наступлении каждого из этих событий подсистема может уведомлять программу с тем, чтобы она обновила состояние органов управления и индикаторов на экране.

    Именование интерфейсных функций

    Как и предыдущих статьях, я буду ссылаться на интерфейсные функции, опуская префикс mixer и используя только основное смысловое имя функции. В прототипах будут даны полные имена функций.

    Общая схема взаимодействия программы и устройств регулировки

    Для работы с дополнительными (aux) устройствами программа может получить их общее количество посредством функции GetNumDevs , после чего запросить параметры конкретных устройств функцией GetDevCaps . При поддержке устройством регулировки громкости может быть запрошена текущая громкость функцией GetVolume , и установлен другой уровень — функцией SetVolume . Все остальные операции, если они поддерживаются устройством, выполняются через функцию передачи специального сообщения Message.

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

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

    При желании обеспечить доступность микшера в течение всего сеанса работы он должен быть открыт функцией Open . При этом программа может указать окно, которое будет получать уведомления об изменении состояния линии или ее органов управления.

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

    Для получения параметров заданных органов управления и индикации служит функция GetLineControls , возвращающая описание одного, нескольких или всех органов.

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

    Текущее состояние заданного органа управления и индикации возвращает функция GetControlDetails . При наличии у программы пользовательского интерфейса она может отобразить состояние в своем диалоговом окне микшера.

    Для изменения состояния служит функция SetControlDetails . Именно эта функция воздействует на заданные органы управления и индикации, а через них — на проходящий по микшеру звуковой сигнал. При наличии у программы пользовательского интерфейса эта функция вызывается в ответ на изменение пользователем положений и состояний органов управления в диалоговом окне.

    После завершения сеанса работы с открытым микшером он должен быть закрыт функцией Close .

    Средства разработки, включаемые файлы и библиотеки

    Как всегда, описывается программирование на языке C/C++ в среде Microsoft Visual C++.

    Все необходимые константы, типы, структуры и прототипы функций подсистемы определяется в файле MMSYSTEM.H , который по умолчанию включается в компиляцию из общего файла WINDOWS.H . Дополнительные, редко используемые константы определены в файле MMREG.H .

    Интерфейсные функции импортируются из библиотеки WINMM.LIB .

    Типы управляющих элементов

    В настоящее время микшерная подсистема поддерживает шесть классов управляющих элементов, по одному или нескольким типам элементов в каждом классе. Имена констант классов имеют префикс MIXERCONTROL_CT_CLASS_ , имена констант типов — префикс MIXERCONTROL_CONTROLTYPE_ .

    Класс FADER — регулятор уровня, движок типа ползункового регулятора, ориентирован обычно вертикально. Диапазон значений — 0..65535.

    • VOLUME — регулятор громкости;
    • BASS — регулятор тембра по низким частотам;
    • TREBLE — регулятор тембра по высоким частотам;
    • EQUALIZER — многополосный регулятор тембра, состоит из нескольких движков;
    • FADER — произвольный регулятор.

    Класс LIST — список текстовых строк, которые могут быть отмечены или выбраны (selected). Значения — логического типа (отмечена или не отмечена строка в списке):

    • MUX — список линий с возможностью выбора только одной линии. Реализует концепцию мультиплексора (селектора входов или выходов).
    • MIXER — список выходных линий с возможностью выбора нескольких линий. Реализует концепцию микшера.
    • SINGLESELECT — произвольный список с возможностью выбора только одной строки.
    • MULTIPLESELECT — произвольный список с возможностью выбора нескольких строк.

    Класс METER — индикатор состояния, уровня и т.п. Значения — логического, знакового и беззнакового типов:

    • BOOLEANMETER — индикатор из двух состояний — включено/выключено, есть/нет, выбрано/не выбрано и т.п.
    • PEAKMETER — индикатор отклонения от нуля. Диапазон значений -32768..32767.
    • SIGNEDMETER — индикатор значений со знаком. Диапазон -2 31 ..2 31 — 1.
    • UNSIGNEDMETER — индикатор значений без знака. Диапазон — 0..2 32 — 1.

    Класс NUMBER — числовое поле, допускающее непосредственный ввод значения пользователем.

    • SIGNED — значение со знаком. Диапазон -2 31 ..2 31 — 1.
    • UNSIGNED — значение без знака. Диапазон — 0..2 32 — 1.
    • DECIBELS — целое значение в десятых долях децибела. Диапазон -32768..32767.
    • PERCENT — целое значение в десятых долях процента.

    Класс SLIDER — подобен регулятору уровня, но ориентируется обычно горизонтально. Представляют целые знаковые (signed) значения.

    • PAN — регулятор стереопанорамы. Диапазон -32768..32767.
    • QSOUNDPAN — регулятор панорамы эффекта расширенного стерео (QSound). Диапазон -15..15.
    • SLIDER — произвольный регулятор. Диапазон -32768..32767.

    Класс SWITCH — двухпозиционный переключатель. Представлен логическим (boolean) значением.

    • MUTE — переключатель с фиксацией, заглушающий (отключающий) звук в линии.
    • MONO — переключатель с фиксацией, объединяющий каналы линии в один.
    • LOUDNESS (тонкомпенсация) — переключатель с фиксацией, поднимающий уровень низких частот на малых уровнях громкости.
    • STEREOENH — переключатель с фиксацией, включающий режим расширения стереобазы.
    • BUTTON — кнопка без фиксации. Установка значения TRUE требует от драйвера однократного выполнения определенного действия, значение FALSE игнорируется.
    • ONOFF — кнопка или переключатель с фиксацией.
    • BOOLEAN — переключатель с фиксацией произвольного вида.

    Класс TIME — числовое поле для ввода временн ы х интервалов, представляемых беззнаковыми значениями в диапазоне 0..2 32 — 1.

    • MILLITIME — интервал в миллисекундах.
    • MICROTIME — интервал в микросекундах.

    Класс CUSTOM — произвольный элемент, полностью управляется драйвером конкретного микшера.

    Дополнительно определены константы типов представлений значения, имеющие префикс MIXERCONTROL_CT_UNITS_ — CUSTOM , BOOLEAN , SIGNED , UNSIGNED , DECIBELS , PERCENT .

    Числовые значения констант типов управляющих элементов определяется через битовое объединение кода класса, кода подкласса и кода представления. Маски битовых полей в результирующем значении также определены константами с префиксом MIXERCONTROL_CT_ :

    • CLASS_MASK — маска кода класса.
    • SUBCLASS_MASK — маска кода подкласса.
    • UNITS_MASK — маска кода представления.

    Виды подклассов и структуру констант типов можно найти в файле MMSYSTEM.H .

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

    Типы объектов, идентифицирующих микшер

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

    MIDIIN Системный номер входного MIDI–порта.
    MIDIOUT Системный номер выходного MIDI–порта.
    MIXER Системный номер микшера.
    WAVEIN Системный номер входного звукового (Wave) порта.
    WAVEOUT Системный номер выходного звукового порта.
    AUX Системный номер дополнительного (auxiliary) устройства.
    HMIDIIN Ключ открытого входного MIDI–порта.
    HMIDIOUT Ключ открытого выходного MIDI–порта.
    HMIXER Ключ открытого микшера (по умолчанию).
    HWAVEIN Ключ открытого входного звукового (Wave) порта.
    HWAVEOUT Ключ открытого выходного звукового порта.

    Структуры, используемые для связи с подсистемой

    Как и в подсистеме сжатия звука (ACM), большинство структур содержит поле cbStruct , в которое приложение перед обращением к микшерной подсистеме должно занести размер (в байтах) буфера памяти, отведенного под структуру. Это позволяет подсистеме отследить, в каком интерфейсе работает приложение — ASCII или UNICODE, а также — на какую версию подсистемы ориентирован вызов. После обработки запроса подсистема возвращает в поле cbStruct действительный размер данных, занесенных в указанную область памяти.

    Структура MIXERCAPS

    Описывают свойства и характеристики устройства. Все поля структур заполняются только подсистемой и драйвером микшера.

    • wMid , wPid — идентификаторы разработчика (Manufacturer) и самого драйвера (Product). Полный список известных на момент выпуска SDK идентификаторов определен в файле MMREG.H
    • vDriverVersion — версия драйвера, представленная младшим словом (тип MMVERSION эквивалентен типу UINT, который в Win32 является 32-разрядным). Старший байт слова представляет основной номер версии, а младший байт — номер подверсии, отражающей непринципиальные изменения драйвера. Для выделения каждого номера можно использовать стандартные макросы HIBYTE и LOBYTE .
    • szPname — имя устройства в виде строки ASCIIZ.
    • fdwSupport — описатель поддерживаемых микшером и его драйвером возможностей и режимов. Значения этого поля на данный момент не определены.
    • cDestinations — количество имеющихся в микшере входных линий. Каждый микшер поддерживает хотя бы одну входную линию.

    Структура AUXCAPS

    Описывает параметры и возможности дополнительного (aux) устройства.

    • Поля wMid , wPid , vDriverVersion , szPname имеют тот же смысл, что и в структуре MIXERCAPS .
    • wTechnology — тип устройства. Имена констант типов имеют префикс AUXCAPS_ :

    AUXINУстройство ввода сигнала с внешнего источника (предусилитель).
    CDAUDIOАналоговый выход привода CD-ROM.

    • wReserved1 — служебное поле.
    • dwSupport — флаги поддерживаемых устройством возможностей. Имена констант флагов также имеют префикс AUXCAPS_ :

    VOLUMEПоддерживается регулировка громкости (уровня сигнала).
    LRVOLUMEПоддерживается раздельная по каналам регулировка громкости.

    Структура MIXERLINE

    Описывает параметры линии микшера. Все поля структуры, кроме явно оговоренных, устанавливаются микшерной подсистемой.

    • cbStruct — размер структуры.
    • dwDestination — индекс входной линии, параметры которой запрашиваются. Устанавливается приложением.
    • dwSource — индекс соединения, установленного между опрашиваемой выходной линией и заданной предыдущим полем входной линией. Если опрашивается входная линия — это поле должно иметь нулевое значение. Устанавливается приложением.
    • dwLineID — идентификатор линии.
    • fdwLine — флаги состояния линии. Имена констант флагов имеют префикс MIXERLINE_LINEF _:

    ACTIVEЛиния активна.
    DISCONNECTEDЛиния отключена (не имеет ни одного соединения). В этом состоянии воздействие на органы управления не дает никакого эффекта.
    SOURCEЛиния является выходной.

    • dwUser — дополнительные данные драйвера микшера для специализированных приложений, ориентированных на управление микшерами. Может содержать, например, указатель расширенного описателя добавочных характеристик линии.
    • dwComponentType — тип устройства, связанного с линией. Имена констант типов имеют префикс MIXERLINE_COMPONENTTYPE_ :

    DST_WAVEINРегулируемый вход АЦП цифрового (Wave) тракта адаптера, предназначенного для записи звука от внешних источников.
    DST_SPEAKERSРегулируемый вход оконечного усилителя мощности громкоговорителей (и наушников, если нет отдельного усилителя для них).
    DST_HEADPHONESРегулируемый вход отдельного оконечного усилителя мощности наушников, если он есть.
    DST_LINEНерегулируемый линейный вход.
    DST_TELEPHONEВход усилителя, выведенного в телефонную линию.
    DST_VOICEINВход для записи/распознавания голоса. Большинство адаптеров не имеют отдельного голосового входа и поддерживают только общий вход DST_WAVEIN.
    DST_MONITORВход контрольного (мониторного) усилителя, используемого для слежения за проходящим в тракте сигналом.
    DST_DIGITALНерегулируемый цифровой вход (DAT-магнитофона, CD-проигрывателя и т.п.).
    DST_UNDEFINEDВход неопределенного типа. Используется для всех входов, не подпадающих под вышеперечисленный набор.
    SRC_WAVEOUTВыход ЦАП цифрового тракта адаптера.
    SRC_MICROPHONEРегулируемый выход микрофонного предусилителя.
    SRC_AUXILIARYРегулируемый выход линейного предусилителя. Обычно берет сигнал с основного линейным входа адаптера.
    SRC_COMPACTDISCВыход предусилителя сигнала с CD-ROM.
    SRC_LINEНерегулируемый выход дополнительного линейного предусилителя (поддерживается не всеми микшерами).
    SRC_PCSPEAKERВыход предусилителя сигнала с системного громкоговорителя (PC Speaker).
    SRC_SYNTHESIZERВыход встроенного музыкального синтезатора.
    SRC_ANALOGВыход источника аналогового сигнала.
    SRC_DIGITALНерегулируемый выход источника цифрового сигнала.
    SRC_TELEPHONEВыход предусилителя сигнала с телефонной линии.
    SRC_UNDEFINEDВыход источника неопределенного типа. Используется, если источник не подпадает под вышеописанные типы.

    • cChannels — количество каналов линии — 1 (моно), 2 (стерео) и т.п. Стереоканалы нумеруются с левого по правый.
    • cConnections — количество соединений, выполненных для данной линии. Имеет смысл только для входных линий; для выходных линий это поле всегда равно нулю. Нулевое значение для входной линии означает отсутствие соединений (линия отключена).
    • cControls — количество элементов управления и индикации для данной линии. Нулевое значение означает, что линия не допускает управления параметрами проходящего сигнала.
    • szShortName — короткое название линии, может быть использовано для маркировки группы элементов управления в диалоговом окне микшера.
    • szName — полное наименование линии.
    • Target — описатель устройства, к которому относится линия.
    • dwType — тип устройства. Имена констант типов имеют префикс MIXERLINE_TARGETTYPE_ :

    AUXДополнительное (auxiliary) устройство.
    MIDIINЗвуковой вход MIDI–синтезатора. Некоторые синтезаторы имеют звуковые входы для обработки внешнего сигнала встроенным эффект-процессором.
    MIDIOUTВыход MIDI–синтезатора.
    WAVEINВход АЦП цифрового звукового тракта.
    WAVEOUTВыход ЦАП цифрового звукового тракта.
    UNDEFINEDУстройство неопределенного типа. Остальные поля структуры Target не имеют смысла.

    • dwDeviceID — идентификатор устройства в системе. Для устройств типа Wave, MIDI и Aux идентификатор является порядковым номером устройства в системе, начиная с нуля.
    • wMid , wPid , vDriverVersion , szPname — прочие данные об устройстве, как в структуре MIXERCAPS .

    Структуры значений управляющих элементов

    Описывают значения управляющих элементов различных типов — логического ( Boolean ), знакового ( Signed ) и беззнакового ( Unsigned ) целого и текстового списка ( ListText ).

    Структура MIXERCONTROLDETAILS_BOOLEAN:

    Используется для представления логических значений, имеет два смысла — нуль и не нуль.

    Структура MIXERCONTROLDETAILS_SIGNED:

    Используется для представления значений со знаком.

    Структура MIXERCONTROLDETAILS_UNSIGNED:

    Используется для представления беззнаковых значений.

    Структура MIXERCONTROLDETAILS_LISTTEXT:

    Используется для представления текстовых меток элементов управления.

    dwParam1 — параметр, определяющий элемент управления:

    • для эквалайзера — значение поля Bounds.dwMinimum структуры MIXERCONTROL ;
    • для мультиплексора и микшера — значение поля dwLineID структуры MIXERLINE ;
    • для списка — нуль.

    dwParam2 — равен dwParam1.

    szName — название элемента управления.

    Структура MIXERCONTROL

    Описывает параметры элемента управления линии. Кроме явно оговоренных полей, заполняется микшерной подсистемой.

    cbStruct — размер структуры.

    dwControlID — идентификатор управляющего элемента. Устанавливается приложением.

    dwControlType — тип элемента. Устанавливается приложением.

    fdwControl — флаги, уточняющие состояние элемента. Имена констант флагов имеют префикс MIXERCONTROL_CONTROLF_ :

    DISABLED Элемент запрещен — текущее состояние линии не допускает воздействия на этот орган управления. Допускается только считывание состояния элемента.
    MULTIPLE Элемент состоит из двух или более частей — например, эквалайзер, состоящий из нескольких независимых частотных регуляторов.
    UNIFORM Элемент воздействует на все каналы линии одинаковым образом. Этот флаг, например, обычно имеют эквалайзер, мультиплексор, микшер и т.п.

    cMultipleItems — количество независимых частей элемента управления, если установлен флаг MULTIPLE ; иначе нуль.

    szShortName — короткое название элемента, может использоваться для изображения текстовой метки в диалоговом окне.

    szName — полное название элемента.

    Bounds — границы изменения значения элемента.

    • lMinimum , lMaximum — минимум и максимум для знаковых значений.
    • dwMinimum , dwMaximum — минимум и максимум для беззнаковых значений.
    • dwReserved — служебное поле подсистемы и драйвера.

    Metrics — параметры шкалы изменения значения.

    • cSteps — количество шагов (гранулярность) изменения значения внутри заданного диапазона. Например, уровень громкости в большинстве адаптеров имеет от 8 до 256 градаций, поэтому нет смысла в изменении младших разрядов значения. Минимально воспринимаемый шаг изменения значения равен (Max — Min + 1) / Steps.
    • cbCustomData — объем в байтах области памяти, необходимой для представления состояния элемента управления произвольного (CUSTOM) типа. Вся обработка информации в этой области выполняется драйвером, приложение отвечает лишь за ее хранение.
    • dwReserved — служебное поле подсистемы и драйвера.

    Структура MIXERLINECONTROLS

    Описывает массив управляющих элементов линии, используется при запросе описателей самих управляющих элементов. Заполняется приложением, отдельные поля могут возвращаться подсистемой.

    • cbStruct — размер структуры.
    • dwLineID — идентификатор линии. Игнорируется при запросе элементов по их собственным идентификаторам, однако в любом случае возвращается подсистемой.
    • dwControlID — идентификатор элемента управления, если запрос происходит по идентификатору.
    • dwControlType — тип элемента управления, если запрос происходит по типу.
    • cControls — количество запрашиваемых описателей элементов управления. При запросе одного элемента должно быть равно единице, в противном случае — количеству элементов в линии. Нулевое значение не допускается.
    • cbmxctrl — размер в байтах каждого описателя элемента управления (структура MIXERCONTROL ) в массиве. Общий объем массива описателей равен произведению значений полей cControls и cbmxctrl .
    • pamxctrl — указатель массива описателей (первой структуры MIXERCONTROL в массиве). Инициализации элементов массива не требуется — они полностью заполняются подсистемой и драйвером.

    Структура MIXERCONTROLDETAILS

    Описывает состояние отдельного элемента управления. Используется для запроса и установки текущего состояния элемента.

    • cbStruct — размер структуры.
    • dwControlID — идентификатор элемента управления.
    • cChannels — количество каналов, для которых запрашиваются или устанавливаются состояния элементов управления. Поле должно иметь нулевое значение для элементов типа CUSTOM , единичное — для установки всех элементов в одинаковое состояние, либо должно быть равно количеству каналов в линии. Прочие значения не допускаются.
    • hwndOwner — ключ окна, которое будет владельцем (родителем) диалогового окна, создаваемого драйвером для элементов типа CUSTOM . Задается только при запросе вывода диалогового окна (флаг MIXER_SETCONTROLDETAILSF_CUSTOM в функции SetControlDetails ). Поле перекрывается со следующим, поэтому может задаваться значение только одного из них.
    • cMultipleItems — количество частей элемента управления: нуль для элементов, состоящих из одной части, либо значение соответствующего поля описателя элемента (структура MIXERCONTROL). При запросе вывода диалогового окна для элемента типа CUSTOM не устанавливается.
    • cbDetails — размер описателя значения для одного канала или части элемента управления (одна из структур MIXERCONTROLDETAILS_xxx). Для элементов типа CUSTOM размер описателя должен быть равен значению поля cbCustomData структуры MIXERCONTROL.
    • paDetails — указатель области данных для элемента типа CUSTOM или массива описателей значений элемента в каналах и частях. Массив является двумерным, номер канала считается старшим индексом. Иначе говоря — сперва идут описатели значений для левого канала, затем для правого, и т.п. Если элемент не делится на части, то описатели значений для каналов идут подряд (одномерный массив).

    Уведомления, передаваемые программе

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

    В каждом из оконных сообщений Параметр wParam содержит ключ микшера. Определено два типа сообщений:

    • MM_MIXM_LINE_CHANGE — изменение состояния линии. Параметр lParam содержит идентификатор линии.
    • MM_MIXM_CONTROL_CHANGE — изменение состояния элемента управления. Параметр lParam содержит идентификатор элемента.

    Получив любое из этих уведомлений, приложение должно соответственным образом отобразить произошедшие изменения на экране и/или в собственной базе данных.

    Набор интерфейсных функций подсистем Aux и Mixer

    Как уже говорилось, в ссылках обычно указывается лишь смысловая часть имени, без префикса mixer или aux , если это не затрудняет понимания. В прототипах функций имена указываются полностью, либо с префиксом xxx , если функция имеет одинаковый прототип в обеих подсистемах.

    Первым параметром большинства функций задается идентификатор объекта , определяющий, с каким микшером выполняется операция. Это может быть либо номер или ключ самого микшера, либо номер/ключ связанного с микшером звукового устройства. Тип объекта, заданного параметром Obj , определяется флагом типа объекта в числе параметров функции. Если определена макропеременная STRICT , требуется явное приведение типа объекта к типу HMIXEROBJ .

    Перечень интерфейсных функций


    GetNumDevs Запрос количества устройств (микшеров или aux)
    GetDevCaps Запрос параметров и возможностей устройства
    SetVolume / GetVolume Установка/запрос уровня сигнала в устройстве aux
    Open Открывание микшера
    Close Закрывание микшера
    GetID Запрос номера микшера по связанному объекту
    GetLineInfo Запрос описателя линии микшера
    GetLineControls Запрос описателей управляющих элементов линии
    GetControlDetails Запрос состояний управляющих элементов линии
    SetControlDetails Установка состояний управляющих элементов линии
    Message Передача драйверу нестандартного сообщения

    Значения, возвращаемые интерфейсными функциями

    За редким исключением, все функции интерфейса возвращают результат типа MMRESULT , эквивалентный типу UINT . Значение MMSYSERR_NOERROR , равное нулю, означает успешное выполнение функции, любое другое значение указывает на ошибку. Константы для кодов ошибок имеют префиксы MMSYSERR_ (общая ошибка мультимедийной подсистемы) и MIXRR_ (ошибка драйвера микшера):

    MMSYSERR_BADDEVICEID Недопустимый номер устройства
    MMSYSERR_NOTENABLED Драйвер не активизирован
    MMSYSERR_ALLOCATED Устройство занято другим приложением
    MMSYSERR_INVALHANDLE Недопустимый ключ открытого устройства
    MMSYSERR_NODRIVER Драйвер отсутствует
    MMSYSERR_NOMEM Недостаточно памяти
    MMSYSERR_NOTSUPPORTED Запрошенная функция не поддерживается
    MMSYSERR_BADERRNUM Код ошибки вне допустимого диапазона
    MMSYSERR_INVALFLAG Недопустимый флаг
    MMSYSERR_INVALPARAM Недопустимый параметр
    MMSYSERR_HANDLEBUSY Над ключом выполняется операция от другой задачи (thread)
    MMSYSERR_ERROR Неопределенная ошибка
    MMSYSERR_NODRIVERCB Драйвер не выполнил уведомления (callback)
    MIXERR_BASE Минимальное значение кода ошибки микшера
    MIXERR_INVALLINE Недопустимый индекс/идентификатор линии
    MIXERR_INVALCONTROL Недопустимый индекс/идентификатор элемента управления
    MIXERR_INVALVALUE Недопустимое значение элемента управления.
    MIXERR_LASTERROR Максимальное значение кода ошибки микшера

    Описание интерфейсных функций


    GetNumDevs — запрос количества устройств

    Возвращает количество установленных в системе устройств aux или микшеров.

    GetDevCaps — запрос параметров и возможностей устройств

    Служит для определения параметров и возможностей устройства.

    • DevId — номер устройства, начиная с нуля, либо ключ ранее открытого микшера, либо константа AUX_MAPPER для устройств aux . В последнем случае возвращаются параметры устройства, используемого службой переназначения, если она есть.
    • Caps — указатель структуры типа AUXCAPS или MIXERCAPS.
    • CapsSize — размер структуры в байтах.

    При успешном завершении функция заполняет поля переданной указателем структуры параметрами устройства.

    SetVolume — установка уровня сигнала для устройства aux


    • DevId — номер устройства, начиная с нуля.
    • Volume — громкость по левому и правому каналу. Младшее слово задает громкость левого канала, старшее — правого. Значение 0xFFFF задает максимальную громкость, 0 — минимальную. Для устройств, не поддерживающих независимую регулировку громкости по каналам, младшее слово задает громкость в обоих каналах.

    Функция устанавливает уровень сигнала в устройстве. Несмотря на то, что функцией допускается 65536 уровней громкости, конкретные устройства могут поддерживать гораздо меньше — 8, 32 или 128 уровней. В таких случаях значащими является только от трех до семи старших разрядов значения громкости, младшие разряды игнорируются. Такая трактовка позволяет использовать одну и ту же шкалу громкости, изменяя лишь степень ступенчатости регулировки.

    Функция поддерживается только устройствами, в свойствах которых установлен флаг AUXCAPS_VOLUME. Раздельная регулировка по каналам поддерживается только при наличии флага AUXCAPS_LRVOLUME.

    GetVolume — запрос текущего уровня сигнала для устройства aux


    • DevId — номер устройства, начиная с нуля.
    • ForVolume — указатель переменной типа DWORD , в которую заносятся текущие уровни громкости.

    Функция опрашивает текущий установленный уровень сигнала. Трактовка переменной, на которую ссылается указатель ForVolume , аналогична используемому в функции SetVolume .

    Open — открывание микшера


    • ForHandle — указатель переменной типа HMIXER , в которую при успешном завершении операции заносится ключ открытого микшера.
    • Obj — код объекта, определяющего микшер.
    • Callback — ключ (handle) окна ( HWND ), которому будут передаваться уведомления подсистемы.
    • Dummy — неиспользуемый параметр.
    • OpenFlags — вид уведомления и флаг типа объекта. Из видов уведомления допустима только константа CALLBACK_WINDOW .

    В случае успешного открывания объекта подсистема возвращает в переменную, на которую ссылается указатель ForHandle , ключ (handle) открытого микшера.

    При завершении работы с устройством его необходимо закрыть функцией Close .

    Close — закрывание микшера

    Закрывает микшер, освобождая его для удаления из системы.

    GetLineInfo — запрос описателя линии


    • LineDesc — указатель описателя линии (структура MIXERLINE), в который заносятся параметры заданной линии. В зависимости от вида запроса некоторые поля описателя должны быть установлены в требуемое значение.
    • Flags — тип объекта, определяющего микшер, и вид запроса. Имена констант видов запроса имеют префикс MIXER_GETLINEINFOF_ :

    LINEIDЗапрос по идентификатору линии, заданному полем dwLineID.
    DESTINATIONЗапрос по индексу входной линии, заданному полем dwDestination.
    SOURCEЗапрос по индексу входной линии, заданному полем dwDestination, и индексу соединенной с нею выходной линии, заданному полем dwSource.
    COMPONENTTYPEЗапрос по типу линии, заданному полем dwComponentType. Возвращается описатель первой подходящей линии.
    TARGETTYPEЗапрос по параметрам устройства, заданным полями dwType, wMid, wPid, vDriverVersion и szPname структуры Target. Не допускается указание UNDEFINED в поле dwType.

    При успешном завершении функция заполняет описатель линии, подходящей под заданный запрос.

    GetLineControls — запрос описателей управляющих элементов линии


    • ControlGroup — указатель описателя группы управляющих элементов линии, определяющий параметры запроса и массив описателей элементов (структур типа MIXERCONTROL). В поле dwLineID должен быть задан идентификатор линии, кроме случая запроса по идентификатору элемента.
    • Flags — тип объекта, определяющего микшер, и вид запроса. Имена констант видов запроса имеют префикс MIXER_GETLINECONTROLSF_ :

    ALLЗапрос описателей всех элементов. Значение поля cControls описателя должно быть равно количеству элементов в линии.
    ONEBYIDЗапрос описателя элемента по идентификатору, заданному полем dwControlID . Значение поля cControls должно быть равно единице.
    ONEBYTYPEЗапрос описателя элемента по типу элемента, заданному в поле dwControlType . Значение поля cControls должно быть равно единице. Возвращается описатель первого подходящего элемента.

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

    GetControlDetails / SetControlDetails — запрос/установка состояния элемента

    обозначает выполняемую операцию: Get — запрос значения, Set — установка значения.

    • StateArray — указатель описателя состояния элемента управления (структура MIXERCONTROLDETAILS ).
    • Flags — тип объекта, определяющего микшер, и режим выполнения операции. Имена констант режимов запроса имеют префикс MIXER_GETCONTROLDETAILSF_ , режимов установки — MIXER_SETCONTROLDETAILSF_ :

    VALUEЗапрашивается или устанавливается значение элемента управления. Поле paDetails структуры MIXERCONTROLDETAILS содержит указатель описателя (или массива описателей) соответствующего типа, в которые заносятся текущие значения элемента по частям и каналам, либо берутся новые значения для установки.
    LISTTEXT(операция Get) Запрашиваются текстовые метки элемента управления или его частей. Поле paDetails структуры MIXERCONTROLDETAILS содержит указатель описателя (или массива описателей) типа MIXERCONTROLDETAILS_LISTTEXT , в которые будут занесены текстовые метки. Операция запрашивает метки для всех частей элемента сразу. Недопустима для элементов типа CUSTOM.
    CUSTOM(операция Set) Запрашивается вывод драйвером соответствующего диалогового окна для элемента управления типа CUSTOM. Поле paDetails структуры MIXERCONTROLDETAILS содержит указатель описателя состояния элемента, область памяти для которого должна иметь размер, заданный полем cbDetails. Драйвер микшера отображает диалоговое окно, необходимое для ввода всех параметров элемента, и после заполнения пользователем нужных полей заносит введенные данные в описатель элемента. Родительское окно для создаваемого диалогового окна задается полем hwndOwner. Никаких действий с самим элементом в этом режиме не выполняется; для изменения состояния элемента необходимо выполнить операцию Set в режиме VALUE.

    GetID — запрос системного номера микшера по ключу


    • ForID — указатель переменной типа UINT , в которую заносится системный номер микшера.
    • ObjType — тип объекта, определяющего микшер.

    Функция определяет системный номер микшера, соответствующего заданному объекту.

    Message — передача сообщения драйверу микшера или устройства aux


    • DevId — системный номер дополнительного устройства.
    • Handle — ключ открытого микшера.
    • Msg — код передаваемого сообщения.
    • P1 , P2 — параметры сообщения.

    Функция используется для прямой передачи сообщения драйверу дополнительного устройства или микшера. Все интерфейсные функции, кроме GetID , транслируются подсистемой в сообщения, передаваемые драйверу; при этом каждое сообщение имеет два параметра типа DWORD , в которые преобразуются параметры интерфейсных функций. Если драйвер устройства поддерживает нестандартные сообщения — они могут быть переданы ему при помощи функций Message . Возвращаемое значение при этом определяется самим драйвером.

    Пример программы, использующий интерфейс с микшерами

    Для иллюстрации приводится программа MixerCtl , управляющая выходной линией ЦАП (Wave Out) звукового адаптера. Сигнал в этой линии появляется при воспроизведении цифрового звука — файлов WAV, MP3, AVI и им подобных, при работе виртуальных синтезаторов Roland VSC, Yamaha YXG, Reality, GigaSampler и т.п.

    В диалоговом окне отображается список доступных в системе микшеров; требуется выбрать устройство микшера, выходная линия которого будет управляться программой.

    Программа открывает выбранный микшер, запрашивая уведомление окна, получает параметры линии функцией GetLineInfo , используя запрос по типу линии ( WAVEOUT ). Затем у полученной линии функцией GetLineControls запрашиваются описатели элементов управления посредством запроса по типу (Volume Fader и Mute Switch). Все последующие запросы к линии и элементам выполняются по их полученным в первых запросах идентификаторам.

    Программа отслеживает сообщения MM_MIXM_LINE_CHANGE / MM_MIXM_CONTROL_CHANGE и, если они относятся к выбранной линии и элементам управления, обновляет состояние окна, вызывая функции GetLineInfo и GetControlDetails . При воздействии пользователя на органы управления в окне программа отражает сделанные изменения в микшере, используя функцию SetControlDetails .

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

    Программа реализована на языке C++ без использования классов, MFC и RTTI. Прилагаются исходные тексты и исполняемый файл.

    Разработка программы выполнялась в среде MS VC++ 4.2. Использован только стандартный интерфейс (API) Windows, без каких-либо расширений из среды разработки.

    Для работы программы необходим любой звуковой адаптер, поддерживающий вывод цифрового звук (Wave Play) и снабженный драйвером микшера. Драйверы микшера имеют все звуковые адаптеры, снабженные драйверами для Windows 95/98 и NT/2000.

    Читайте также:  Linux найти только текстовые файл
    Оцените статью