Trevor Bivi
Software Engineering Student Home Projects Work Experience About GitHub
Sound Mixer Minecraft Tools RuneScape Bot API
Garden Watering System Tetris Bot Steam Market Analyser
3D Computer Game Phone Game Other Projects
May 2018 - August 2018
Sound Mixer
Language used
 Python, C and batch were used. This code uses popular libraries such as Numpy and win32.

What it is
 This is a custom program for playing audio files and mic audio, as well as applying sound effects to individual audio tracks. The goal was to create a custom program that could be used in virtual reality, so a custom controller was built to provide the user with additional buttons that could be easily worked while not able to see. A wireless remote is also supported that has less functionality. The program also provides playback to the user and uses text to speech software to narrate the users actions to ensure that they are aware if they misclick a button and can take corrective action.

Pictures of each of the controllers

How it works
 A wired controller was built using an arduino that communicates to a python program on the user's computer over USB. The IR remote works by communicating to another arduino equipped with an IR sensor. One of the major capabilities of the program is being able to independently shift the speed and pitch of an audio channel. This was achieved using Numpy and fourier transforms to apply signal processing. There is a very powerful voice modifier program I have used in the past and I did not want to loose the functionality it provides, however it is closed source. In order to include the functionality of this program, I used reverse engineering tools to determine how memory values that store the state of the program could be automatically found and read. I then used the win32 api to read the state of these memory values and send artifical user input to the program to control the state. More Python code was used to forward and combine audio from various artifial audio devices. All of this processing can be very intensive and needs to be done with minimal latency, so heavy use of multiprocessing and multithreading was used. Pipes and queues were used for transfering data between threads and processes.

Potential improvements
 I am quite pleased with this project as it has provided functionality that I have not seen anyone else use in VR. However, having a second wire the user needs to worry about while in VR to get the most functionality can be bothersome and the IR wireless remote won't work reliably if it is pointed more than ~80 degrees from the receiver. Using something like wireless RS232 modules it would be possible to have the wired controller communicate to the computer wirelessly instead, no matter where it's pointing. Running the arduino off of battery power instead of usb would require no extra electronics but a battery holder.