// Copyright 2009 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // This is a simple demo of Go running under Native Client. // It is a tetris clone built on top of the exp/nacl/av and exp/draw // packages. package main import ( "exp/nacl/av"; "exp/nacl/srpc"; "log"; "runtime"; "os"; ) var sndc chan []uint16 func main() { // Native Client requires that some calls are issued // consistently by the same OS thread. runtime.LockOSThread(); if srpc.Enabled() { go srpc.ServeRuntime(); } args := os.Args; p := pieces4; if len(args) > 1 && args[1] == "-5" { p = pieces5; } dx, dy := 500, 500; w, err := av.Init(av.SubsystemVideo | av.SubsystemAudio, dx, dy); if err != nil { log.Exit(err); } sndc = make(chan []uint16, 10); go audioServer(); Play(p, w); } func audioServer() { // Native Client requires that all audio calls // original from a single OS thread. runtime.LockOSThread(); n, err := av.AudioStream(nil); if err != nil { log.Exit(err); } for { b := <-sndc; for len(b)*2 >= n { var a []uint16; a, b = b[0 : n/2], b[n/2 : len(b)]; n, err = av.AudioStream(a); if err != nil { log.Exit(err); } println(n, len(b)*2); } a := make([]uint16, n/2); for i := range b { a[i] = b[i]; } n, err = av.AudioStream(a); } } func PlaySound(b []uint16) { sndc <- b; } var whoosh = []uint16{ // Insert your favorite sound samples here. }