Rough 'n Ready Audio Frequency extraction with a PIC


Results 1 to 34 of 34

Threaded View

  1. #1
    Join Date
    Mar 2009
    Posts
    653

    Default Rough 'n Ready Audio Frequency extraction with a PIC

    I've read a fair bit about this, but I'd like a bit of guidance & a few concepts confirmed or corrected!

    I'd like to be able to establish which note is being played on a guitar. I'm only interested from the 'D' string upwards.

    The D string frequency is 146.8Hz - which means that one cycle takes 6.81ms. Ok, that's the bit I'm sure about - the rests is fuzzy !

    I don't want a lot of complication in the supporting electronics -so ideally I'd like to use the internal oscillator (yes, I know it's rough & ready & not particularly accurate, but I'm not going to be using this to tune the guitar).

    I'd thought about using the comparator & basically counting how many cycles have been received in a given time frame - I'd like the time frame to be as low as possible.

    Re PICs & floating point - I believe PICs don't do FP - but I'm not sure of the impact to my situation....I'm figuring that the PIC dispenses with the decimal places & just give the integer? (does it round up or just ignore them all together?)

    I've created a table to show the lowest possible sampling time frame to be able to get a unique integer for each note, which for this situation works out at about 100ms...

    (btw: I didn't know how to format the Excel cells to look ok on here, so I used the code tags - which seems to work ok!)

    Code:
    Note	Freq		Cycles in 100mS
    D	146.83		14.683
    D#	155.56		15.556
    E	164.81		16.481
    F	174.61		17.461
    F#	185		18.5
    G	196		19.6
    G#	207.65		20.765
    A	220		22
    A#	233.08		23.308
    B	246.94		24.694
    C	261.63		26.163
    C#	277.18		27.718
    D	293.67		29.367
    D#	311.13		31.113
    E	329.63		32.963
    F	349.23		34.923
    F#	369.99		36.999
    G	392		39.2
    G#	415.3		41.53
    A	440		44
    A#	466.16		46.616
    B	493.88		49.388
    C5	523.25		52.325
    C#	554.37		55.437
    D	587.33		58.733
    D#	622.25		62.225
    E	659.26		65.926
    F	698.46		69.846
    F#	739.99		73.999
    G	783.99		78.399
    E	329.63		32.963
    F	349.23		34.923
    F#	369.99		36.999
    G	392		39.2
    G#	415.3		41.53
    A	440		44
    A#	466.16		46.616
    B	493.88		49.388
    C5	523.25		52.325
    C#	554.37		55.437
    D	587.33		58.733
    D#	622.25		62.225
    E	659.26		65.926
    F	698.46		69.846
    F#	739.99		73.999
    G	783.99		78.399
    G#	830.61		83.061
    A	880		88
    A#	932.33		93.233
    B	987.77		98.777
    C	1046.5		104.65
    C#	1108.74		110.874
    D	1174.66		117.466
    D#	1244.5		124.45
    E	1318.52		131.852
    As you can see, by using 100mS, the sample period 'integer' is unique (ie for the number of complete cycles completed).

    It should then be a case of a simple Look up Table to work out which note is being played, eg...

    If Sample count = 14 then D note is being played.
    if Sample count = 22 the 'A' note is being played.

    And so on.

    So at this embryonic stage...

    Is my line of thought correct?

    Is there any clever workaround available meaning I could bring that 100mS sampling period down?
    Last edited by HankMcSpank; - 7th March 2010 at 11:15.

Similar Threads

  1. Measuring change of frequency with PIC
    By Aussie in forum mel PIC BASIC Pro
    Replies: 5
    Last Post: - 19th July 2007, 01:47
  2. PIC Audio
    By toofastdave in forum mel PIC BASIC Pro
    Replies: 28
    Last Post: - 27th June 2007, 13:49
  3. Pic driven digital audio delay
    By skimask in forum Off Topic
    Replies: 12
    Last Post: - 19th April 2007, 20:42
  4. Audio Encoding and playback in a PIC
    By Rob in forum mel PIC BASIC Pro
    Replies: 8
    Last Post: - 24th March 2005, 08:56
  5. Frequency Counter using PIC and PicBasic
    By PICtron in forum mel PIC BASIC Pro
    Replies: 31
    Last Post: - 28th January 2005, 06:20

Members who have read this thread : 0

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts