soundgen uses put with timeout for efficiency.
soundgen wave generation uses sleep every n cycles instead of every cycle