#!/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()