Vocals
Getting Started
This guide describes how to create a rock band vocal bot. A solderless version is available from the shops.
Tools you will need:
- A Soldering Iron & Solder
- A Multimeter
- Wirecutters
- A PIC Programmer suitable for a PIC16F877A chip
Components Used:
- 1 x PIC16F877A
- 4 x 1k Resistors
- 1 x 20 Ohm Resistor
- 1 x 2.5mm Stereo Headphone Jack
- 1 x 8Mhz Crystal
- 2 x 22pf Capacitors (Ceramic disc)
How the Vocals work
The vocals appear to use pitch recognition software/technology, which I have concluded both by experience and browsing the web. The main fact is you don't have to sing the words, you can just hum (or emmit general noise) at the correct pitch (note).
The Mic
The rock band mic is a standard USB Microphone made by logitech. You can sing to rock band via almost any USB mic it claims, however wouldn't it be much easier if you didn't need to rip apart a mic, or tape a speaker to it? Well it is that easy, as you can also sing through the 360 headset the vocal bot simply plays the correct tone via the 360 headset port using a 2.5mm stereo jack.
The PIC16F877A
PIC Chips are programmable microcontrollers made by a company called Microchip. A PIC16F877A is a complex 40 pin chip which in this project requires an 8 Mhz crystal for accuracy. A simpler chip can be used, but at the time this is all I had spare.
Microchip provide an IDE for writing the code for these chips (which I used for the Advanced USB Interface) but for the drums I used MikroBasic (the demo version is sufficient).
To program them a PIC Programmer is required, Microchip supply them as do the Mikroelectronica (the company that makes MikroBasic).
How to simulate the Vocals
The rockband vocals can cover a range of 45 frequencies, however you only have to sing the right note, not the right octave.
I programmed the chip to produce all 45 notes based on the inputs on PORTD, it used timings in micro seconds to turn PORTC on and off and intervals that corresponded with the note frequencies. The timings (and therefore not pitches) were then fine tuned using a guitar tuner.
The USB board controls PORTD telling it what note to play.
After experimentation I found a fixed range of notes worked best, so the software translates any notes that fall outside this range into the acceptable ones. This gave better accuracy.
Connecting Up
The tip and shell are audio-in lines, the middle and shell are for audio out (the ear piece) so, connet the output wires to shell and tip.

The shell connector will be the long one with the whole it and the grips, but you should use a multi meter to check which on the tip is. Check both to be sure.
Circuit Diagram
All schematics and PCB layouts are done using the free version of Eagle and the files are available for download at the bottom of this page.

JP1 is the output to the mic plug
R1, 3, 4 and 5 are 1K Resistor
R2 is a 20 Ohm Resistor
C1 and 2 are 22pf Capacitors
Q1 is an 8Mhz Crystal
CON1 is the header to the usb board carrying data and power.
PIC Code
Below is the MikroBasic Code:
program LED_Blinking
dim text as char[20]
dim i as longint
dim n as integer
main:
ANSEL = 0 ANSELH = 0
PORTC = 0 TRISD = 255
TRISC = 0 while TRUE
SELECT CASE PortD
Case 1
PORTC = not PORTC
Delay_us(12084)
Case 2
PORTC = not PORTC
Delay_us(11403)
Case 3
PORTC = not PORTC
Delay_us(10761)
Case 4
PORTC = not PORTC
Delay_us(10154)
Case 5
PORTC = not PORTC
Delay_us(9581)
Case 6
PORTC = not PORTC
Delay_us(9041)
Case 7
PORTC = not PORTC
Delay_us(8531)
Case 8
PORTC = not PORTC
Delay_us(8049)
Case 9
PORTC = not PORTC
Delay_us(7595)
Case 10
PORTC = not PORTC
Delay_us(7166)
Case 11
PORTC = not PORTC
Delay_us(6761)
Case 12
PORTC = not PORTC
Delay_us(6378)
Case 13
PORTC = not PORTC
Delay_us(6018)
Case 14
PORTC = not PORTC
Delay_us(5677)
Case 15
PORTC = not PORTC
Delay_us(5355)
Case 16
PORTC = not PORTC
Delay_us(5052)
Case 17
PORTC = not PORTC
Delay_us(4766)
Case 18
PORTC = not PORTC
Delay_us(4495)
Case 19
PORTC = not PORTC
Delay_us(4230)
Case 20
PORTC = not PORTC
Delay_us(4000)
Case 21
PORTC = not PORTC
Delay_us(3772)
Case 22
PORTC = not PORTC
Delay_us(3558)
Case 23
PORTC = not PORTC
Delay_us(3355)
Case 24
PORTC = not PORTC
Delay_us(3164)
Case 25
PORTC = not PORTC
Delay_us(2984)
Case 26
PORTC = not PORTC
Delay_us(2813)
Case 27
PORTC = not PORTC
Delay_us(2653)
Case 28
PORTC = not PORTC
Delay_us(2501)
Case 29
PORTC = not PORTC
Delay_us(2358)
Case 30
PORTC = not PORTC
Delay_us(2223)
Case 31
PORTC = not PORTC
Delay_us(2095)
Case 32
PORTC = not PORTC
Delay_us(1975)
Case 33
PORTC = not PORTC
Delay_us(1861)
Case 34
PORTC = not PORTC
Delay_us(1754)
Case 35
PORTC = not PORTC
Delay_us(1653)
Case 36
PORTC = not PORTC
Delay_us(1557)
Case 37
PORTC = not PORTC
Delay_us(1467)
Case 38
PORTC = not PORTC
Delay_us(1382)
Case 39
PORTC = not PORTC
Delay_us(1301)
Case 40
PORTC = not PORTC
Delay_us(1226)
Case 41
PORTC = not PORTC
Delay_us(1154)
Case 42
PORTC = not PORTC
Delay_us(1086)
Case 43
PORTC = not PORTC
Delay_us(1023)
Case 44
PORTC = not PORTC
Delay_us(962)
Case 45
PORTC = not PORTC
Delay_us(906)
END SELECT
wend
end.