-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathdtmfrand.ny
67 lines (59 loc) · 2.34 KB
/
dtmfrand.ny
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
;nyquist plug-in
;version 1
;type generate
;name "DTMF (random)..."
;action "Generating random DTMF..."
;info "Random Dual Tone Multi-Frequency generator\nby David R. Sky, Dominic Mazzoni, Roger Dannenberg, W. Borgert\n\nEnter a string consisting of 0..9, A..D, *, #, a..z\n1209 1336 1477 1633\n697 1 2 3 A\n770 4 5 6 B\n852 7 8 9 C\n941 * 0 # D"
; make sure above info line is not word wrapped
;control tones "number of DTMF tones" int "" 20 1 120
;control mil "Include military DTMF tones A-D" int "0=no 1=yes" 0 0 1
;control sil "Include silent intervals" int "0=no 1=yes" 0 0 1
;control volume "Volume" real "linear" 0.3 0.001 1.000
;control tl "Tone length" real "seconds" 0.100 0.001 1.000
;control twist "High to low tone ratio" real "db" 0.0 0.0 4.0
;control sl "Post silence length" real "seconds" 0.100 0.000 1.000
; Random DTMF (Dual Tone Multi-Frequency) generator
; by David R. Sky, Dominic Mazzoni, Roger B. Dannenberg, W. Borgert
; 2004-09, 2005-04
; January 7, 2006 made randomized
; includes the 4 military 'numbers'
; A B C D, to the right of the numbers
; but since this plug-in generates random numbers
; to select which tones to generate,
; A-D are 12-15
; Released under terms of the GNU General Public License version 2
; http://www.gnu.org/copyleft/gpl.html
; Twist is the ratio of the high to low tone, in db
; used in real telephone applications.
; regular DTMF tones: 12
; including military DTMF: 16
(setf limit (if (= mil 0) 12 16))
(defun random-dtmf (key volume tl twist sl)
(setf low (if (member key
'(1 2 3 12)) 697
(if (member key
'(4 5 6 13)) 770
(if (member key
'(7 8 9 14)) 852
(if (member key
'(0 10 11 15)) 941 0)))))
(setf high (if (member key
'(1 4 7 10)) 1209
(if (member key
'(2 5 8 0)) 1336
(if (member key
'(3 6 9 11)) 1477
(if (member key
'(12 13 14 15)) 1633 0)))))
; limit is 12 for regular DTMF, 16 including military
; so if random number>limit, generate silence
(setf volume (if (< key limit) volume 0.0))
(seq
(mult volume
(pwl 0.002 1 (- tl 0.002) 1 tl)
(sim
(osc (hz-to-step high) tl)
(loud (- 0 twist) (osc (hz-to-step low) tl))))
(s-rest sl)))
(seqrep (i tones)
(random-dtmf (random (+ limit sil)) volume tl twist sl))