Commit 990ced11 authored by simon's avatar simon
Browse files

simple example

parent 7f258388
Loading
Loading
Loading
Loading
+62 −11
Original line number Diff line number Diff line
package main

import "log"
import "time"
import (
	"io"
	"os/exec"
	"time"
	"math"
	"os"
	"os/signal"
	"log"
)

import . "github.com/splace/joysticks"

import . "github.com/splace/sounds"


func main() {
	timer:=time.After(time.Second*10)
	log.Println("press any button to start.")
	stopChan := make(chan os.Signal)
	signal.Notify(stopChan, os.Interrupt)

	events := Capture(
		Channel{1, HID.OnClose},  // event[0] button #1 closes
		Channel{10, HID.OnLong},  // event[0] button #10 long pressed
		Channel{1, HID.OnClose},  // event[1] button #1 closes
		Channel{7, HID.OnOpen},  // event[2] button #7 opens
		Channel{8, HID.OnOpen},  // event[3] button #8 opens
		Channel{2, HID.OnRotate}, // event[4] hat #1 rotates
		Channel{1, HID.OnEdge}, // event[5] hat #2 rotates
	)
	log.Println("started with 10 second timeout.")
loop:
	var volume float32 = .5
	var octave =5
	var note int =1
	for {
		select {
	    case <-timer:
			log.Println("Shutting down server due to timeout.")
			break loop
		case <-stopChan: // wait for SIGINT
			log.Println("Interrupted")
			return
		case <-events[0]:
			log.Println("Button #1 pressed")
			return
		case <-events[1]:
			play(NewSound(NewTone(Period(octave,note), float64(volume)), time.Second/3))
		case <-events[2]:
			octave++
		case <-events[3]:
			octave--
		case h := <-events[4]:
			volume = h.(HatAngleEvent).Angle/6.28 + .5
		case h := <-events[5]:
			//f = time.Duration(100*math.Pow(2, float64(h.(HatAngleEvent).Angle)/6.28)) * time.Second / 44000
			note = int(h.(HatAngleEvent).Angle*6 / math.Pi)+6
			play(NewSound(NewTone(Period(octave,note), float64(volume)), time.Second/3))
		}
	}
}

func play(s Sound) {
	cmd := exec.Command("aplay")
	out, in := io.Pipe()
	go func() {
		Encode(in, 2, 44100, s)
		in.Close()
	}()
	cmd.Stdin = out
	err := cmd.Run()
	if err != nil {
		panic(err)
	}
	log.Println("Playing:",s)
} 



/*  Hal3 Sat 28 Jan 17:57:57 GMT 2017 go version go1.6.2 linux/amd64
Sat 28 Jan 17:57:59 GMT 2017
*/