truecat17 / ren-engine Goto Github PK
View Code? Open in Web Editor NEWFast player renpy-files on C++
License: GNU General Public License v3.0
Fast player renpy-files on C++
License: GNU General Public License v3.0
При проигрывании звуков игра (далее движок) стопорится на несколько миллисекунд. Я много раз переконвертировал весь игровой звук. Даже придя к выводу, что быстрее всего декодируется mp3, и, соответственно, после полного переконвертирования игрового звука подвисания всё равно не прекратились. Хотя, при этом, мне кажется, что их частота уменьшилась. Да и сами они, по большей части появляются при холодном старте. Но, так как эти звуки - внутриигровая озвучка, эти подвисания - явление довольно таки частое.
Мне кажется, что эта проблема находится на уровне FFmpeg'а, так-как даже при воспроизведении wav-файлов (для этого я самостоятельно собрал движок) подвисания не пропали. Хотя эффект, вроде как должен был быть обратным. Периодичность их, кстати, примерно такая же.
Некоторые движки на основе SDL используют SDL_mixer для воспроизведения звука. Например VVVVVV, World Of Goo, System Shock EE их именно и используют. И там нет никаких подвисаний. Да и с недавнего времени SDL_mixer также стал поддерживать opus. Хотя SDL Mixer X это умел делать довольно таки давно. Да и сам он по функционалу будет по продвинутее чем обычный. Поэтому, возможно, SDL Mixer X будет лучше.
Но я не утверждаю, и возможно, проблема в чём-то другом. Да и я уверен, что у вас была веская причина использовать FFmpeg заместо более специализированной библиотеки.
В renpy.music.play
файла renpy_api.py
я добавил:
volume = kwargs.get('volume', 1)
renpy.music.set_volume(volume, channel)
Теперь при воспроизведении аудио из кода можно указать громкость канала:
renpy.play(sea_waves, 'sound_loop', volume = 0.2)
А вот в сценарии вот такой код не работает:
play sound_loop sea_waves volume 0.2
Движок гласит следующее:
Music::play Error:
3 argument must be <fadein>
File <mods/ever17/script/op.rpy>
Line 17: <sound_loop SE09_01L volume 0.2>
При попытке зациклить какой-нибудь звук, который в конце воспроизведения не "исчезает", слышны разрывы. На разных форматах они чуть-чуть отличаются.
Например mp3, ogg и, на моей памяти, wav звучит одинакового. У Opus разрывы очень даже ярко выражены. Вот, кстати, оригинал.
Мне исследование исходников и сборка ffmpeg'а с разными параметрами компиляции не помогло (да и ждать по пол часа на его сборку у меня желания уже нет). Догадок у меня тоже нет. Хотя я заметил, что shared версия ffmpeg'a у меня загружается и работает быстрее. Может стоит попробовать заставить движок работать, как минимум на Windows, с динамическими библиотеками, а не статическими. Во всяком случае - у меня пока не получилось.
Проблема примерно такая: спрайт, видимо, загружается с задержкой, из-за чего анимация его перехода возобновляет я чуть позже, из-за чего начальная фаза эффекта пропускаетя (в этот момент даже fps проседает). Однако, при повторном загрузке этого же спрайта он появляется плавно и правильно (видимо, потому что он грузится из кэша).
Пример:
В моём проекте
В стандартном Ren-Engine'e
Спрайты (если нужно)
Переход осуществляется через Dissolve(0.3)
После продолжительного исследования я пришёл к выводу, что размер изображения, его формат и степень сжатия значения не имеют — всё равно эта проблема остаётся. Да и она даже становится более заметной, если на экране отобразить три сразу спрайта. Зато, если фон пустой, не проигрывается музыка и у спрайта не используются im функции — он загружается быстрее. Но я не знаю, проблема ли это моего древнего пылесоса, формата изображений или чего-нибудь другого.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.