-
Notifications
You must be signed in to change notification settings - Fork 0
/
sounds.py
106 lines (79 loc) · 2.33 KB
/
sounds.py
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# -*- coding: utf-8 -*-
import numpy as np
import scipy.signal as scs
"""
Moduł z definicją dźwięków.
"""
print('Modul o nazwie: ' + __name__ + ' zostal wczytany.')
def sound_sin(f, t, a, d):
"""
Funkcja tworząca falę sinusoidalną.
Argumenty:
* f - częstotliwość dźwięku
* t - czas trwania dźwięku
* a - czas trwania attack
* d - czas trwania decay
"""
# tworzymy falę
f_s = 44100
t0 = np.linspace(0, t, t * f_s)
wave = np.sin(2 * np.pi * f * t0)
# tworzymy attack
A = np.floor(a * t * f_s)
attack = np.linspace(0, 1, A)
# tworzymy decay
D = np.floor(d * t * f_s)
decay = np.linspace(1, 0, D)
# tworzymy sustain
sustain = np.ones(t * f_s - A - D)
# złączamy dzwięki
sound = np.hstack((attack, sustain, decay)) * wave
return sound
def sound_sawtooth(f, t, a, d):
"""
Funkcja tworząca falę trójkątną (piła).
Argumenty:
* f - częstotliwość dźwięku
* t - czas trwania dźwięku
* a - czas trwania attack
* d - czas trwania decay
"""
# tworzymy falę
f_s = 44100
t0 = np.linspace(0, t, t * f_s)
wave = scs.sawtooth(2 * np.pi * f * t0)
# tworzymy attack
A = np.floor(a * t * f_s)
attack = np.linspace(0, 1, A)
# tworzymy decay
D = np.floor(d * t * f_s)
decay = np.linspace(1, 0, D)
# tworzymy sustain
sustain = np.ones(t * f_s - A - D)
# złączamy dzwięki
sound = np.hstack((attack, sustain, decay)) * wave
return sound
def sound_rectangle(f, t, a, d):
"""
Funkcja tworząca falę prostokątną.
Argumenty:
* f - częstotliwość dźwięku
* t - czas trwania dźwięku
* a - czas trwania attack
* d - czas trwania decay
"""
# tworzymy falę
f_s = 44100
t0 = np.linspace(0, t, t * f_s)
wave = np.sign(np.sin(2 * np.pi * f * t0))
# tworzymy attack
A = np.floor(a * t * f_s)
attack = np.linspace(0, 1, A)
# tworzymy decay
D = np.floor(d * t * f_s)
decay = np.linspace(1, 0, D)
# tworzymy sustain
sustain = np.ones(t * f_s - A - D)
# złączamy dzwięki
sound = np.hstack((attack, sustain, decay)) * wave
return sound