Voice acting is an integral component of modern video games, effectively providing much realism and immersiveness. This comes at a cost, however, as tinkerers (modders) don’t have access to the original professional voice actors used in the games’ creation processes. This usually means user generated content suffers from a lack of voiced characters, or often sub-par quality of voice recordings where recording equipment is not very good.

This is a companion post for the v1.0 release of xVASynth, a tool I’ve been working on since 2018, which aims to tackle this problem using established neural speech synthesis techniques. I’ll go…


Bias lighting is light placed behind a screen such as a TV or PC monitor, to provide some ambient light, usually to either make the screen less strenuous on the eyes, or to augment the screen’s output. Some set-ups use a constant light, and some more sophisticated ones adapt the colour to the content displayed.

We’re going to have a go at building one of the fancy ones for a PC, using python, and a light bulb from Lifx. I’m using an A60 that I got in the last Black Friday sale, but I imagine that (maybe with some tweaks)…


Today, about 4% of the world’s population is visually impaired. Tasks like simple navigation across a room, or walking down a street pose real dangers they have to face every day. Current technology based solutions are too inaccessible, or difficult to use.

As part of a university assignment, we (myself, Louis, and Tom) devised and implemented a new solution. We used configurable WebGL shaders to augment a video feed of a user’s surroundings in real-time. We rendered the output in a AR/VR format, with effects such as edge detection and color adjustments. Later, we also added color blindness simulation, for…


The original motivation for this side-project was finding a better way to save and load weights trained by a browser based neural network, while developing jsNet. To save weights, as JSON, I would have to log the content out, in the console, or on the page, and as you can imagine, it got pretty bad when the networks got big and there was a lot of data.

The solution I came up with was to encode the data as images, which are handled much better than plain JSON text. Inadvertently, the algorithm I used to do that seems to not…


WebAssembly is blazing fast for number crunching, game engines, and many other things, but nothing can quite compare to the extreme parallelization of shaders, running on the GPU.

This is especially so if you’re looking to do some image processing. Usually, on the web, this is done through WebGL, but how would you access its APIs when using WebAssembly?

Setting up

We’ll very briefly go through setting up an example project, then we’ll look at how an image can be loaded as a texture. Then, in a separate context, we’ll apply an edge detection GLSL shader to the image.

All the code…


Date: 13th October 2017

There’s little worse than the procrastination of setting up the tooling for a new project. WebAssembly projects are an especially worse case as they need separate set-up for both JavaScript and a back end language such as C++, not to mention emscripten itself.

To avoid future pain and wasted time, I’ve put together what I will be using and maintaining from now on as my WebAssembly project shell, for current and future projects. The final result is hosted on GitHub, should you wish to skip straight to that.


Date: 28th September 2017

If you have not heard of WebAssembly yet, I greatly encourage you to read about it, but if you have, and you’ve played around with it, you might have noticed that passing some parameter types to/from the JavaScript side and the C++ side is currently limited or not straight-forward.

Arrays are one such parameter. With some work, you can still use the existing “array” parameter type, but even then, you are limited to using only Int8Array or Uint8Array, and returning an array is still an issue.

In this post, I will quickly go over the implementation…

Dan Ruta

AI PhD student @ UoSurrey & Adobe | Software developer https://danruta.co.uk @Dan_Ruta

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store