root/ocaml-remix/trunk/tone.ml

Revision 494, 0.8 kB (checked in by shans, 1 year ago)

Instruments created from simple wave functions (for now - from
parameterised sound functions soon!)

Line 
1 type register = int;;
2 type tone = float;;
3
4 let c = 0;;
5 let d = 2;;
6 let e = 4;;
7 let f = 5;;
8 let g = 7;;
9 let a = 9;;
10 let b = 11;;
11
12 (* a is 440 Hz.  Circle of 5ths gives 3/2 for each 5th above a. So:
13  *
14  * c   3^9/2^15  3^9/2^14
15  * c#  3^4/2^7   3^4/2^6
16  * d  3^11/2^18 3^11/2^17
17  * d#  3^6/2^10  3^6/2^9
18  * e     3/2^2     3/2^1
19  * f   3^8/2^13  3^8/2^12
20  * f#  3^3/2^5   3^3/2^4
21  * g  3^10/2^16
22  * g#  3^5/2^8
23  * a   3^0/2^0 (3^12/2^19)
24  * a#  3^7/2^11
25  * b   3^2/2^3
26  *
27  * HOWEVER, we don't actually use pure tempering anymore, but approximations.
28  * In fact, we use equal exponential scaling, i.e. a*(s^12) = 2a, or
29  * s = 2^(1/12).  We'll keep a at 440 Hz.  So for a given v and reg we have
30  * 440*2^(1/12*(v-9+12*reg))
31  *)
32 let note v reg =
33   let sfactor = float_of_int (v - 9 + 12 * reg) /. 12. in
34   440. *. (2. ** sfactor);;
Note: See TracBrowser for help on using the browser.