github.com/splace/oscillator@v0.0.0-20220107232915-bbe26a73ce62/models/steppers_test.go (about) 1 package oscillator_test 2 3 import "fmt" 4 5 import osc "github.com/splace/oscillator/discrete" 6 7 import "github.com/anthonynsimon/bild/transform" 8 9 import "os" 10 import "image/color" 11 import "image/png" 12 13 func ExampleSteppersImage() { 14 const ( 15 steps = 12800 16 cycles = 2 17 ) 18 // build oscillator group 19 // frequency and amplitude set to square wave Fourier transform. 20 var oss osc.Steppers 21 for n := 1.0; n < 40; n += 2 { 22 o := osc.NewDamped(steps/n, 1/n) // 1/n damping makes all oscillators damp at the same rate. 23 o.Step(100 / n) // 100 won't exceed byte (+127 - -127) when all summed 24 oss = append(oss, o) 25 } 26 27 // step through and store the real part a in byte 28 var r []byte 29 for r = make([]byte, 0, steps*cycles); len(r) != cap(r); oss.Step(0) { 30 r = append(r, byte(real(oss.StateGetter())+128)) 31 } 32 33 os.Chdir("images") // TODO simple but not really thread safe 34 out, err := os.Create(fmt.Sprintf("Steppers(%v).png", len(r))) 35 os.Chdir("") 36 if err != nil { 37 fmt.Println(err) 38 return 39 } 40 41 fmt.Println( 42 // save as squared-up (2048 x 1024 px) signal strip (steps x 256 px) 43 png.Encode( 44 out, 45 transform.Resize( 46 osc.Image8bit( 47 osc.Appearance{ 48 color.NRGBA{0, 0, 128, 255}, 49 color.Gray{128}, 50 }, 51 r, 52 ), 53 2048, // len(r)/2, 54 1024, // len(r)/2, 55 transform.ResampleFilter{}, // transform.Linear, 56 ), 57 ), 58 ) 59 // Output: 60 // <nil> 61 }