32 lines
625 B
Go
32 lines
625 B
Go
package main
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/faiface/beep"
|
|
)
|
|
|
|
type RateLimitedStreamer struct {
|
|
streamer beep.Streamer
|
|
rate time.Duration
|
|
last time.Time
|
|
}
|
|
|
|
func NewRateLimitedStreamer(streamer beep.Streamer, rate time.Duration) *RateLimitedStreamer {
|
|
s := RateLimitedStreamer{streamer: streamer, rate: rate}
|
|
return &s
|
|
}
|
|
|
|
func (s *RateLimitedStreamer) Stream(samples [][2]float64) (n int, ok bool) {
|
|
if time.Since(s.last) < s.rate {
|
|
time.Sleep(time.Until(s.last.Add(s.rate)))
|
|
}
|
|
s.last = time.Now()
|
|
|
|
return s.streamer.Stream(samples)
|
|
}
|
|
|
|
func (s *RateLimitedStreamer) Err() error {
|
|
return s.streamer.Err()
|
|
}
|