|
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);; |
|---|