TKTalkie V2 Tutorial

This is a basic version of the TK-Talkie and does NOT include Bluetooth support for mobile app control. If you would like a more recent version, visit the Version 3 Tutorial.

These tutorials are provided so that you can build a TK-Talkie for yourself...you can even build them for your friends. The license that comes with TK-Talkie does prevent the sale of them, however.

If you would like to make these AND sell them...well you can't ;)

HOWEVER, if you would like to sell them, then you should join our affiliates program.

TKTalkie is a DIY voice effects project that is easy to build and easy to customize. This page will serve as the tutorial page for the latest version of TKTalkie V2.

TKTalkie is basically a two-part system consisting of the hardware and software. For this reason, hardware/software versions may not always run concurrent as the software and hardware can be modified separately from each other and still be compatible.

Current Versions:

NOTE ABOUT DOWNLOADING SOURCE CODE: DO NOT copy and paste the source code files, especially Windows users! This will result in extra characters that will cause compile errors. If you get 'Stray \302' errors when you compile, this is why! Use the DOWNLOAD button to save the source code!

NOTE: This tutorial assumes that you have a basic understanding of wiring, and that you know how to solder. If not, all this is pretty basic, and there are lots of on-line videos on how to solder.

So...What Can You Do With It?

The great part about this project is that you start with a few base components and then can extend it however you want! Since the sound is customizable via the software and uses a configuration file, you can customize your project for your purpose. You can even setup different config files so you can use your TKTalkie in multiple situations and for different characters.

Some key features:

It is recommended that you read all the way through this tutorial before starting to familiarize yourself with how parts will fit together and the different options you may have based upon your intended use.

And don't worry...it looks like there is a lot more to do than there is...I just wanted to be as thorough as possible!

Ready? Let's get started!


Table of Contents

  1. Parts List
  2. Lining Up the Boards
  3. Soldering the Boards
  4. Wiring the Audio Jacks
  5. Inputs
  6. Outputs
  7. Copy Files to the SD Card
  8. Programming the TKTalkie
  9. Editing Your Settings File
  10. Using the Serial Interface

1. Parts List

TKTalkie consists of a few hardware parts that you'll need to order. All required parts are listed below with links to where you can purchase them.

  1. Pre-pinned Teensy 3.2 - https://www.pjrc.com/store/teensy32_pins.html
  2. Audio Adaptor - https://www.pjrc.com/store/teensy3_audio.html
  3. 25k Audio Pot (OPTIONAL) - https://www.pjrc.com/store/pot_thumb_25k.html
  4. 1/8" (aka 3.5mm) Mono or Stereo Jacks (2 to 3 depending on how you want to build it). https://www.radioshack.com/products/radioshack-3-5mm-2-conductor-panel-mount-phone-jack
  5. Micro SD Card - I have found that the SanDisk Ultra works best and is widely available (it is also recommended by the makers of Teensy for its access speeds and ability to allow the Audo Adaptor to play mulitple WAV files at once.)
  6. TKTalkie Case (OPTIONAL) - This is a 3-D printed case for the TKTalkie designed to be compact. You can download the 3D print file here. If you don't have a 3-D printer, you can upload the file to lots of online printing services.

Items Not Pictured

Of course there are other items/tools you will need:

NOTES ABOUT 3.5mm (1/8") JACKS:

While you're waiting on parts to arrive, go ahead and read through the rest of the tutorial to familiarize yourself with how it all fits together.

2. Lining Up the Boards

BEFORE YOU SOLDER!!!! You only need to solder 15 pins total to join the Teensy to the Audio Adaptor. SNAP the pin headers into the following pieces before beginning and line them up according to the image of the solder points. This leaves the holes on the Teensy available for other options! You can snap them pretty easily using a pair of pliers and your fingers.

You have to solder the Teensy and Audio Adaptor boards a certain way for them to work correctly. The good news is that you don't have to solder ALL the pins.

Start by lining up the two boards as shown in the picture.

Then, place the Teensy on top of the Audio Adaptor, keeping the same orientation. Insert the pins of the Teensy into the holes on the Audio Adaptor. You may need to bend some of the pins slightly to get it to fit. This is pretty typical. Just be careful ;)

Then fire up the soldering iron! Ready? 3...2...

3. Soldering the Boards

BEFORE YOU SOLDER!!!! You only need to solder 15 pins total to join the Teensy to the Audio Adaptor. SNAP the pin headers into the following pieces before beginning and line them up according to the image of the solder points. This leaves the holes on the Teensy available for other options! You can snap them pretty easily using a pair of pliers and your fingers.

Double-check that you have the boards lined up correctly!

Then, flip the joined boards over so that they look like the picture.

The pins that need to be soldered are marked in the picture, but just to be safe here are the pin numbers starting on the TOP ROW LEFT and going LEFT TO RIGHT:

Next are the pins starting on the BOTTOM ROW LEFT and going LEFT TO RIGHT:

NOTE: Make sure your solder joints have proper coverage...the solder covers the entire pad. If they are not properly covered you may have some issues..as in...it won't work ;) So if at the end of the project you find it's not working...check your solder joints!

3a. Adding the Volume Pot (Optional)

If you have purchased the optional volume pot, you can go ahead and solder it to the Audio Adaptor. Reference the picture to see how it lines up and goes on the board.

NOTE: The volume pot is optional...the TKTalkie software is designed to use it if it's there and the case is designed with an opening so that you can adjust it, but you can also set your volume via the config file. I personally removed the volume pot and just use my config file for everything.

4. Wiring the Audio Jacks

Before we get busy making connections, let's see how we should wire up the 3.5mm (1/8") audio jacks.

Since we are dealing with mono sound here, whenever there are options for stereo connections, we'll use the Left side.

In the image, you'll notice that it is a stereo jack. No problem. We just wire it up to use the left channel as shown. This lets you use both mono and stereo plugs.

If you want to wire up the stereo connection...feel free to do so ;) IMO the mono sound just adds authenticity to the radio sound of the final product, though.

5. Inputs

The Audio Adaptor has two inputs, a microphone and a Line-In.

Which one should you use? Well, that depends on your equipment...typically:

The Audio Adaptor lets you adjust the input gain/level of both the microphone and line-in inputs, so you can tweak your levels and sound. It's generally a good idea to run powered signals to line-in connections to avoid really hot signals and feedback. The same goes with a powered speaker...run the signal from the line-out on the Audio Adaptor to the "Aux" or "Line-In" jack on the speaker and let the volume knob do all the work ;)

NOTES IF YOU DECIDE TO WIRE BOTH INPUTS:

Want to wire up both the microphone and line-in inputs? You can do that! However, here are some points to consider:

5a. Inputs - Microphone

NOTE: Reference Step 4 for the other end of this connection.

This step will deal with wiring up the microphone connection.

As you can see from the photo...it's pretty simple. The red wire goes to the MIC connection, the black wire goes to GND.

I actually soldered my microphone connection on before soldering the two boards together...and I soldered it on the top instead of the bottom.

Don't be like me, solder on the bottom ;)

5b. Inputs - Line-In

NOTE: Reference Step 4 for the other end of this connection.

This step will deal with wiring up the line-in connection.

Again, as you can see from the photo...it's pretty simple. The red wire goes to the pad marked "L", and the black wire goes to the pad right above it marked "G".

Remember, since we're dealing with mono sound here, whenever there are inputs for stereo (both left and right) we'll use the left input.

NOTE: In the picture you probably noticed the microphone input wires are cut. I was experimenting with both the line-in and microphone inputs and did not have an extra jack, so I cut the microphone wires in a way that I could re-attach the jack easily (they were a little long to begin with) if I decided to go back to using the microphone input.

FOLLOW-UP: After testing, I liked the line-in connection (I am using a wireless mic with a powered signal) so I just cut off the microphone wires ;) I troop with a backup wireless mic in case mine dies, so not worried about using the microphone input.

6. Outputs

The Audio Adaptor also has two (2) outputs: Headphones and Line-Out

However, unlike the inputs, the output signal is actually routed to both outputs, so you can use either one (or both) without having to do anything!

But like the inputs, the headphone jack sends a powered signal, while the line-out is a line-level (attenuated, or reduced) signal.

The headphone output is built-in to the Audio Adaptor, so if you just want to use that, just keep reading. If you are wanting to either use the Line-Out as your primary output or just have it available as an alternate output, keep reading as well ;) The next step will show you how to hook it up.

So which output should you use?

Again, it's a matter of how you plan to setup your equipment. Just like with the microphone/line-in inputs, if you are going to hook up your TKTalkie to a powered speaker, it's probably best to use the Line-Out of the TKTalkie and connect it to the aux/Line-In input on the speaker. That way, you avoid having a really hot signal that causes feedback. Using line-level signals lets your amp do all the work as far as making it loud, so you can get a bigger sound before having to deal with feedback ;) If you use powered signals in your signal chain all way to the powered amp, you'll get feedback even at lower levels.

Well...that's not ENTIRELY true...

You can adjust levels of both the line-in and line-out on the Audio Adapter, making the signal stronger or weaker (it's still not as hot as coming out of the headphone ouput, though, for example.) So again, you can customize your input and output signals for your purpose and setup.

6a. Outputs - Line-Out

NOTE: Reference Step 4 for the other end of this connection.

The line-out connection is easy to connect just like the others. Two wires, one positive (signal) and one negative (ground.)

Notice that the Ground connection is next to the signal connection instead of above it as it was in the Line-In connection.

7. Copy Files to the SD Card

Now that the hardware is put together, it's time to prep the SD card by loading it with a config file and some sound files.

TKCONFIG.TXT

The TKCONFIG.TXT file that is part of the source code repo is the configuration file that the TKTalkie software will load each time it starts.

Before you copy it to the SD card, you may need to edit some options. By default the config file is setup to use the microphone input, so if you are using the line-in instead, you will need to change the setting to:

[input=0]

We won't worry about the rest of the settings for now. How to edit the config file and what the settings are will be covered later in this tutorial.

Once your config file is ready, copy it to the SD card.

Sound Files

The Audio Adapter has a built-in function to read .WAV files from the SD card (sorry, no mp3's...)

You can make your own WAV files, or visit the downloads page to get the files you need to get started. Be sure to read the READ.me file listed in the repo regarding WAV files, but here’s the short of it:

If you have downloaded the zip file, go ahead and unzip and load these files onto your micro SD card and then insert into into the SD card reader on the audio shield.

Now you are ready to load the TKTalkie software onto your TKTalkie!

8. Programming the TKTalkie

First thing to do is install the Arduino software. Then, download and install TeensyDuino. Both pages will have instructions on how to install them.

The Teensy board is compatible with Arduino and you can use the Arduino programming environment to write software for it. Teensyduino is a loader program that is used to transfer the compiled program to the Teensy and works on top of the Arduino environment.

Once you have both pieces of software installed, open the Arduino program and take some time and familiarize yourself with the examples and tutorials under File > Examples > Audio and File > Examples > Audio > Tutorial. There is a lot of great stuff there. Additionally, watch the Teensy Audio Tutorial and Workshop video on Youtube to get an idea of what you can do with this awesome piece of tech! This step isn't really necessary, but it's cool to find out what all the Teensy and Audio Adaptor can do and may give you some ideas.

Next thing to do is download the TKTalkie sketch using the "Download" button ("sketch" is a term used in the Arduino world to reference a program's source code.) Once you have it, open a new sketch file in Arduino (File -> New) and copy the TKTalkie sketch. You can save it to whatever filename you wish. Since you have loaded your config file onto the SD card already, you shouldn't need to change anything in the TKTalkie sketch at this point. Just upload it to your TKTalkie and if everything goes right, you should hear the startup file and be ready to go!

  1. Plug your TKTalkie into your powered speaker with a 3.5mm (1/8") audio cable using either the Aux/Line-In on your speaker or the microphone connection. You can plug some headphones into the headphone jack...but it might be REALLY loud until you get your settings adjusted...you have been warned ;)
  2. Connect the Teensy with the USB to micro USB cable. Plug the micro USB end to the Teensy and the USB end to your computer. You should see the on-board LED light up. This means you have power ;)
  3. In the Arduino software, go to Tools > Board and make sure to select the correct board (in this case, Teensy 3.2/3.1).
  4. Go to Tools > Port and select the correct serial port (the one your Teensy is connected to)
  5. Click the button in the Arduino program that looks like a checkmark. This pre-compiles the source code to make sure everything is ok. It should also trigger the TeensyDuino.
  6. Click the “Upload” button (the one that looks like an arrow pointing right.) If everything is connected correctly, the sketch should compile and load onto your Teensy. Then the board should restart and you should hear the STARTUP.WAV file play.

If the sketch doesn’t load (i.e. you get an error in the Arduino window), make sure your pins are connected correctly and that you have selected the correct board and serial port (see above.) Also make sure the volume is turned up on your speaker.

Editing Your Settings File

The config file that TKTalkie loads each time is starts is called TKCONFIG.TXT and is located on your SD card.

It is a standard text file in key=value format, with one slight difference. Since the way text editors save "newline" characters can differ across systems, we are using a bracketed key/value system to make it compatible with all editors.

The configuration values take this form:

[setting_key=setting_value]

Any other text outside of brackets will be treated as comments and ignored.

The current settings and valid values are:

volume
Manually set the overall output volume. Value values are any decimal values 0 to 1.


        # System volume
        [volume=.5]
        

NOTE: Volume levels past .7 will become distorted. If you have installed the volume wheel, you should remove this entry from your config.

linein
Set the level for the line-in input. Valid values are 0 to 15, with 5 being the default. Lower numbers decrease the input level, higher numbers increase it.


        # Line-in signal level
        [linein=5]
        

lineout
Set the level for the line-out signal. Valid values are 13 to 31, with 29 being the default. Lower numbers increase the level, higher numbers decrease it.


        # Line-out signal level
        [lineout=29]
        

startup
This is the sound that is played each time TKTalkie starts.


        # sound to play when TKTalkie is started
        [startup=STARTUP.WAV]
        

loop
The background (chatter) file. This file starts AFTER the startup file, then will continuously loop while TKTalkie is running.


        # chatter loop settings
        [loop=CHATTER.WAV]
        

NOTE: The backgound loop will be silenced while you are speaking (but will continue running)

loop_gain
This is the sound level of the loop while it is playing. This should be set to a minimal level so that it is heard but not overpowering.


        # 0 to 32767, 1 is pass-thru, below 1 attenuates signal
        [loop_gain=7]
        

silence_time
The amount of time (in milliseconds…or thousandths of a second) to wait to make sure you are finished talking before playing an effect (static burst or mic click effect, etc.)


        # VOICE ACTIVATION SETTINGS
        [silence_time=350]
        

voice_start (formerly VOL_THRESHOLD_TRIGGER)
This is the input level received from the microphone that will trigger the Voice Activation when you begin talking.


        # valid values are any decimal value between 0.00 and 1.00
        [voice_start=0.07]
        

**NOTE"": You can use the new Calibration Wizard via the serial interface to help set this level

voice_stop (formerly VOL_THRESHOLD_MIN)
The input level received from the microphone that indicates you are finished talking.

[voice_stop=0.02]
        

NOTE: You can use the new Calibration Wizard via the serial interface to help set this level

The following entries are for using the PTT (Push-to-Talk) function

button_pin
This setting tells TKTalkie which pin on the Teensy your PTT button is connected to.


        # PTT (Push-To-Talk) SETTINGS
        [button_pin=2]
        

button_click
The sound to play when the PTT button is pushed (before you start talking.) When the button is released, a random sound will be played.

[button_click=BUTTON.WAV]
        

button_gain
The output level of the button sound.


        # 0 to 32767, 1 is pass-thru, below 1 attenuates signal
        [button_gain=1]
        

input
This setting specifies which voice input will be used, the microphone input or the line-in input. Default is microphone.


        # MICROPHONE/LINE-IN SETTINGS
        # input settings (0 = microphone, 1 = line-in)
        [input=0]
        

mic_gain
The voice input level.


        # 0 to 63
        [mic_gain=15]
        

NOTE: If you are experiencing feedback, try adjusting the mic_gain setting first.

effects_gain
This sets the output level of sound effects.


        # SOUND EFFECTS (STATIC BURSTS, ETC.)
        # 0 to 32767, 1 is pass-thru, below 1 attenuates signal
        [effects_gain=5]
        

eq
Specify the equalizer type to use.


        # EQUALIZER SETTINGS
        # 0 = flat (none, 1 = parametric, 2 = bass/treble, 3 = graphic
        [eq=3]
        

eq_bands
Depending upon they type of equalizer selected, specify the settings for each band. Bands are comma separated and valid decimal values from -1.00 to 1.00.


        # for parametric/graphic = 5 bands, for bass/treble = 3 bands
        # bands are low to high: -1 (-11.75dB) to 1 (+12dB)
        [eq_bands=-1,0,1,0,-1]
        

voice_gain
Set the voice output level.


        # VOICE SETTINGS
        # 0 to 32767, 1 is pass-thru, below 1 attenuates signal
        [voice_gain=1]
        

bitcrushers
There are two bitcrushers to process the voice input and make it sound a little more tinny and robotic as if it is coming through a radio. These are comma separated values. Valid values for bits are 1 to 16, and valid values for rate are from 1 to 44100.


        # BITCRUSHER SETTINGS - VOCAL EFFECTS
        # Format = bits1,rate1,bits2,rate2
        # Set to 16,41000,16,41000 to just pass-thru (disable)
        [bitcrushers=12,16384,10,10240]
        

NOTE: You may need to disable these if using other voice processers such as a voice changer with TKTalkie.

noise_gain
While talking, pink noise is played behind your voice to help simulate radio communications. This setting sets the noise level. Set to 0 to disable.


        # PINK NOISE GENERATOR
        # 0 to 32767, 1 is pass-thru, below 1 attenuates signal
        [noise_gain=1]
        

debug
Turns the debug setting on or off. Default is off. When on, messages during program operation will be displayed to the serial interface. This can be useful when testing configuration settings.


        # Turn debug on or off.  Valid values are 1 (on) or 0 (off.)
        debug=0
        

Using the Serial Interface

There are now three ways to change configuration settings:

This version of the software allows you to change configuration settings, save configuration files and load configuration files via a serial interface. The Arduino IDE has a built-in serial monitor that can be used for this, or you can connect via a terminal program at 57600 baud.

When making live changes, use the following format (NOTE that you do not use brackets, [ENTER] means press the ENTER key):


        setting_key=new_value [ENTER]
        

For example, if you wanted to lower the volume:


        volume=.4
        

Or maybe you want to adjust the line-in setting:


        linein=6
        

The following commands are also available (type help at any time to see them):


        backup           Quick backup of in-memory settings to SETTINGS.BAK
        save             Saves the current in-memory configuration to the default TKCONFIG.TXT file
        load             Loads the configuration values from the default TKCONFIG.TXT file
        save=filename    Saves the current in-memory configuration to the specified file
        load=filename    Loads the configuration values in the specified file
        files            Displays a list of all files on the SD card
        calibrate        Starts the calibration wizard
        settings         Displays the current settings
        help             Displays the help screen
        play=filename    Plays the specified .WAV file (use full filename)
        

NOTE: Changes take effect immediately. However, you must use one of the save commands or they will be LOST when the device restarts.

This is a great way to allow you to tweak and test settings for your particular application of the TKTalkie system.

Example Config File

At the time of this writing, this is the config I am using with my TKTalkie.

I found this setup works great for me and lets me get really good volume without feedback.

        # Set overall output to about half
        [volume=0.5000]
        # Line-In level. Valid values are 0 to 15
        [linein=7]
        # Line-Out level output. Valid values are 13 to 31
        [lineout=27]
        # Plays when TKTalkie starts up
        [startup=STARTUP.WAV]
        # Background loop
        [loop=CHATTER.WAV]
        # Background loop volume
        [loop_gain=0.010]
        # Voice channel gain on the mixer
        [voice_gain=0.3500]
        # Trigger level to turn on speaker when I start talking
        [voice_start=0.1700]
        # Limit to turn off the speaker when I stop talking
        [voice_stop=0.020]
        # Amount of time to wait (in milliseconds) before playing a sound effect
        [silence_time=350]
        # Not using a PTT
        [button_pin=0]
        # Sound to play when PTT is pressed
        [button_click=TKT_CLK3.WAV]
        # Button sound effect volume
        [button_gain=1.0000]
        # 1 = Microphone, 0 = Line-In
        [input=0]
        # Not used since I'm using Line-In
        [mic_gain=15]
        # Volume level of the sound effects on the mixer
        [effects_gain=0.2500]
        # Equalizer: 0 = off, 1 = Bass/Treble, 2 = Parametric, 3 = Graphic
        [eq=3]
        # 5-Band equalizer since I'm using graphic. Values are -1 to 1.
        [eq_bands=-0.75,0.00,-1.00,0.00,-1.00]
        # Gives the voice a tin-can sound
        [bitcrushers=16,41000,16,8096]
        # Background noise level for when I'm talking
        [noise_gain=0.1500]
        # This is only used when using a serial interface to program in real-time
        [debug=0]