Windows Media Foundation - правый динамик не работает
Я использую Windows Media Foundation C++ для воспроизведения аудио и видео файлов. Моё приложение в значительной степени основано на руководстве Media Foundation - http://msdn.microsoft.com/en-us/library/ms697062%28v=VS.85%29.aspx.
Моя проблема в том, что при воспроизведении медиа-файла звук воспроизводится только из левого динамика.
Еще немного информации:
Проблема возникает для аудио и видео файлов.
Моя топология - классический Input-Node -> Transfer-Node -> Output-Node. Аудиопоток выглядит хорошо на выходе Output-Node (Это поток float32, и он не имеет чередующихся нулей для правого динамика).
Узел переноса в топологии предназначен для будущего эквалайзера, но в настоящее время он ничего не делает. Даже если я удалю его из топологии, проблема все еще возникает.
Я полагаю, что проблема может возникнуть из-за неправильной настройки Media Foundation, но я не нашел ничего необычного в отношении Руководства Media Foundation.
Есть идеи, в чем может быть проблема? Я был бы рад поделиться соответствующими примерами кода или дать любую другую соответствующую информацию о моей реализации.
Благодарю.
2 ответа
Я нашел проблему. Это было неправильное использование функции waveOutSetVolume(), которая отключала мой правый динамик (я использовал его со значением 0xFFFF вместо 0xFFFFFFFF). Почему-то я пропустил несколько обзоров кода, которые я делал при отладке этой проблемы:(Так что вообще не связан с Media Foundation.
Похоже, что либо ваш исходный узел предоставляет одноканальный поток данных, либо тип носителя ввода для выходного узла - одноканальный. Если это последний случай, то мультимедийный сеанс вводит преобразование, которое понижает микширование входного потока в один канал, чтобы соответствовать типу мультимедиа.
Я бы проверил типы мультимедиа обоих узлов и посмотрел, в этом ли проблема.