import math, random, itertools import pyaudio opzioni = { "format": pyaudio.paFloat32, "channels": 2, "rate": 96000, "input": True, "frames_per_buffer": 1024 } class primi: def primo(n): """ Restituisce True se n è primo altrimenti restituisce False. """ for i in range(3, int(math.sqrt(n)) + 1, 2): if n % i == 0: return False return True def prossimo(n): """ Restituisce il più piccolo numero primo maggiore di n. [Generatore] """ if n % 2 == 0: n += 1 while True: n += 2 if primi.primo(n): yield n def lista(p, n): """ Restituisce una n-tupla con i numeri primi maggiori di p. """ return tuple([p for p in itertools.islice(primi.prossimo(p), n)]) class generatore: def caso(inizio, fine, n): """ Restituisce n interi casuali nell'intervallo [inizio; fine). [Generatore] """ audio = pyaudio.PyAudio() input = audio.open(**opzioni) dati = input.read(opzioni["rate"] // opzioni["frames_per_buffer"] * n // 2) input.close() audio.terminate() dati = [i for i in dati if i != 0] dati = [i for i in dati if i in range(inizio, fine)] random.shuffle(dati) for i in range(n): yield dati[i] def onetimepad(l): """ Ritorna una l-tupla di interi casuali per un one-time-pad. """ return tuple(generatore.caso(0, 2 * 16, l))