package main import "github.com/veandco/go-sdl2/sdl" /* #cgo CFLAGS: -I/home/nick/Downloads/include #cgo LDFLAGS: -L/home/nick/.local/lib -lprojectM-4 #include "projectM-4/projectM.h" */ import "C" import ( "bufio" "encoding/binary" "os" "time" ) func main() { if err := sdl.Init(sdl.INIT_EVERYTHING); err != nil { panic(err) } defer sdl.Quit() window, err := sdl.CreateWindow("test", sdl.WINDOWPOS_UNDEFINED, sdl.WINDOWPOS_UNDEFINED, 800, 600, sdl.WINDOW_OPENGL) if err != nil { panic(err) } defer window.Destroy() context, err := window.GLCreateContext() if err != nil { panic(err) } defer sdl.GLDeleteContext(context) handle := C.projectm_create() if handle == nil { panic("nil") } defer C.projectm_destroy(handle) C.projectm_set_window_size(handle, 800, 600) preset := C.CString("/usr/share/projectM/presets/presets_stock/Zylot - Wisps.milk") C.projectm_load_preset_file(handle, preset, false) reader := bufio.NewReader(os.Stdin) running := true for running { for event := sdl.PollEvent(); event != nil; event = sdl.PollEvent() { switch event.(type) { case *sdl.QuitEvent: println("Quit") running = false break } } audioData := make([]int16, 2048) err = binary.Read(reader, binary.LittleEndian, audioData) if err != nil { panic(err) } C.projectm_pcm_add_int16(handle, (*C.int16_t)(&audioData[0]), C.uint(len(audioData)), C.PROJECTM_STEREO) C.projectm_opengl_render_frame(handle) window.GLSwap() time.Sleep(1 / 60 * time.Second) } }