Project of Interest

A VOIP-based system to record samples of spoken words to create "Person of Interest"-like audio messages.

Similar projects worth following
I loved the show "Person of Interest" from a couple years ago on CBS. One of my favorite aspects from the Season Two Premire was hearing The Machine "speak" to John using samples of voices to create a key to the number of the victim/perpetrator in the episode.

Using the Twilio API and a PHP/MySQL system, this project will allow a contributor to call in; at which point they will be asked to repeat the word they hear. Then a word ("zero," "foxtrot," "niner") will be spoken and their version recorded. The database will keep track of all the recordings and leave me the opportunity to approve them (in case someone says "a$$hole" instead of "alpha") or not.

Once I have a few samples of each word (the NATO letters and numbers to start), I'll release the whole set for download for public use.

In the short run, I want to create a Mystery Geocache using this system.

To contribute your voice, call: 646-349-0996

Inspired by the show Person of Interest, the mysterious numbers stations around the world, and the Craigslist Numbers Stations by Project Evil @ DEF CON, I wanted to make my own version of this using numbers and NATO letters. But I wanted more than one voice per word.

So this project will provide a phone number where people can call in and contribute. They will be asked to repeat a word and the recordings of each word will be stored.

Once I have a handful of samples of each word (weeding out the spam), I'll release the whole set for others to use in their own numbers stations.

I also want to use this to create a Person of Interest themed Puzzle Geocache.


The PHP code that handles the Twilio call and saves the recordings.

php - 2.27 kB - 03/03/2017 at 03:59


  • 1 × Twilio Account A programmable VOIP system.
  • 1 × LAMP Server Really I just need the MySQL/PHO part...
  • 1 × Public Payphone (optional) Getting harder to find so we can't escape The Matrix.

  • Squashing Bugs

    Chad Lawson03/04/2017 at 16:37 0 comments

    I made a few changes to the code today.

    • MAXWORDS - Created a variable to set the maximum number of words a caller will be asked for. I had a couple of friends provide more than 40 which is more than the total word count.
    • error_reporting(0) - On rare occasion, the next script would be called before the recording of the previous word was available. This would result in a PHP warning which would display to TwiML as garbage and say to the caller "We're sorry. An application error has occurred" and hang up on them. By disabling error reporting, I'll still get the rare zero byte recording, but the caller can keep going.
    • Last, I changed the intro message to invite the user to hang up at any time but that the code would hang up after MAXWORDS.

  • Initial Tests Going Well

    Chad Lawson03/03/2017 at 22:52 0 comments

    I posted my project on Facebook and a couple of my friends have contributed nicely. I still have a glitch I can't identify that will occasionally kick a caller off. I think it's when the recording isn't available at the moment of the next loop.

    Also I think I need to put in some limit or something. I have two callers who provided over 40 samples and there is only 36 words (26 letters + 10 numbers) in the set.

    But this is a good!

  • Seeking Alpha Testers

    Chad Lawson03/03/2017 at 03:46 0 comments

    Okay... after some final code tweaks, I have the system up and running! I have two numbers available for initial tests.

    Milwaukee - 414-979-9861
    New York - 646-349-0996

    In the final run, I'll just use the New York number since that's where the show was located, but it's acting twitchy as of this writing, so I'm making my Milwaukee "sandbox" number use the same web hook for now.

    If you call in, you'll get a brief voice intro and then hear a NATO word or a number. When you repeat the number it will save it and log the call (just what word and when). It will keep giving you new words until you hang up.

    Thanks in advance.

  • *sigh*

    Chad Lawson03/02/2017 at 04:45 1 comment

    I heard back from Twilio Support on why all my recordings were being deleted the instant they arrived. It turns out they were having some downtime issues with that feature during the time I was trying to write this second.

    Go figure.

    Now I'm back up and running and closing in on the end of phase one, the recordings.

  • while( headache=="yes" ) { drink++; }

    Chad Lawson02/28/2017 at 21:24 0 comments

    This is my first time recording voice using the Twilio TwiML language. In the past I've used one of their "Twimlets" to record and transcribe messages for a DIY voicemail system.

    Today I wrote up the code and made some tests. The SQL to pull a random word from the five least recently used words is fine. The voice thanks me for calling and gives me word after word until I hang up.

    The recordings, however, keep getting deleted on the Twilio side and I can't figure it out.

    After spending WAAAAAAAYYYYYY too much time today on this, I'm sending in a ticket and I'll see what I get back.

View all 5 project logs

Enjoy this project?



Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates