kostacivos/Prova_main.py

63 lines
2.1 KiB
Python
Executable File

#!/usr/bin/env python3
#prova di utilizzo di una classe per per produrre le note armoniche
#e per mappare il CSV che indica per ogni nota la sua frequenza naturale
import numpy as np
import pyaudio
import csv
from Armonia import armonica
import csv
reader = csv.reader(open('note.csv', 'r'))
nota = {}
for rows in reader:
k, v = rows
nota[k] = float(v)
fr = 0
while nota.get(fr) == None:
fr = input("inserisci in MAIUSC il nome della nota di cui fare le armoniche,\ninserire anche l'ottava a cui appariene (2-7):")
f = float(nota.get(fr))
print(f)
duration = 0.6
fs = 44100
volume = 1.0
i = 0
# inizializzo questo oggetto pyaudio, parte sonora
p = pyaudio.PyAudio()
#ciclo in cui si fanno tutti gli accordi della frequenza data
while f<4200:
accordo_maggiore=[f, armonica(f, "3_maj"), armonica(f, "5")]
prima = (np.sin(2*np.pi*np.arange(fs*duration)*accordo_maggiore[0]/fs)).astype(np.float32)
terza = (np.sin(2*np.pi*np.arange(fs*duration)*accordo_maggiore[1]/fs)).astype(np.float32)
quinta = (np.sin(2*np.pi*np.arange(fs*duration)*accordo_maggiore[2]/fs)).astype(np.float32)
print('ACCORDO MAGGIORE', (accordo_maggiore[0], accordo_maggiore[1], accordo_maggiore[2]))
stream = p.open(format=pyaudio.paFloat32, channels=1, rate=fs, output=True)
stream.write(volume*prima)
stream.write(volume*terza)
stream.write(volume*quinta)
stream.stop_stream()
#ottava maggiore
f = f*2+0.15
while f>66:
f = f/2
accordo_maggiore=[f, armonica(f, "3_maj"), armonica(f, "5")]
quinta = (np.sin(2*np.pi*np.arange(fs*duration)*accordo_maggiore[2]/fs)).astype(np.float32)
terza = (np.sin(2*np.pi*np.arange(fs*duration)*accordo_maggiore[1]/fs)).astype(np.float32)
prima = (np.sin(2*np.pi*np.arange(fs*duration)*accordo_maggiore[0]/fs)).astype(np.float32)
print('ACCORDO MAGGIORE', (accordo_maggiore[2], accordo_maggiore[1], accordo_maggiore[0]))
stream = p.open(format=pyaudio.paFloat32, channels=1, rate=fs, output=True)
stream.write(volume*quinta)
stream.write(volume*terza)
stream.write(volume*prima)
stream.stop_stream()
stream.close()
p.terminate()