63 lines
2.1 KiB
Python
Executable File
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()
|