Как получить данные PCM из Wave Out
-
02-07-2019 - |
Вопрос
Как можно было бы программно записать звук?Я внедряю приложение, которое транслирует в режиме реального времени рабочий стол в сети.Видео-часть закончена.Мне нужно реализовать звуковую часть.Мне нужен способ получить PCM-данные со звуковой карты для передачи в мой кодировщик (реализован с использованием формата Windows Media).
Я думаю, что ответ связан с функциями openMixer (), waveInOpen () в Win32 API, но я не уверен точно, что мне следует делать.
Как открыть нужный канал и как считывать с него PCM-данные?
Заранее благодарю.
Решение
Я не думаю, что есть прямой способ сделать это с помощью операционной системы - это функция, которая может присутствовать (а может и не присутствовать) на звуковой карте.Некоторые звуковые карты имеют циклический интерфейс - Creative называет это "То, что вы слышите".Вы просто выбираете его в качестве входного сигнала, а не микрофона, и записываете с него, используя обычную функцию waveInOpen (), о которой вы уже знаете.
Если звуковая карта не имеет этой функции, то я думаю, что вам не повезло, кроме как сделать что-то безумное, например, создать свой собственный драйвер.Или вы могли бы убедить своих пользователей подключить кабель от выхода динамика к линейному входу :)
Другие советы
Новые API-интерфейсы Windows Vista Core Audio поддерживают это явно (так называемая циклическая запись), поэтому, если вы можете работать с приложением только для Vista, это правильный путь.
Смотрите на Циклическая запись в статье на MSDN приведены инструкции о том, как это сделать.