/
prediktor.py
114 lines (72 loc) · 1.8 KB
/
prediktor.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
107
108
109
110
111
112
#!/usr/bin/python
#
# stjepan.henc@fer.hr
# 25.11.2013
#
import wave, struct, math, sys, time
import matplotlib.pylab as pl
import scipy
import scipy.fftpack
import pylab
import scipy.stats
import numpy
#audio = wave.open("ispitivanje.wav", mode="r")
audio = wave.open("smallest.wav", mode="r")
length = audio.getnframes()
sample_rate = audio.getframerate()
desni = [0] * length
proba = [0] * length
# read & preprocess the data from the file
for i in range(0, length):
data = audio.readframes(1)
tmp = struct.unpack("<hh", data)
#ljevi[i] = tmp[0]
desni[i] = tmp[1]
stanje = False # je li zvucno ili tiho
brojaci = []
tisina_int = []
zvuk_int = []
last = 0
#for k in range (5, 20):
treshold = 20
frame = 50 # dobiveni brute-force optimizacijom
brojac = 0
for i in range(frame, length):
bul = True
for j in range(0, frame - 1):
if abs(desni[i - j]) > treshold:
bul = False
if bul == True and stanje == False: # onda treba promijeniti stanje
stanje = True
proba[i - frame] = 32000
brojac = brojac + 1
tisina_int.append(1.0 * (i - frame - last) / sample_rate)
last = i - frame
if bul == False and stanje == True: # onda treba promijeniti stanje
stanje = False
proba[i] = -32000
brojac = brojac + 1
zvuk_int.append(1.0 * (i - last) / sample_rate)
last = i
brojaci.append(brojac)
audio.close()
print(brojac)
#arr = numpy.array([tisina_int, zvuk_int])
tisina_sred = numpy.mean(tisina_int)
print(tisina_sred)
tisina_dev = numpy.std(tisina_int)
print(tisina_dev)
zvuk_sred = numpy.mean(zvuk_int)
print(zvuk_sred)
zvuk_dev = numpy.std(zvuk_int)
print(zvuk_dev)
brojevi = pl.linspace(5, 19, 15)
time = pl.linspace(1, length, length)
pl.subplot(211)
pl.plot(time, desni)
pl.subplot(212)
pl.plot(time, proba)
pl.show()
#TODO
# odvajanje intervala
# aproksimacija sinusoide