-
Notifications
You must be signed in to change notification settings - Fork 0
/
guitar.py
36 lines (30 loc) · 923 Bytes
/
guitar.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
import random
import math
import time
import Quantum_randomNum
SAMPLE_RATE = 44100
DECAY_FACTOR = 0.996
class GuitarString:
def __init__(self, frequency):
if frequency <= 0:
raise ValueError("Frequency must be positive.")
self.frequency = frequency
self.tic_time = 0
self.queue = [0] * int(round(SAMPLE_RATE / frequency))
def pluck(self):
random.seed(time.time())
for i in range(len(self.queue)):
self.queue[i] = random.uniform(-0.5, 0.5)
def tic(self):
first = self.queue[0]
self.queue = self.queue[1:]
second = self.queue[0]
new_term = DECAY_FACTOR * 0.5 * (first + second)
self.queue.append(new_term)
self.tic_time += 1
def sample(self):
return self.queue[0]
def get_time(self):
return self.tic_time
def get_frequency(self):
return self.frequency