Overview
CensorMe is a fairly new project that I have been working on when I get spare time, it allows a user to upload an audio clip (wav, mp3, ogg etc) and specify a list of words to censor (default profanity list will be used if no words are specified). The file gets uploaded and queued, then it gets encoded and the final result gets sent to the user.
Backend
- Azure Functions – Used to receive the uploaded files from users
- Azure Storage – Used to store the pending and censored files
- Azure ServiceBus – Used to queue the uploaded files (contains some user metadata, such as User Id, File Id and Words List)
- ServiceBus Client – Used to transcode the file (if it isn’t in wav already), transcribe, edit, upload the finished file and email the user
- Amazon SES – Used to send emails to users to inform them when their job has finished, or whether there was an error
Workflow
- The user goes onto the site and fills in the details (uploads a file and chooses words to censor)
- The file gets uploaded to Storage via the Function
- A message goes into the servicebus queue
- The servicebus client will pick the message up from the queue
- The client will then perform some basic sanity checks (valid user id, valid email address etc)
- The client will send the file off to AWS to be transcribed into a WAV file, with a set sample rate and channel count
- The client will then transcribe the file and return a list of words that it thinks were said, including timestamps
- The client checks through the list of words to censor, and then overlays a “beep” sound effect from the start to finish of the word
- The audio gets stitched back together and uploaded to Azure
- The email gets sent to the user informing them that the process has finished, including a download link