Audio Switcher поломан [Исправлено]

Автор Evgeniy1990, 10 марта 2018, 07:10:23

« назад - далее »

0 Пользователи и 2 гостей просматривают эту тему.

Evgeniy1990

Aleksoid1978,
ЦитироватьТак - "окончательный" вариант https://yadi.sk/d/Ij65L6NYW-tQ8g
Сделал не тупо игнора float в случае если не можем подключиться, а проверка поддерживаемого формата последующего фильтра, думаю так правильнее(мало ли какое дурацкое железо бывает и какие фильтры).
К сожалению, стало еще хуже, чем даже ваш самый первый вариант.

В чем хуже?

1. Float не работает даже если выключен GX.
2. Переключение форматов вывода аудио не работает совсем. Один раз переключается только на int16, если снять галочку с Float в самом аудиопереключателе. На остальные вообще не переключается.

Я предлагаю оставить именно ваш второй вариант, как самый стабильный и рабочий.
Motherboards: ASUS P5Q/GIGABYTE EP35C-DS3R, CPU: Core 2 Duo E8300/E8400, Memory: DDR2/DDR3, Video: MSI GTX 465/ASUS EAH5770/GTX 650 Ti, Audio: ASUS Xonar DG 5.1/Creative SB 5.1. VX/X-Fi Xtreme Gamer.

Aleksoid1978

AMD Ryzen 5 3600 /GIGABYTE B450 Gaming X /AMD Radeon R9 16Gb@3200 /Kingston 500Gb M.2 /GTX 1650 /Samsung U28R550UQI /OLED Philips 55OLED707 /Yamaha RX-V471 + NS-555 + NS-C444 + NS-333 + YST-SW215

Evgeniy1990

Aleksoid1978,
ЦитироватьАга - на DS я не проверил ))
На MPC Audio Renderer тоже самое, что и на DirectSound в вашем третьем варианте.
Motherboards: ASUS P5Q/GIGABYTE EP35C-DS3R, CPU: Core 2 Duo E8300/E8400, Memory: DDR2/DDR3, Video: MSI GTX 465/ASUS EAH5770/GTX 650 Ti, Audio: ASUS Xonar DG 5.1/Creative SB 5.1. VX/X-Fi Xtreme Gamer.

Aleksoid1978

Обновил последний билд, глюк какой-то был. Проверяем.
AMD Ryzen 5 3600 /GIGABYTE B450 Gaming X /AMD Radeon R9 16Gb@3200 /Kingston 500Gb M.2 /GTX 1650 /Samsung U28R550UQI /OLED Philips 55OLED707 /Yamaha RX-V471 + NS-555 + NS-C444 + NS-333 + YST-SW215

Evgeniy1990

Цитата: Aleksoid1978Обновил последний билд, глюк какой-то был. Проверяем.
Ничего не изменилось.

Добавлено: 2020-02-17 09:08:12

Aleksoid1978,
В обновленном билде Float заработал без GX, в остальном - без изменений. Т.е. форматы вывода аудио по прежнему не работают. Переключает только на int16, если снять галочку с Float. На остальные форматы int24 и int32 не переключает вообще, они словно вообще не работают.
Motherboards: ASUS P5Q/GIGABYTE EP35C-DS3R, CPU: Core 2 Duo E8300/E8400, Memory: DDR2/DDR3, Video: MSI GTX 465/ASUS EAH5770/GTX 650 Ti, Audio: ASUS Xonar DG 5.1/Creative SB 5.1. VX/X-Fi Xtreme Gamer.

Aleksoid1978

Очень странно - у меня на ура переключаются форматы, на DS и на WASAPI выводе.

Ну раз чето не пошло - ок, закрываем вопрос.
AMD Ryzen 5 3600 /GIGABYTE B450 Gaming X /AMD Radeon R9 16Gb@3200 /Kingston 500Gb M.2 /GTX 1650 /Samsung U28R550UQI /OLED Philips 55OLED707 /Yamaha RX-V471 + NS-555 + NS-C444 + NS-333 + YST-SW215

Evgeniy1990

Aleksoid1978,
ЦитироватьОчень странно - у меня на ура переключаются форматы, на DS и на WASAPI выводе.
Вы на чем проверяли? Проверять надо на ASUS Xonar DG, сначала при GX, потом без GX.
ЦитироватьНу раз чето не пошло - ок, закрываем вопрос.
Подождите закрывать вопрос. Давайте уж до конца разберемся.

Я скачал ваш обновленный тестовый билд.
Запустил его. Перетащил в него произвольный видео файл.

Проверка при GX (GX включен):

Вижу что:

1. Float не работает, просто игнорируется.
2. Пробую переключать форматы вывода аудио в обратном порядке с Float и до int16 (справа - налево).
В итоге, ничего не переключается.

Проверка без GX (GX выключен):

Вижу что:

1. Float полностью работает.
2. Пробую переключать форматы вывода аудио в обратном порядке с Float и до int16 (справа - налево).
В итоге, отключил галочку с Float, по логике должен быть и работать int32, но на выходном пине аудиопереключателя у меня показывает wBitsPerSample: 16 .

Добавлено: 2020-02-17 19:24:04

Aleksoid1978,
Сделал для вас видеозапись проверки вашего тестового билда. Посмотрите пожалуйста. Я проверял на свежей установленной Windows 10.
Возможно вы проверяли на других драйверах?

P.S. Также, на всякий случай, я залил для вас свой произвольный видео файл, на котором проверял работу вашего обновленного тестового билда. Скачайте его и проверьте пожалуйста переключение форматов вывода аудио на нем.
Интересно, будет ли переключать?
Motherboards: ASUS P5Q/GIGABYTE EP35C-DS3R, CPU: Core 2 Duo E8300/E8400, Memory: DDR2/DDR3, Video: MSI GTX 465/ASUS EAH5770/GTX 650 Ti, Audio: ASUS Xonar DG 5.1/Creative SB 5.1. VX/X-Fi Xtreme Gamer.

Aleksoid1978

AMD Ryzen 5 3600 /GIGABYTE B450 Gaming X /AMD Radeon R9 16Gb@3200 /Kingston 500Gb M.2 /GTX 1650 /Samsung U28R550UQI /OLED Philips 55OLED707 /Yamaha RX-V471 + NS-555 + NS-C444 + NS-333 + YST-SW215

Evgeniy1990

Aleksoid1978,
ЦитироватьПробуем - https://yadi.sk/d/Bnf5DeTlvQAObg
Проверил ваш тестовый билд.

1. Основная проблема с отсутствием встроенного аудио переключателя исправлена.
2. Переключение форматов вывода аудио также исправлено, полностью работает нормально.

Результаты проверки:

Проверка при GX (GX включен):

Вижу что:

1. Float игнорируется, работает int16
2. Отключаю галочку с Float, работает int32.
3. Отключаю галочку с int32, работает int24
4. Отключаю галочку с int24, работает int16
5. Аналогично и в обратном порядке, все форматы вывода аудио работают (я проверил каждый из них)

Проверка без GX (GX выключен):

Вижу что:

1. Float полностью работает нормально
2. Отключаю галочку с Float, работает int32.
3. Отключаю галочку с int32, работает int24
4. Отключаю галочку с int24, работает int16
5. Аналогично и в обратном порядке, все форматы вывода аудио работают (я проверил каждый из них)

Итоговый вывод:

Вот теперь смело можно сказать - это ПОБЕДА! ;) Все проблемы полностью устранены! :)
Motherboards: ASUS P5Q/GIGABYTE EP35C-DS3R, CPU: Core 2 Duo E8300/E8400, Memory: DDR2/DDR3, Video: MSI GTX 465/ASUS EAH5770/GTX 650 Ti, Audio: ASUS Xonar DG 5.1/Creative SB 5.1. VX/X-Fi Xtreme Gamer.

Aleksoid1978

Единственное что странно - то что int16 когда float не пашет. А у меня, если float не поддерживается, то работает формат согласно настройкам, к примеру int32 если галка на нем стоит.

Запусти Debug билд и дай мне его вывод при GX(когда float не пашет).
https://yadi.sk/d/q2GugTbUML6TLg
AMD Ryzen 5 3600 /GIGABYTE B450 Gaming X /AMD Radeon R9 16Gb@3200 /Kingston 500Gb M.2 /GTX 1650 /Samsung U28R550UQI /OLED Philips 55OLED707 /Yamaha RX-V471 + NS-555 + NS-C444 + NS-333 + YST-SW215

Evgeniy1990

Aleksoid1978,
ЦитироватьЕдинственное что странно - то что int16 когда float не пашет. А у меня, если float не поддерживается, то работает формат согласно настройкам, к примеру int32 если галка на нем стоит.
Да, странно конечно, хотя я уже решил, что это вы так сделали, типа если Float игнорируется, то работает строго int16, а оказывается нет. Ошибся.
ЦитироватьЗапусти Debug билд и дай мне его вывод при GX(когда float не пашет).
https://yadi.sk/d/q2GugTbUML6TLg
Сделал для вас лог-файл.

Добавлено: 2020-02-18 06:39:46

Aleksoid1978,
Также, на всякий случай, прилагаю выходной пин аудио переключателя.
Filter : Audio Switcher - CLSID : {18C16B08-6497-420E-AD14-22D21C2CEAB7}

- Connected to:

CLSID: {79376820-07D0-11CF-A24D-0020AFD79767}
Filter: Default DirectSound Device
Pin: Audio Input pin (rendered)

- Connection media type:

Audio: PCM 48000Hz 2.0 chn 1536 kbit/s

AM_MEDIA_TYPE:
majortype: MEDIATYPE_Audio {73647561-0000-0010-8000-00AA00389B71}
subtype: MEDIASUBTYPE_PCM {00000001-0000-0010-8000-00AA00389B71}
formattype: FORMAT_WaveFormatEx {05589F81-C356-11CE-BF01-00AA0055595A}
bFixedSizeSamples: 1
bTemporalCompression: 0
lSampleSize: 8
cbFormat: 18

WAVEFORMATEX:
wFormatTag: 0x0001
nChannels: 2
nSamplesPerSec: 48000
nAvgBytesPerSec: 192000
nBlockAlign: 4
wBitsPerSample: 16
cbSize: 0 (extra bytes)
Motherboards: ASUS P5Q/GIGABYTE EP35C-DS3R, CPU: Core 2 Duo E8300/E8400, Memory: DDR2/DDR3, Video: MSI GTX 465/ASUS EAH5770/GTX 650 Ti, Audio: ASUS Xonar DG 5.1/Creative SB 5.1. VX/X-Fi Xtreme Gamer.

Aleksoid1978

Да я все вижу. Короче все не просто, очень не просто ))

Добавлено: 2020-02-18 15:10:01

Красиво, чтобы в случае если аудио-рендерер или другой следующий фильтр не поддерживает текущий формат, выбирать из тех что указаны в настройках - не получиться. В таком случае будет всегда(ну почти всегда) fallback 16bit.
AMD Ryzen 5 3600 /GIGABYTE B450 Gaming X /AMD Radeon R9 16Gb@3200 /Kingston 500Gb M.2 /GTX 1650 /Samsung U28R550UQI /OLED Philips 55OLED707 /Yamaha RX-V471 + NS-555 + NS-C444 + NS-333 + YST-SW215

Evgeniy1990

Aleksoid1978,
ЦитироватьКрасиво, чтобы в случае если аудио-рендерер или другой следующий фильтр не поддерживает текущий формат, выбирать из тех что указаны в настройках - не получиться. В таком случае будет всегда(ну почти всегда) fallback 16bit.
В таком случае, я предлагаю остановиться на вашем последнем четвертом победном варианте.
В целом, он полностью рабочий и исправный. Переключение форматов вывода аудио также работает исправно, пускай и некрасиво, главное что работает и переключает.

Если при GX, снять галочку с Float, то будет работать Int32, затем Int24 и Int16, красиво по цепочке.

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

Да, я знаю и прекрасно понимаю, что вы хотели, чтобы при игнорировании Float, работал сразу int32 и далее по цепочке в одну и в другую стороны. Но пусть будет хотя бы так, как есть сейчас. Это в любом случае гораздо лучше, чем вообще сидеть без встроенного аудио переключателя, да еще и с внешним аудио декодером.

Мы уже добились и достигли Победы!

Лично я очень доволен вашей работой и вашими идеями (различными тестовыми вариантами), так как я в вас верил и прекрасно знал, что рано или поздно вы все же найдете решение данной проблемы и вам это удалось!

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

Самое главное, что с настройками плеера и звукового драйвера по умолчанию больше не будет отсутствовать встроенный аудио переключатель и всегда работать только лишь внешний аудио декодер. Именно этого мы и добивались, особенно для простых рядовых пользователей, которые вот так сходу, в отличие от нас, вряд ли бы смогли понять и разобраться что к чему. Как я уже говорил вам ранее, они бы просто стали жаловаться на то, что у них или отсутствуют аудио дорожки, или плеер не переключает аудио дорожки. В этом я уж точно уверен.
Motherboards: ASUS P5Q/GIGABYTE EP35C-DS3R, CPU: Core 2 Duo E8300/E8400, Memory: DDR2/DDR3, Video: MSI GTX 465/ASUS EAH5770/GTX 650 Ti, Audio: ASUS Xonar DG 5.1/Creative SB 5.1. VX/X-Fi Xtreme Gamer.

Aleksoid1978

Пробуем https://yadi.sk/d/A4eEd2IcQhl9dQ
Должен не int16 - а согласно галкам.
AMD Ryzen 5 3600 /GIGABYTE B450 Gaming X /AMD Radeon R9 16Gb@3200 /Kingston 500Gb M.2 /GTX 1650 /Samsung U28R550UQI /OLED Philips 55OLED707 /Yamaha RX-V471 + NS-555 + NS-C444 + NS-333 + YST-SW215

Evgeniy1990

Aleksoid1978,
ЦитироватьПробуем https://yadi.sk/d/A4eEd2IcQhl9dQ
Должен не int16 - а согласно галкам.
Проверил пятый тестовый билд.

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

Результаты проверки:

DirectSound:

При GX, вместо Float, работает сразу Int32 и далее по цепочке в одну и другую стороны.
Без GX, работает Float и далее по цепочке в одну и другую стороны.

MPC Audio Renderer (WASAPI):

При GX, вместо Float, работает сразу Int32 и далее по цепочке в одну и другую стороны.
Без GX, вместо Float, работает сразу Int32 и далее по цепочке в одну и другую стороны.

Понятно, что вы пока просто отключили в коде Float для MPC Audio Renderer, для удобства проверки.

Итоговый вывод:

В общем, теперь уж точно окончательно добили (устранили) проблему с переключением форматов вывода аудио, при наличии активного GX. ;)

P.S. Останется только вернуть Float для MPC Audio Renderer (WASAPI), чтобы он работал как при наличии активного GX, так и без него.
Motherboards: ASUS P5Q/GIGABYTE EP35C-DS3R, CPU: Core 2 Duo E8300/E8400, Memory: DDR2/DDR3, Video: MSI GTX 465/ASUS EAH5770/GTX 650 Ti, Audio: ASUS Xonar DG 5.1/Creative SB 5.1. VX/X-Fi Xtreme Gamer.