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  }