This repository has been archived on 2025-04-28. You can view files and clone it, but cannot push or open issues or pull requests.
computers-sound-music-portf.../code/clipped/main.py
2024-10-17 14:40:10 -07:00

34 lines
1.1 KiB
Python

import string
from scipy.io import wavfile as wav
import numpy as np
import sounddevice as sd
import math
print("Portfolio assignment 1: Clipped")
print("This program will create (overwrite) sine.wav and clipped.wav per specification\n and will play clipped.wav to the default audio output")
min_amp = np.iinfo(np.int16).min # = -32767
max_amp = np.iinfo(np.int16).max # = 32767
sample_rate = 48000 # samples/second
def generate(amp: float):
frequency = 440 # cycles/second aka Hz
duration = 1 # seconds
time = np.linspace(0, duration, int(sample_rate * duration), endpoint=False) # array of discrete time values
angle = 2 * np.pi * frequency * time # radians 2π(f * t)
wave = amp * max_amp * np.sin(angle)
return wave.astype(np.int16)
def write(wave, name: string):
wav.write(name, sample_rate, wave)
def play(wave):
sd.play(wave, samplerate=sample_rate, blocking=True, loop=False)
sine = generate(0.25)
clipped = np.clip(generate(0.5), math.floor(min_amp/4.0), math.ceil(max_amp/4.0))
write(sine,'sine.wav')
write(clipped,'clipped.wav')
play(clipped)