Go Down

Topic: Better tone (Read 1 time) previous topic - next topic

Mori

Using the note/pitches/tone "library" I noticed that it did not go down to C0 then I noticed that it also was not very accurate for some of the notes so I decided to make it a wee bit better.

Code: [Select]

#define c0 16.35
#define cs0 17.32
#define d0 18.35
#define ds0 19.45
#define e0 20.6
#define f0 21.83
#define fs0 23.12
#define g0 24.5
#define gs0 25.96
#define a0 27.5
#define as0 29.14
#define b0 30.87
#define c1 32.7
#define cs1 34.65
#define d1 36.71
#define ds1 38.89
#define e1 41.2
#define f1 43.65
#define fs1 46.25
#define g1 49
#define gs1 51.91
#define a1 55
#define as1 58.27
#define b1 61.74
#define c2 65.41
#define cs2 69.3
#define d2 73.42
#define ds2 77.78
#define e2 82.41
#define f2 87.31
#define fs2 92.5
#define g2 98
#define gs2 103.83
#define a2 110
#define as2 116.54
#define b2 123.47
#define c3 130.81
#define cs3 138.59
#define d3 146.83
#define ds3 155.56
#define e3 164.81
#define f3 174.61
#define fs3 185
#define g3 196
#define gs3 207.65
#define a3 220
#define as3 233.08
#define b3 246.94
#define c4 261.63
#define cs4 277.18
#define d4 293.66
#define ds4 311.13
#define e4 329.63
#define f4 349.23
#define fs4 369.99
#define g4 392
#define gs4 415.3
#define a4 440
#define as4 466.16
#define b4 493.88
#define c5 523.25
#define cs5 554.37
#define d5 587.33
#define ds5 622.25
#define e5 659.26
#define f5 698.46
#define fs5 739.99
#define g5 783.99
#define gs5 830.61
#define a5 880
#define as5 932.33
#define b5 987.77
#define c6 1046.5
#define cs6 1108.73
#define d6 1174.66
#define ds6 1244.51
#define e6 1318.51
#define f6 1396.91
#define fs6 1479.98
#define g6 1567.98
#define gs6 1661.22
#define a6 1760
#define as6 1864.66
#define b6 1975.53
#define c7 2093
#define cs7 2217.46
#define d7 2349.32
#define ds7 2489.02
#define e7 2637.02
#define f7 2793.83
#define fs7 2959.96
#define g7 3135.96
#define gs7 3322.44
#define a7 3520
#define as7 3729.31
#define b7 3951.07
#define c8 4186.01
#define cs8 4434.92
#define d8 4698.64
#define ds8 4978.03


And yes I know not all of these go directly in to 16 or 8 Mhz but it does make it slightly more accurate.
Information found here http://www.phy.mtu.edu/~suits/notefreqs.html
And this is not meant to impress, just help with simple tones.
Also helps if you want to build a guitar/bass/stringed instrument tuner.
Memento Mori
------------
Sola Christus

The Christian Hacker:
https://www.facebook.com/groups/141258275980190/

Mori

Hmm guess I need to get my audio equipment checked then. odd
Memento Mori
------------
Sola Christus

The Christian Hacker:
https://www.facebook.com/groups/141258275980190/

Mori

oh ok I see now. well still helps if someone wants to make a guitar tuner.
Memento Mori
------------
Sola Christus

The Christian Hacker:
https://www.facebook.com/groups/141258275980190/

sciguy

Although this isn't useful for the actual tone library, thanks for amking this.

I was planning on doing this anyway, I have a project where I wrote all the timer management code for playing tones myself, so I can modify it for more precise freq's.
Soundcloud page: http://soundcloud.com/beefinator-2
Youtube channel: http://www.youtube.com/user/beefinator14
Old soundcloud page (ran out o

Mori

That would be a nice use for this.
Memento Mori
------------
Sola Christus

The Christian Hacker:
https://www.facebook.com/groups/141258275980190/

wb8nbs


The tone() function takes only an integer argument for frequency.  
So, by definition/design it will never be capable of really accurate musical notes.
Except for those notes that fall on integer values. Like most "A"s and a few "G"s.
(Assuming modern tuning and temperament.)


Suggestion:
You can set the tones ten times the freq you need, then use an external divide by ten chip to get tenth of a Hz resolution.
I used this in a CTSS tone generator.  Don Lancaster's CMOS Cookbook describes how to use a five stage walking ring counter as a divide by ten and implements a simple A/D resistor ladder to get a more sine looking waveform.  The circuit needs a 4018 CMOS chip and four resistors. 

See some waveforms in this Flickr set: http://www.flickr.com/photos/wb8nbs/sets/72157625989821423/
He who dies with the most software wins.

robtillaart


good idea wb8bs!

in fact any divider would do - I would prefer multiple  divide by 2 dividers - as it would make it very easy to transpose a song ;)
The table would just shift 12 places..

That said, I sometimes wonder why using a whole table with 8*12 entries as 12 highest notes would do. Another octave is just dividing by a power of 2 

  freq = NOTE >> (7-octave);

OK it consumes a bit more CPU time, but not that much. would free up 7 * 12 ints (floats) = 168 or 336 bytes. (8-16% of the free RAM) OK put the table in flash ..

Rob Tillaart

Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -
(Please do not PM for private consultancy)

wb8nbs

This circuit http://electro-music.com/forum/phpbb-files/sine_wave_generator_156.gif is the same as the CMOS Cookbooks 5 stage converter except Lancaster specs 22k for R1 and R3, and 36k for R2 and R4.  The Cookbook also shows a version with a divide by 8 configuration and 3 resistors but the output is a little rougher.  Either is a lot better than a square wave.
He who dies with the most software wins.

sciguy

Wow, I was not being entirely smart.

I had been using a table of the 12 LOWEST frequencies, and multiplying by powers of 2, which meant that the imprecision in the integer note frequencies was only multiplied in higher octaves.  So I thought I would use an array of all the note frequencies, every octave, to solve the tuning issue.
Never occurred to me to use the highest freq's and divide.
:smiley-roll-blue:
Soundcloud page: http://soundcloud.com/beefinator-2
Youtube channel: http://www.youtube.com/user/beefinator14
Old soundcloud page (ran out o

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy