# play a note of a given frequency and duration via the PC sound card
# needs Python module tkSnack developed at KTH in Stockholm, Sweden
# free download: snack229-py.zip
# from: http://www.speech.kth.se/snack/
# on my system I copied tkSnack.py to D:\Python24\Lib and the folder snacklib to D:\Python24\tcl
# tested with Python24 vegaseat 28oct2005
"""
Frequency Note Table:
Frequency Note MIDI#
27.5000 A0 21
29.1352 A#0 22
30.8677 B0 23
32.7032 C1 24
34.6478 C#1 25 # C#1 = C1 * 1.059463094
36.7081 D1 26 # 1.059463094 = 12th root of 2
38.8909 D#1 27
41.2034 E1 28
43.6535 F1 29
46.2493 F#1 30
48.9994 G1 31
51.9131 G#1 32
55.0000 A1 33
58.2705 A#1 34
61.7354 B1 35
65.4064 C2 36
69.2957 C#2 37
73.4162 D2 38
77.7817 D#2 39
82.4069 E2 40
87.3071 F2 41
92.4986 F#2 42
97.9989 G2 43
103.8262 G#2 44
110.0000 A2 45
116.5409 A#2 46
123.4708 B2 47
130.8128 C3 48
138.5913 C#3 49
146.8324 D3 50
155.5635 D#3 51
164.8138 E3 52
174.6141 F3 53
184.9972 F#3 54
195.9977 G3 55
207.6523 G#3 56
220.0000 A3 57
233.0819 A#3 58
246.9417 B3 59
261.6256 C4 60
277.1826 C#4 61
293.6648 D4 62
311.1270 D#4 63
329.6276 E4 64
349.2282 F4 65
369.9944 F#4 66
391.9954 G4 67
415.3047 G#4 68
440.0000 A4 69
466.1638 A#4 70
493.8833 B4 71
523.2511 C5 72
554.3653 C#5 73
587.3295 D5 74
622.2540 D#5 75
659.2551 E5 76
698.4565 F5 77
739.9888 F#5 78
783.9909 G5 79
830.6094 G#5 80
880.0000 A5 81
932.3275 A#5 82
987.7666 B5 83
1046.5023 C6 84
1108.7305 C#6 85
1174.6591 D6 86
1244.5079 D#6 87
1318.5102 E6 88
1396.9129 F6 89
1479.9777 F#6 90
1567.9817 G6 91
1661.2188 G#6 92
1760.0000 A6 93
1864.6550 A#6 94
1975.5332 B6 95
2093.0045 C7 96
2217.4610 C#7 97
2349.3181 D7 98
2489.0159 D#7 99
2637.0205 E7 100
2793.8259 F7 101
2959.9554 F#7 102
3135.9635 G7 103
3322.4376 G#7 104
3520.0000 A7 105
3729.3101 A#7 106
3951.0664 B7 107
4186.0090 C8 108
"""
import Tkinter
import tkSnack
def setVolume(volume=50):
"""set the volume of the sound system"""
if volume > 100:
volume = 100
elif volume < 0:
volume = 0
tkSnack.audio.play_gain(volume)
def playNote(freq, duration):
"""play a note of freq (hertz) for duration (seconds)"""
snd = tkSnack.Sound()
filt = tkSnack.Filter('generator', freq, 30000, 0.0, 'sine', int(11500*duration))
snd.stop()
snd.play(filter=filt, blocking=1)
def soundStop():
"""stop the sound the hard way"""
try:
root = root.destroy()
filt = None
except:
pass
root = Tkinter.Tk()
# have to initialize the sound system, required!!
tkSnack.initializeSnack(root)
# set the volume of the sound system (0 to 100%)
setVolume(30)
# play a note of requency 440 hertz (A4) for a duration of 5 seconds
playNote(440, 5)
# play a note of requency 261.6 hertz (C4) for a duration of 5 seconds
playNote(261.6, 5)
# optional
soundStop()
root.withdraw()