Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > Программирование звука > Работа с звуковой картой с помощью ASIO и Windows MME


Автор: tuchin 18.07.15, 20:31
Хотел бы научиться работать с звуковой картой (запись звука с микрофона в файл на ПК, воспроизведение файлов). Почитал некоторые материалы по работе с звуковой картой. Как я понял, в Windows можно работать с звуковой картой через ASIO и MME, причем меньшие задержки при работе с звуковой картой дает драйвер ASIO.

Возникли вопросы по ASIO и Windows MME:
- как узнать, поддерживает ли ASIO звуковая карта? Есть ли программы, которые это определяют?
- из статей я сделал вывод, что если звуковая карта не поддерживает ASIO, то нужно использовать ASIO4ALL. Установил ASIO4ALL_2_12_Russian на свой нетбук, в директории c:\Program Files\ASIO4ALL v2\ обнаружил файлы asio4all.dll и asio4all64.dll. Действительно ли можно научиться работать с ASIO на любой звуковой карте с помощью ASIO4All или я понял неправильно? Если можно, то что нужно включить в проект (работаю в Visual C++ 2013, Windows 8.1);
- какие функции входят в состав Windows MME? В Platform SDK по MME ничего не нашел, есть разные мультимедийные Win32 API, но какие из них относятся к MME я не понял;
- хотелось бы найти примеры работы с звуковой картой на С++ через ASIO и Windows MME. По ASIO нашел только для NET (http://www.codeproject.com/Articles/24536/...-Drivers-in-NET), а какие функции Windows MME искать, я не знаю.

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

Автор: Prince 21.07.15, 11:51
Цитата
как узнать, поддерживает ли ASIO звуковая карта?

Производитель явно указывает поддержку ASIO и поставляет вместе с картой драйвер.
Как проверить наличие установленных драйверов ASIO:
ASIO драйвера
Цитата
Действительно ли можно научиться работать с ASIO на любой звуковой карте с помощью ASIO4All или я понял неправильно?

Полагаю, можно. ASIO4All эмулирует функции ASIO интерфейса для софта, юзающего ASIO. Если софт заточен под ASIO, а железяка ASIO не поддерживает, то и соответствующего драйвера не имеет. Значит, софт её не увидит. ASIO4All создаёт видимость наличия такой железяки с системе. Как фактически он взаимодействует с устройством...предположу, что обращается к его родному драйверу, юзая, например, интерфейс DirectSound...
Цитата
Если можно, то что нужно включить в проект

Без понятия.
Цитата
Хотел бы научиться работать с звуковой картой (запись звука с микрофона в файл на ПК, воспроизведение файлов). Почитал некоторые материалы по работе с звуковой картой. Как я понял, в Windows можно работать с звуковой картой через ASIO и MME, причем меньшие задержки при работе с звуковой картой дает драйвер ASIO.

Можно использовать интерфейсы_функции MME(winmm.dll), DirectSound, Сore Audio в win7 и выше, и пр., а также билиотеки-обёртки над этими интерфейсами, типа BASS, PortAudio,...
ASIO вообще-то довольно специфический "зверь". Он не дань моде.
Если вы не пишете софт для студии звукозаписи, не используете многоканальные АЦП, и вы не аудиофил, скорее всего, ASIO вам в ближайшее время не понадобится. А пресловутые задержки никак не скажутся на работе программ.
Цитата
какие функции входят в состав Windows MME? В Platform SDK по MME ничего не нашел, есть разные мультимедийные Win32 API, но какие из них относятся к MME я не понял;

Ньюансы терминологии. Нужно вникать в историю появления и развития мультимедийных функций в семействе ОС Windows. Например, Евгений Музыченко, говоря о функциях из winmm.dll, называет их мультимедия екстеншн(MME), утверждая, что и майкрософт их так обзывал некогда.
Цитата
Первоначально интерфейс со звуковыми устройствами был введен в Windows 3.x под названием MME (MultiMedia Extension - мультимедийное расширение). При переносе на платформу Win32 он практически не претерпел изменений,...

https://rsdn.ru/article/multimedia/winsnd.xml
По мере выхода новых версий виндовс, майкрософт постоянно что-то меняет в структуре msdn, создаёт новые разделы, меняет старые, объявляет какие-то функции/интерфейсы устаревшими, рекомендует новые...с абревиатурой MME можно не заморачиваться, просто понимать о чём речь. Речь о функциях multimedia из winmm.dll.
winmm и DirectSound - в 7-ке уже являются "устаревшими", и если не ошибаюсь, эмулируются штатными семёрочными интерфейсами в составе Сore Audio. В последнем не уверен, не могу утверждать.
Т.е., они "устаревшие", но поддерживаются, для совместимости с "устаревшим" софтом для XP и пр.
Цитата
какие функции Windows MME искать, я не знаю.

Часть описаны в статье по ссылке выше, весь список - https://msdn.microsoft.com/en-us/library/dd...6(v=vs.85).aspx

Автор: tuchin 22.07.15, 22:12
Спасибо за ответы и ссылки.

Автор: Prince 26.07.15, 10:07
Цитата
mmsystemGetVersion function

This function may be altered or unavailable in future versions of the Windows operating system.

The mmsystemGetVersion function is deprecated. Applications should not use this function.

This function returns the current version number of the Windows Multimedia Extensions software.

The original purpose of this function was to test whether the Windows Multimedia Extensions software was present on computers with Windows 3.1 installed.

Эта функция может быть изменена или недоступна в будущих версиях windows.
Функция mmsystemGetVersion устарела. Приложения не должны использовать эту функцию.
Эта функция возвращает текущую версию програмного обеспечения Windows Multimedia Extensions.
Первоначальным назначением функции была проверка наличия програмного обеспечения Windows Multimedia Extensions на компьютерах с Windows 3.1.
https://msdn.microsoft.com/en-us/library/dd...2(v=vs.85).aspx

Автор: tuchin 28.07.15, 17:25
Правильно ли я понял, что для наиболее эффективной работы в Windows выше 7 версии нужно использовать Core API, которое вряд ли устареет в ближайшее время?

Добавлено
Я попробовал в справке к Visual Studio 2013 найти Core API, ничего не нашел. Что нужно установить, чтобы в справке была информация, идентичная информации на сайте?

Добавлено
По Core Audio APIs тоже ничего не нашлось.

Автор: Prince 28.07.15, 21:37
Цитата
Правильно ли я понял, что для наиболее эффективной работы в Windows выше 7 версии нужно использовать Core API, которое вряд ли устареет в ближайшее время?

И да, и нет. Не совсем.
Цитата
This documentation describes the Core Audio APIs. These APIs serve as the foundation for the following higher-level APIs:
DirectSound
DirectMusic
Windows multimedia waveXxx and mixerXxx functions
Media Foundation

https://msdn.microsoft.com/en-us/library/wi...4(v=vs.85).aspx
Документация описывает Core Audio API. Эти API используются в качестве основы для следующих API более высокого уровня:
DirectSound
DirectMusic
Windows multimedia waveXxx and mixerXxx functions
Media Foundation

Там же:
Цитата
Direct communication with the Core Audio APIs might not be suitable for many general-purpose audio applications. For example, the Core Audio APIs require audio streams to use an audio device's native data formats. However, third-party software developers who are developing the following types of products might require the special capabilities of the Core Audio APIs:
Professional audio ("pro audio") applications
Real-time communication (RTC) applications
Third-party audio APIs

Для многих приложений общего назначения, прямое обращение к Core Audio может не требоваться(прямое обращение к Core Audio может быть неудобным)...однако, разработчику могут понадобиться специальные возможности Core Audio, если он разрабатывает, например, такие типы програмных продуктов:
проф. софт для аудио, софт для связи в реальном времени, разработка сторонних аудио API(если я правильно понимаю, речь о драйверах)

Там же:
Цитата
An application that uses a legacy audio API to play or record audio might require additional capabilities that are not supported by the legacy audio API, but that are supported by the Core Audio APIs. In many cases, the application can access these capabilities directly through the Core Audio APIs, which can be used in conjunction with the legacy audio API.

Приложению, использующему старые интерфейсы, могут понадобиться дополнительные возможности, поддерживаемые только Core Audio. Во многих случаях, приложение может получить к ним доступ через Core Audio API, параллельно с юзанием MME, DirectSound.
Цитата
Я попробовал в справке к Visual Studio 2013 найти Core API, ничего не нашел.

Там же:
The Core Audio APIs are:
Multimedia Device (MMDevice) API. Clients use this API to enumerate the audio endpoint devices in the system.
Windows Audio Session API (WASAPI). Clients use this API to create and manage audio streams to and from audio endpoint devices.
DeviceTopology API. Clients use this API to directly access the topological features (for example, volume controls and multiplexers) that lie along the data paths inside hardware devices in audio adapters.
EndpointVolume API. Clients use this API to directly access the volume controls on audio endpoint devices. This API is primarily used by applications that manage exclusive-mode audio streams.
Цитата
Что нужно установить, чтобы в справке была информация, идентичная информации на сайте?

Низнаю.

Цитата
в Windows выше 7 версии нужно использовать Core API

Я бы сказал, что майкрософт всё-же делает акцент на можно использовать, по необходимости.

Автор: tuchin 29.07.15, 19:56
Спасибо большое за подробные объяснения!

Автор: tuchin 30.07.15, 10:43
В статье Музыченко "Низкоуровневое программирование звука в Windows", на которую Вы дали ссылку, прочел следующее: "К сожалению, Microsoft разработала спецификацию расширения DirectSound для звуковых VxD только в части воспроизведения звука, преследуя прежде всего интересы производителей игр. Запись звука через DirectSound до сих пор ведется путем эмуляции поверх MME". Это справедливо для Windows 7 и 8?

Автор: Prince 30.07.15, 20:30
Цитата
Это справедливо для Windows 7 и 8?

Ихмо, нет. Но обосновать и аргументировать не могу.
VxD в прошлом. Возможно, Е. Музыченко говорил о win98, или вообще 95...я ооочень давно статью читал.
Ещё, в дополнение:
Программирование звука в DirectSound
Программирование объемного звука в DirectSound3D

В общем и целом, любой поддерживаемый виндой интерфейс может быть использован для записи/воспроизведения.

Известная бибилотека bass использует под виндой DS; там же, в дополнениях, есть отдельные билиотеки для ASIO и WASAPI(Сore Audio); относительно старенький, но не потерявший полезности звуковой редактор Сool Edit использовал MME; его преемник Adobe Audition умел/умеет обращаться с DS, ASIO(что там в последних версиях, я не в курсе); плеер AIMP позволяет выбирать DS, ASIO, WASAPI; k-лайтовский Media Player Classic (на XP) - MME, DS.

Не пропустите книги
Обработка звука на PC. Наиболее полное руководство
Н. Секунов
Руководство программиста по работе со звуком
Тим Кинтцел
В FAQ тоже загляните.

Цитата
Ихмо, нет.

на всякий пожарный, относится к "эмуляции поверх MME".

Автор: tuchin 31.07.15, 14:49
Спасибо за помощь! Пора начать программировать. Начну, пожалуй, с MME. А потом попробую то же самое с DirectSound.

Автор: tumanovalex 22.08.15, 19:27
Подскажите, пожалуйста, где можно почитать подробнее о звуковой системе Windows, о взаимодействии железа и драйверов и т.д. Что-то типа Соломона и Руссиновича, но для звуковой системы.

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)