from random import randint import simpleaudio import numpy as np import matplotlib.pyplot as plt def spill_lyd(lydliste): lyd = np.array(lydliste).astype(np.int16) lydobjekt = simpleaudio.play_buffer(lyd, 1, 2, 4400) lydobjekt.wait_done() def tilfeldig_lyd(antall_sekunder): lyd = [] for i in range(44100 * antall_sekunder): lyd.append(randint(0, 32767)) return lyd def lag_firkant_lyd(antall_sekunder): lyd = [] # indre del av for-løkken lager én "firkant". Så repeterer vi det mange ganger # vi vil totalt ha antall sekunder ganger 44100 elementer for å få en lyd på "antall_sekunder" # ettersom hver iterasjon av den ytre for-løkken lager 100 elementer, deler vi på 100 i range for i in range(int(antall_sekunder * 44100 / 100)): for j in range(0, 50): lyd.append(32000) for j in range(0, 50): lyd.append(0) return lyd # denne funksjonen er lik som firkant-lyd, bortsett fra den indre delen def lag_trekant_lyd(antall_sekunder): lyd = [] for i in range(int(antall_sekunder * 44100 / 100)): for j in range(0, 50): lyd.append(j * 32000 / 50) for j in range(0, 50): lyd.append(32000 - j*32000 / 50) return lyd # alternativ løsning på "trekant-lyd" # vi definerer et steg først, som gjør koden litt ryddigere og enklere å forstå def trekant_lyd_alternativ(antall_sekunder): lyd = [] # lave verdier steg = 32000 / 50 for j in range(round(44000 * antall_sekunder / 100)): verdi = 0 for i in range(50): lyd.append(verdi) verdi += steg verdi = 32000 # Høye verdier for i in range(50): lyd.append(verdi) verdi -= steg return lyd def lyd_sinus(antall_sekunder, frekvens): lyd = [] for i in range(44100 * antall_sekunder): lyd.append(16000 * (1 + np.sin(frekvens * i/44100 * 2 * np.pi))) return lyd lyd = lyd_sinus(3, 440) spill_lyd(lyd) plt.plot(lyd) plt.show()