Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Discussion about SoundAPI specification #762

Open
SNMetamorph opened this issue Feb 12, 2022 · 13 comments
Open

Discussion about SoundAPI specification #762

SNMetamorph opened this issue Feb 12, 2022 · 13 comments

Comments

@SNMetamorph
Copy link
Member

Предлагаю разработать и ввести в движке новый интерфейс для возможности реализации звуковой подсистемы со стороны клиента игры, по тому же принципу как RenderAPI. Это потенциально намного расширяет возможности моддинга.
Структура у всего этого должна быть примерно такая:
изображение

@mittorn
Copy link
Member

mittorn commented Feb 12, 2022

То есть предполагается вынести создание звукового контекста в клиент и реализовывать движковый звук на уровне миксера поверх него уже? А на ком должна быть загрузка звуков?

@a1batross
Copy link
Member

Заменять микшер клиентом -- в целом идея хорошая.

Но как и в случае с рендерингом, хотелось бы оставить soundlib и вывод в движке.

Если тот же OpenAL Soft имеет возможность работать просто микшером, то это как раз то что я имею ввиду. Чтобы он сам не взаимодействовал с платформо-зависимым выводом аудио.

@SNMetamorph
Copy link
Member Author

Чтобы он сам не взаимодействовал с платформо-зависимым выводом аудио.

А чем это плохо? У него куча бэкэндов под разные платформы. А вот насчет возможности его работы как микшера ничего не могу сказать, не шарю

@a1batross
Copy link
Member

Аудио будучи одной из частей которую всегда можно улучшить (например уменьшать задержки), часто в итоге и переписывается с нуля.

Я напомню, что у Windows есть около двух или трёх способов вывести звук на аудиокарточку, в Linux около пяти, в Android три. Моды в отличие от движка могут не изменяться десятилетиями.

В любом случае, при возможности реализации микшера в клиентском коде ничто не запрещает выводить аудио самостоятельно. С этим просто наверное ничего не получится сделать. Но наша ответственность как разработчиков движка -- это дать интерфейс универсальный, и само собой постараться его не ломать.

@mittorn
Copy link
Member

mittorn commented Feb 12, 2022

Для аудио возможно стоит и сделать возможность притащить в клиент платформенную реализацию. Главное чтобы такая функциональность была опциональной. В отличие от графики ситуация с аудио куда печальнее - кто-то тот же steam phonon захочет задействовать.То есть мы можем сделать что-то уровня OpenAL в интерфейсе, но даже в таком случае - сможем ли мы отдать буффер уже подготовленный steam audio движку? Если да и это предусмот рено - тогда действительно вывод можно оставить в движке. А так - openal обычно уже доступен на целевой платформе и в отличие от OpenGL не требует передачи ему платформенного окна, верно? Если недоступен - или это совсем какая-то ограниченная консоль или вообще дос какой-нибудь. То есть как я понимаю использование в моде OpenAL не потребует в интерфейс тащить платформенные объекты

@a1batross
Copy link
Member

SteamAudio так может, я проверял. :)

А вот OpenAL судя по всему не похоже.

@a1batross
Copy link
Member

Как вариант можно в движке перейти на OpenAL, если кому-то хочется его использовать, и тогда прокидывать интерфейс в клиентку.

Но это уже совсем безумие.

@SNMetamorph
Copy link
Member Author

Ну у меня позиция такая: дать возможность моддерам перелопатить движковый звук насколько это вообще возможно. А ответственность на том, насколько оно будет переносимо на другие платформы и не отвалится ли через некоторое время по каким-либо причинам, лежит на самих разработчиках мода.

@mittorn
Copy link
Member

mittorn commented Feb 12, 2022

Да в том то и дело что намного проще позволить клиентке перегрузить вывод, Так уж выходит что OpenAL сам по себе не является платформенной частью, хоть и взаимодействует с платформой. На android такая перегрузка тоже возможна - OpenSLES там не требует получать ничего от приложения

@a1batross
Copy link
Member

насколько оно будет переносимо на другие платформы и не отвалится ли через некоторое время по каким-либо причинам, лежит на самих разработчиках мода

практика показывает что им пофиг

@0x4E69676874466F78
Copy link
Contributor

0x4E69676874466F78 commented Feb 16, 2022

Если пытаться усидеть на всех стульях:

  1. Базовая реализация в движке, она же предоставляющая API для создания своих эффектов и предустановок (для 95% мододелов должно хватить). Это может быть абстрактный слой над OpenAL где OpenAL может заменяться другим аудио движком.
  2. Возможность моду переключить базовую реализацию на собственную (для тех самых 5%).
    2.1. Автоматический fallback на базовую реализацию в случае ошибки инициализации (требует от мододелов правильную обработку ошибок, следовательно об этом надо написать большими красными буквами, иначе все забьют) и ручной запрет переключения через например консоль/конфиг "force_default_audio_backend".

@0x4E69676874466F78
Copy link
Contributor

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants