I admit it: I'm a total geek. I love electronics, programming, 3D printing, 3D art, and vintage Apple hardware. I'm always juggling half a dozen projects. I also enjoy documenting it all: my successes, my failures, my experiences... and everything geeky along the way.

Talking Clock - Part I | Kevin Rye.net - Main

Kevin Rye

Geek Extraordinaire. Yeh, I said it.

Talking Clock - Part I

In my last post for the VS1053 breakout board, I left off with simply playing an MP3 by pressing a button. Basically a "Hello World" for the breakout board.

Now it's time to dig in and see what it'll take to make a talking clock.

VS105_breakout_0001

I first started by making a list of all the words I'd need spoken: "It is", "one", "two", "three"..."o'clock", etc.

I then used OS X's text-to-speech function to read them back to me as I captured the audio with QuickTime.

I then dragged the file into GarageBand for editing.

Screen Shot 2016-04-07 at 8.53.04 PM

I cut each word into individual sound bites and exported them as separate MP3s.

Screen Shot 2016-04-07 at 8.42.32 PM

With this bank of sound bites, I'd be able to annunciate any time by concatenating the MP3 files.

For example, for "It is 9:45", I'd just have to play back 4 individual sound bites:

musicPlayer.playFullFile("itis.mp3");
musicPlayer.playFullFile("9.mp3");
musicPlayer.playFullFile("40.mp3");
musicPlayer.playFullFile("5.mp3");

Here it is in action...

It is 9...40...5

Hummmm. You hear that? That's a problem. Looked good on paper. Seemed OK in my head. In the real world? Less than ideal. There is way too much of a delay between tracks. It needs to sounds like "It is 9:45". Not "It is.....9.....40.....5"!

It looks (sounds?) like I'm going to have to record a sound bite for every minute of the day. I don't need to concern myself with AM and PM, so 12 hours will do. That's only 720 files. Yikes!

I jumped back into GarageBand and started to put the sound bites together. Here is “it is", "9", "40", "5" arranged side-by-side to form a sentence.

Screen Shot 2016-04-07 at 9.53.31 PM

I then exported it as an MP3 and tried it again. What a difference! This is how I'm going to have to do it.

It is 945

I named the files "100.mp3" for 1:00, "101.mp3" for 1:01...all the way up to "1259.mp3" for 12:59. It took me 4.5 hours to create and export all 720 sound bites. The files are tiny; about 70K. They only take up 100MB on my paltry 4GB micro USB card. And I thought I'd need to buy a bigger stick for this project!

With the sound bites ready to go, it was time to see if I could get my prototype to tell me the time.

I added a DS3231 RTC to my breadboard and started popping in some code.

talking_clock_0003

The easiest way to do it was to take the hours and minutes from the RTC and convert them to a string. Then play the MP3 file that matches that string

char timeString[7];
sprintf(timeString, "%d%d.mp3", hours, minutes);
musicPlayer.playFullFile(timeString);

So if the time was 9:45...."timeString" would be "945.mp3".

It works!

The plan is to have the clock annunciate the time on the hour, but if you want you can press a button at any time and it’ll tell you. I even put in some Easter eggs. When the clock hits midnight on New Year’s Eve, it’ll wish you a Happy Ne Year, for example. And then there’s 5 o’clock.

It's Five O'Clock

Now it's just a matter of adding some functionality to set the time and date. Oh man, the date! That’s another 365 sound bites!

See this project from start to finish:
Adafruit's VS1053 MP3 Player Breakout
Talking Clock - Part I
Talking Clock - Part II
Talking Clock - Part III
Talking Clock - Part IV
Talking Clock - Part V
Talking Clock - Part VI