Я пытаюсь выяснить, как захватить отдельные аудиопотоки по мере их появления в аудиомикшере, чтобы перенаправить их на объединенное аудиоустройство. Я специально стараюсь сохранить их как скрытые потоки для целей создаваемой мной программы (если они сводятся к двухканальному миксу, это противоречит целям того, чего я пытаюсь достичь).
E.X .: (Поскольку я только что сделал эту учетную запись, я, очевидно, не могу публиковать изображения, поэтому вот ссылка на изображение)
В этом я надеюсь получить «Системные звуки» и «Stream Client Bootstrapper» в качестве дискретных аудиопотоков для маршрутизации в другое место, сохраняя при этом свой первоначальный пункт назначения (по сути, копируя аудио, идущее на исходное аудиоустройство, на другое одновременно).
Я хочу сделать это на C # или C ++. Я просматривал аудио API, которые Microsoft опубликовала, и хотя некоторые вещи кажутся близкими к тому, что я пытаюсь сделать, ничто не ударило по голове. Я ценю любую помощь. Благодарю.
Сессии могут быть перечислены с помощью IAudioSessionManager2::GetSessionEnumerator
и друзья (пример кода C ++ Вот а также там). Стандартное приложение микшера громкости Windows также использует этот API.
Однако API не имеет доступа к потокам данных, у вас их тоже не будет (данных у вас точно нет, независимо от того, смешаны они или нет). Также вы не можете перенаправить потоки на другое устройство. Приложения не могут вмешиваться так глубоко. Лучшее, что вы можете сделать, — это создать собственное устройство, интерактивно выбрать его в качестве устройства вывода по умолчанию и затем принимать данные из приложений, воспроизводящих аудио через это устройство.