Pitch shifter makes your band sing higher

[Markus Gritsch] tipped us off about this little module he built to shift the pitch of audio playback. It uses a PIC 24FJ along with a couple of LM386 amplifier chips to manage the input and output signals. At the push of a button, audio being fed through the device can be modulated to a different key without changing the playback rate. Here it’s being used with a iPod but because this device just sits between an audio source and a signal input we wonder if you can have some fun on the cellphone with this circuit?

Check out the video after the break to hear it in action. We must compliment [Markus] on his layout. We haven’t seen the underside of that protoboard but he’s done a great job of fitting everything into a small area. You can find the schematic for the circuit by following the link at the top of this feature. He took a picture of his hand-drawn plans which saves him time from laying it out with something like KiCAD but still gives us the details that we love to see with your projects.

Comments

  1. lgroon says:

    this is sooo damn great. i have been searching for a very long time for a diy “whammy” footpedal substitute for my bass guitar. i think this is the solution. have i understood right, that it simply fills a buffer of 20ms and reads it at twice the rate than recording? i think this could be implemented using one of the atmega chips i have lying around.

  2. detectorgadget says:

    the pitch drop is nice.

  3. bty says:

    are you using ring modulation or phase vocoding to achieve the pitch shift ?

  4. bty says:

    ok nevermind, just read the article and he’s using a variable input samplerate and a fixed output samplerate.

  5. bty says:

    so technically it’s a resampler, not a pitch shifter.

  6. bty says:

    if it’s mean as an effect, adding delay should be peanuts.

  7. ehud42 says:

    I wonder if this could this be used to reduce stage feedback. Feedback typically occurs at a particular frequency, if the speakers were always outputting audio slightly shifted up, wouldn’t any feedback spin itself out of range and self dampen?

  8. wosser says:

    Good looking protoboard layout, no clutter at all. Very organised.

  9. biozz says:

    FINALLY i can stop spending billions in buying thoes chipmunk albums!

  10. Josh says:

    This may make Justin Beber bearable. lol

  11. o says:

    Couldn’t you use an audio frequency range single-sideband radio circuit to shift the pitch up?

    A single-sideband radio basically shifts the pitch of your voice into the MHz range, so I think it would work

  12. Hirudinea says:

    David Seville salutes you.

  13. MisterPG says:

    This rocks! I would buy one to toy with.

  14. qwerty says:

    @o: you don’t need a complete radio to get that effect, just send your voice into a double balanced mixer and a sinewave into its second input, then filter out the frequencies you don’t need at the output. Cost: about 15 bucks, or less if you can recycle some components.

  15. Markus Gritsch says:

    I have added two pictures showing the backside of the board, the battery holder and the foam rubber which lies between them. The interconnections are done using some insulated wire from an old relais, which is currently my preferred prototyping method:

    http://dangerousprototypes.com/forum/viewtopic.php?f=56&t=2003#p19687

  16. Kris says:

    I love it

    Will have to look at making one for my sound gear

  17. Miroslav says:

    @qwerty
    In regards to using a (double balanced) mixer, it’s not as straight forward as it might seem – simply said, what mixer does is based on it’s “non-linearity” – output is not a linear function of the input (as what you get from an amplifier where Out=K*Input), but rather a combination of different “exponents” (for example, OUT=K1*Input^2+K2*Input^3…).

    In an ideal case, and very close in a case of a good balanced mixer, that square component is (very) dominant.

    How does it help us and how does it screw things up?

    Let’s say we take two single frequencies as an input, f1 and f2. In a generic case (and I’m oversimplifying the math here, do your homework and google more), they are u1=U1*sin(f1) and u2=U2*sin(f2).

    When you run those two through a mixer, you get

    u = (u1+u2)^2 = u1^2 + 2*u1*u2 + u2^2
    (lets call them A + B + C)

    Voila! As we all know , sin(f1)*sin(f2) = 0.5(sin(f1-f2) + sin(f1+f2)), so mixer produces four components: two with double the original frequencies from A and C and two with f=f1-f2 and f=f1+f2.

    And that’s the beauty and curse of the mixer – we got our music shifted by f2, but at the same time, now we have a mish mash of all those products combined together. Here is an example:

    Our music signal is in the range 100Hz – 10kHz. We want to shift frequency by 1kHz. Running through a mixer, we end up with components

    A … all original frequencies with double the frequency (200Hz – 20kHz)
    C … pitch on double the shifting frequency (2kHz)
    B1… f1+f2 – shifted up by 1kHz (1100Hz – 11kHz) (this is what we wanted to get)
    B2… f1–f2 – 900Hz – 9kHz

    So, what did we get here?

    Problem 1: if f1 and f2 are too close to each other, products of the balancing are too close to filter them out, so you get products overlapping

    Problem 2: linear pitch shifting works only for relatively small shifts. We hear pitch as a chromatic (logarithmic) scale, where the same tone in higher octave is twice the frequency (tone C is 1046Hz, higher octave C is 2092Hz). If we shift all tones equally (let’s say by 500Hz), you get two new tones that are not octave from each other (1546 (tone G) and 2592 (tone D#))

    Not to say that [Markus]’ approach solves Problem 2, but it makes Problem 1 a bit less apparent 

    NOTE (again): above s VERY oversimplified. There is much more, if you really want to get to the bottom, Google is your friend!

  18. bty says:

    SSB modulation is not an option as explained by Miroslav above.

    Time stretching/Pitch shifting is usually done in the frequency domain by a phase vocoder.

    The resampling method used here has the problem that there is a small audible stretching effect.

  19. lgroon says:

    my implemention of this running on atmega48 using a simple r-2r dac is working, finally. im still having some trouble with the adc, but i hope to get this solved soon.

  20. crait says:

    Dammit! I was doing this!! GRRR… Gonna have stereo output so you can easily change one speaker and some other cool stuff.. :(

  21. Dr. DFTBA says:

    Can this be done with Arduino?

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Follow

Get every new post delivered to your Inbox.

Join 93,960 other followers