#lang racket (require portaudio) (define pitch 426) (define base-frames 0) (define sample-rate 44100.0) (define tpisr (* 2 pi (/ 1.0 sample-rate))) (define (real->s16 x) (inexact->exact (round (* 32767 x)))) (define (buffer-filler setter frames) (for ([i (in-range frames)] [f (in-range base-frames (+ base-frames frames))]) (define sample (real->s16 (* 0.2 (sin (* tpisr f pitch))))) (setter (* i 2) sample) (setter (+ 1 (* i 2)) sample)) (set! base-frames (+ base-frames frames))) (match-define (list timer stats stopper) (stream-play buffer-filler 0.2 sample-rate))