19 lines
541 B
Plaintext
19 lines
541 B
Plaintext
// Standalone waveform helpers. Apache-2.0 licensed.
|
|
module agila_open_audio
|
|
|
|
import math
|
|
|
|
pub fn sine_wave(sample_rate int, frequency f64, duration f64, amplitude f64) []i16 {
|
|
if sample_rate <= 0 || frequency <= 0 || duration <= 0 {
|
|
return []i16{}
|
|
}
|
|
count := int(f64(sample_rate) * duration)
|
|
mut samples := []i16{cap: count}
|
|
for i in 0 .. count {
|
|
t := f64(i) / f64(sample_rate)
|
|
value := math.sin(2.0 * math.pi * frequency * t) * amplitude
|
|
samples << i16(value)
|
|
}
|
|
return samples
|
|
}
|