コード例 #1
0
ファイル: plotfft.py プロジェクト: vonum/SoundRecognition
import scipy
from scipy.io.wavfile import read
import matplotlib.pyplot as plt
import numpy as np
import sys
from utils import calculatefft

fs, data = read(sys.argv[1], mmap=False)

amp, frq = calculatefft(fs, data)

plt.xlabel('frequency')
plt.ylabel('amplitude')
plt.plot(frq, amp)
plt.show()

freqs = np.array(np.exp(np.linspace(np.log(264), np.log(1056), 15)))
round_freqs = np.round(freqs, 0)
amps = amp[round_freqs.astype(np.int64)]

test = np.array([264, 297, 330, 352, 396, 440, 495, 528, 594, 660, 704, 792, 880, 990, 1056])

#T = n/float(fs)

#frq = k/T
T = len(data)/float(fs)
k = test * T

print k
print np.amax(amp)
print np.where(amp == np.amax(amp))
コード例 #2
0
def prepare_harder():

	freqs = np.array(np.exp(np.linspace(np.log(264), np.log(2000), 150)))
	round_freqs = np.round(freqs, 0)

	T = 0.1 #n/fs = 9600/96000
	chunk = 9600

	round_freqs = round_freqs * T #indeski frekvencija

	timedata = [] 	#sample-ovi, svaki red je 9600 samplova

	#prvi ton
	fs, data = read('training/trainingG4.wav')

	for i in range(0, 3000):
		timedata.append(data[i*chunk:i*chunk+chunk])

	#drugi ton
	fs, data = read('training/trainingF5.wav')

	for i in range(0, 3000):
		timedata.append(data[i*chunk:i*chunk+chunk])

	fs, data = read('training/trainingD6.wav')

	for i in range(0, 3000):
		timedata.append(data[i*chunk:i*chunk+chunk])

	fs, data = read('training/trainingA6.wav')

	for i in range(0, 3000):
		timedata.append(data[i*chunk:i*chunk+chunk])	

	timedata = np.array(timedata)

	fftdata = []

	for row in timedata:																		#za svaki zvuk se racuna fft
		fftdata.append(calculatefft(fs, row)[0])

	amps = []	

	for row in fftdata:																			#uzimanje odgovarajucih amplituda za frekvencije
		#amps.append(row[round_freqs])
		amps.append(adaptivelocalmax(row, round_freqs))

	y = []
	for i in range(0, 3000):
		y.append([1, 0, 0, 0])

	for i in range(0, 3000):
		y.append([0, 1, 0, 0])

	for i in range(0, 3000):
		y.append([0, 0, 1, 0])

	for i in range(0, 3000):
		y.append([0, 0, 0, 1])

	x = np.array(amps)
	y = np.array(y)

	return x, y
コード例 #3
0
ファイル: game.py プロジェクト: vonum/SoundRecognition
			stream.close()
			p.terminate()
			done = True

		if event.type == pygame.KEYDOWN and event.key == pygame.K_s:
			pl.orientation = 0
		if event.type == pygame.KEYDOWN and event.key == pygame.K_w:
			pl.orientation = 1
		if event.type == pygame.KEYDOWN and event.key == pygame.K_d:
			pl.orientation = 2
		if event.type == pygame.KEYDOWN and event.key == pygame.K_a:
			pl.orientation = 3

	a = record(p, stream)
	#rms = sqrt(mean(square(a)))
	a = calculatefft(RATE, a)[0]
	
	amptest = []
	amptest.append(adaptivelocalmax(a, round_freqs.astype(np.int64)))

	res = ann.predict(np.array(amptest))

	a = np.argmax(res)
	b = np.amax(res)
	if b > 0.98:
		pl.orientation = a

	pl.move()
	if(pl.checkApple(ap)):
		ap.generatePosition()
			
コード例 #4
0
def prepare_data():

	freqs = np.array([264, 297, 330, 352, 396, 440, 495, 528, 594, 660, 704, 792, 880, 990, 1056]) 	#odredjivanje potrebnih frekvencija
	#freqs = np.array(np.exp(np.linspace(np.log(264), np.log(1056), 15)))						

	chunk = 9600  #96000/10 (sample rate je 96000, uzimam deseti deo sekunde)

	T = 0.1 			#samples/fs 9600/96000

	freqs = freqs * T

	round_freqs = np.round(freqs, 0).astype(np.int64)															

	#data = np.array(data)
	#high = np.amax(data)
	#data = data/high
																				#seckanje zvuka od n s, na n zvukova od 1s

	print round_freqs

	timedata = [] 	#sample-ovi, svaki red je 9600 samplova
	#prvi ton
	#fs, data = read(filename, mmap=False)
	fs, data = read('training/training440.wav')

	for i in range(0, 3000):
		timedata.append(data[i*chunk:i*chunk+chunk])

	#drugi ton
	fs, data = read('training/training660.wav')

	for i in range(0, 3000):
		timedata.append(data[i*chunk:i*chunk+chunk])

	fs, data = read('training/training330.wav')

	for i in range(0, 3000):
		timedata.append(data[i*chunk:i*chunk+chunk])

	fs, data = read('training/training990.wav')

	for i in range(0, 3000):
		timedata.append(data[i*chunk:i*chunk+chunk])	

	timedata = np.array(timedata)

	fftdata = []

	for row in timedata:																		#za svaki zvuk se racuna fft
		fftdata.append(calculatefft(fs, row)[0])

	#fftdata = np.array(fftdata)
	#fftdata = fftdata/10000000000

	amps = []	

	for row in fftdata:																			#uzimanje odgovarajucih amplituda za frekvencije
		#amps.append(row[round_freqs])
		amps.append(localmax(row, round_freqs))

	y = []
	for i in range(0, 3000):
		y.append([1, 0, 0, 0])

	for i in range(0, 3000):
		y.append([0, 1, 0, 0])

	for i in range(0, 3000):
		y.append([0, 0, 1, 0])

	for i in range(0, 3000):
		y.append([0, 0, 0, 1])

	x = np.array(amps)
	y = np.array(y)

	return x, y
コード例 #5
0
ファイル: nntest.py プロジェクト: vonum/SoundRecognition
test = np.array([264, 297, 330, 352, 396, 440, 495, 528, 594, 660, 704, 792, 880, 990, 1056])

T = 0.1
test = test * T
test = np.round(test, 0)

#freqs = np.array(np.exp(np.linspace(np.log(264), np.log(1056), 15)))
#round_freqs = np.round(freqs, 0)

ann = create_and_train()

amptest = []

fst, datat = read('test/200test.wav', mmap = False)
datat = datat[0:9600]
testfft = calculatefft(fst, datat)[0]
#testfft = testfft/10000000000

#amptest.append(testfft[test.astype(np.int64)])
amptest.append(localmax(testfft, test.astype(np.int64)))

fst, datat = read('test/330test.wav', mmap = False)
datat = datat[0:9600]
testfft = calculatefft(fst, datat)[0]
#testfft = testfft/10000000000

#amptest.append(testfft[test.astype(np.int64)])
amptest.append(localmax(testfft, test.astype(np.int64)))

fst, datat = read('test/400test.wav', mmap = False)
datat = datat[0:9600]