54 lines
1.5 KiB
Python
Executable File
54 lines
1.5 KiB
Python
Executable File
|
|
#!/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()
|
|
|