54 lines
1.5 KiB
Python
54 lines
1.5 KiB
Python
|
|
||
|
#!/usr/bin/env python3
|
||
|
# Semplice file per far vedere come possono essere
|
||
|
# regolate altezza,intensita`, durata, e timbro
|
||
|
# di un suono tramite pyaudio
|
||
|
|
||
|
import numpy as np
|
||
|
import pyaudio
|
||
|
|
||
|
from Armonia import armonica
|
||
|
|
||
|
# dati per l'inizializzazione dell'onda
|
||
|
duration = 2.0
|
||
|
fs = 44100
|
||
|
volume = 1.0
|
||
|
# frequenza la 66 Hz il DO piu' basso udibile
|
||
|
f = 66.0
|
||
|
i=0
|
||
|
nota = armonica(f, "5")
|
||
|
while i<7:
|
||
|
# inizializzo questo oggetto pyaudio
|
||
|
p = pyaudio.PyAudio()
|
||
|
# onda sinusoidale, non so bene perche` e` da fare cosi`
|
||
|
prima = (np.sin(2*np.pi*np.arange(fs*duration)*f/fs)).astype(np.float32)
|
||
|
print(prima)
|
||
|
stream = p.open(format=pyaudio.paFloat32, channels=1, rate=fs, output=True)
|
||
|
# riproduce lo stream al volume impostato
|
||
|
stream.write(volume*prima)
|
||
|
stream.stop_stream()
|
||
|
# genera la quinta nota armonica naturale della nota di partenza
|
||
|
h = armonica(f, "3_maj")
|
||
|
p = pyaudio.PyAudio()
|
||
|
terza = (np.sin(2*np.pi*np.arange(fs*duration)*h/fs)).astype(np.float32)
|
||
|
print(terza)
|
||
|
stream = p.open(format=pyaudio.paFloat32, channels=1, rate=fs, output=True)
|
||
|
stream.write(volume*terza)
|
||
|
stream.stop_stream()
|
||
|
# genera la terza nota armonica naturale della nota di partenza
|
||
|
g = armonica(f, "5")
|
||
|
p = pyaudio.PyAudio()
|
||
|
quinta = (np.sin(2*np.pi*np.arange(fs*duration)*g/fs)).astype(np.float32)
|
||
|
print(quinta)
|
||
|
stream = p.open(format=pyaudio.paFloat32, channels=1, rate=fs, output=True)
|
||
|
stream.write(volume*quinta)
|
||
|
stream.stop_stream()
|
||
|
# passa alla prossima ottava
|
||
|
f=f*2-1+i
|
||
|
i=i+1
|
||
|
|
||
|
|
||
|
stream.close()
|
||
|
p.terminate()
|
||
|
|