Пример #1
0
func main() {
	maxfreq := flag.Float64("maxfreq", 440, "max freq for sweep")
	// sinchg := flag.Float64("sinchgrate", 15, "chg rate for sin wav")
	bufsize := flag.Int("bufsize", 4096, "buffer size")
	t := flag.Int64("time", 15000, "milliseconds")
	flag.Parse()
	fmt.Println("start!")
	var s0 ugen.UGen = ugen.NewSin(float32(*maxfreq), 0, 0, 1)
	// var s1 ugen.UGen = ugen.NewSin(1004, 0, 0, 1)
	// var s2 ugen.UGen = ugen.NewSin(1008, 0, 0, 1)
	// var s3 ugen.UGen = ugen.NewSin(1016, 0, 0, 1)
	// var sp ugen.UGen = ugen.NewSin(float32(*sinchg), 0, 440, float32(*maxfreq - 440))

	// ml := ugen.NewMixer(4,2)
	//
	// ml.SetInput(0, ugen.NewSpreaderWithUGen(2, s0))
	// ml.SetInput(1, ugen.NewSpreaderWithUGen(2, s1))
	// ml.SetInput(2, ugen.NewSpreaderWithUGen(2, s2))
	// ml.SetInput(3, ugen.NewSpreaderWithUGen(2, s3))

	// ml.ParamChannel() <- ugen.ParamValue{0, 0.05}
	// ml.ParamChannel() <- ugen.ParamValue{1, 0.05}
	// ml.ParamChannel() <- ugen.ParamValue{2, 0.05}
	// ml.ParamChannel() <- ugen.ParamValue{3, 0.05}

	// var ps = ugen.NewAudioParam()
	// ps.SetUGenSource(0, sp, 0)
	// ps.SetDest(0, s0, 0)

	var o = ugen.NewPortAudioOutput(2)
	var op = ugen.OutputParams{SampleRate: 44100, BufferSize: *bufsize}

	// o.SetInput(0, ml)
	o.SetInput(0, ugen.NewSpreaderWithUGen(2, s0))
	//	ps.Start(op)
	o.Start(op)
	go func() {
		t := time.Tick(time.Second)
		for {
			<-t
			ugen.LogRecycleStats()
			// ugen.LogStackTrace()
		}
	}()
	fmt.Println("sleeping!")
	time.Sleep(time.Duration(*t) * time.Millisecond)
	fmt.Println("stopping!")
	o.Stop()
	// ps.Stop()
}
Пример #2
0
func main() {
	count := flag.Int("count", 0, "Number of sines")
	interval := flag.Float64("interval", 2, "Multiplier for each increment. If <= 1 increase arithmetically, not geometrically")
	outch := flag.Int("channels", 2, "channels in output device")
	bufsize := flag.Int("bufsize", 4096, "buffer size")
	samplerate := flag.Float64("samplerate", 44100, "sample rate")
	minfreq := flag.Float64("minfreq", 20, "starting frequency")
	maxfreq := flag.Float64("maxfreq", -1, "ending frequency")
	t := flag.Int64("time", 15000, "milliseconds")
	flag.Parse()

	freqs := make([]float32, 0)
	if *maxfreq == -1 {
		if *count <= 0 {
			fmt.Println("No maxfreq, no count. Can't read your mind, human.")
			return
		}
		if *interval > 1 {
			for f, i := float32(*minfreq), 0; i < *count; f, i = f*float32(*interval), i+1 {
				freqs = append(freqs, f)
			}
		} else {
			for f, i := float32(*minfreq), 0; i < *count; f, i = f+float32(*minfreq), i+1 {
				freqs = append(freqs, f)
			}
		}
	} else {
		if *interval > 1 {
			for f, i := float32(*minfreq), 0; i < *count && f < float32(*maxfreq); f, i = f*float32(*interval), i+1 {
				freqs = append(freqs, f)
			}
		} else {
			for f, i := float32(*minfreq), 0; i < *count && f < float32(*maxfreq); f, i = f+float32(*minfreq), i+1 {
				freqs = append(freqs, f)
			}
		}
	}

	fmt.Println("frequencies", freqs)

	mx := ugen.NewMixer(len(freqs), *outch)

	for i := 0; i < len(freqs); i++ {
		mx.SetInput(i, ugen.NewSpreaderWithUGen(*outch, ugen.NewSin(freqs[i], 0, 0, 1/float32(len(freqs)))))
	}

	fmt.Println("start!")

	var o = ugen.NewPortAudioOutput(*outch)
	var op = ugen.OutputParams{SampleRate: *samplerate, BufferSize: *bufsize}

	o.SetInput(0, mx)
	o.Start(op)
	go func() {
		t := time.Tick(time.Second)
		for {
			<-t
			ugen.LogRecycleStats()
			// ugen.LogStackTrace()
		}
	}()
	fmt.Println("sleeping!")
	time.Sleep(time.Duration(*t) * time.Millisecond)
	fmt.Println("stopping!")
	o.Stop()
}