YoUnite - Shiwei Song and Ankit Gupta

YoUnite is an iPhone Application that allows users to contribute a recorded message in support of a cause and explore others' messages around the globe.

Motivation

The world is filled with problems and causes that people want to support or voice opinion. The traditional methods to support a cause include donations, demonstrations, and rallies. With the advent of internet, others means to show support are now possible, including blogging, tweeting, and uploading videos to YouTube. These new means allowed more people to show support at the comfort of their own home, but they still have barriers to entry that prevent many people from showing their support. The motivation for our project is to create a way for people to show support for a cause from anywhere by using their phone in under five seconds for free.

Design

The app is based on the iPhone and should be very simple for people to both support a cause and explore messages submitted by other users. We want to make it easy for people to express themselves while at the same time remove the intimidation of sharing a message to the world. We designed our app based on these observations and goals. We decided to have a very simple interface that only does 1 thing. We decided to use the user's recorded voice as the message they send. This is a very natural and expressive means to input a message. Additionally, by blending messages from different people, a new browsing/exploration experience is created. This reduces the intimidation people get from the idea the the whole world can hear what they are saying.

Based on the above observations and goals, we came up with an app with 2 interfaces. 1 for submitting a message and 1 for exploring. The submission screen allows the user to select a cause, record a message, and optionally enter their name. The exploration screen consists of a rendered globe with colored dots representing message from different locations. The color of the dots corresponds to the cause. The dots are translucent so they stack up to show density within a region. When the user clicks the explore button, snippets of sounds from messages starts to be streamed to the user and blends with other messages. The location of the current message played is represented on the globe by floating patterns.

At each time instant, 3 messages (randomly picked) are played simultaneously. We cut out randomly sized samples (all around 1 minute long) from each of the messages and mix them up in order. Each sample has been faded in and faded out by a amplitude filter. We also add some reverb to the sound to make it feel a little more ubiquitous.

Software Architecture

We use Google App Engine as our database and application layer. We had to write code in python to set up the database and simple python function for the REST API calls.

On the client side, one of the main challenges was to blend sounds together efficiently. We used NSThreads to make streaming sound asynchronous. We initially synchronously download 3 audio messages and fill them in 3 buffers. At each time step, we load a snippet of sound from the next buffer in line onto the audio buffer to be played out. We keep taking snippets of sounds from the buffers in order so as to mix the sounds together. Whenever one of the 3 buffers becomes empty, we make an asynchronous query (on another thread) and fill it with a new message; thus continuing the process.

All the visualization is done using opengl.

Future Work

While one goal for the project is to create a very simple app that does one thing well, there are still many areas that can be improved/extended.

  • Filter explored message by cause, location, and time. When the number of causes and messages increases, filtering will be needed to reduce clutter.
  • Besides using the globe to visualize message, other forms such as having a message "wall" can be employed.
  • Currently snippets of sound from different messages are mixed together. Other ways of mixing such as by words or syllables can be used.
  • Besides submitting voice, other forms of messages such as text, image, video, and drawings can be integrated into the system.

Finally the system can be extended to have an entirely different purpose. The system can potentially evolve into a voice only twitter-like service where users are limited to 5 seconds of voice recordings.

Source Code

Here it is.

Presentation

Take a look at our design doc