<?php
require_once(dirname(__FILE__) . "/Main.php");
echo new folder\Main();
<?php
namespace folder;
require_once dirname(__FILE__) . "/../../account/get_user_path.php";
$GLOBALS["BACK_TEXT"] = "← Back";
$GLOBALS["PROGRESS_FILE_NAME"] = "progress";
class Builder extends \XMLWriter
{
   public function __construct($child=True)
   {
      $this->child = $child;
      $this->set_user_path();
      $this->set_progress();
   }
   private function set_user_path()
   {
      $this->user_path = \account\get_user_path();
   }
   private function set_progress()
   {
      $path = $this->user_path . $GLOBALS["PROGRESS_FILE_NAME"];
      $ignore = FILE_IGNORE_NEW_LINES;
      $this->progress = file_get_contents($path, $ignore);
   }
   public function __toString()
   {
      header("Content-type: text/xml");
      return $this->build();
   }
   public function build()
   {
      $this->openMemory();
      $this->populate();
      return $this->outputMemory();
   }
   private function populate()
   {
      $this->startElement("folder");
      $this->add_back_option();
      $this->add_options();
      $this->endElement();
   }
   private function add_back_option()
   {
      if ($this->child)
      {
         $this->startElement("option");
         $this->writeAttribute("action", "escape");
         $this->text($GLOBALS["BACK_TEXT"]);
         $this->endElement();
      }
   }
   protected function add_options()
   {
      return null;
   }
}
<?php
namespace folder;
require_once "Builder.php";
class Album extends Builder
{
   protected function add_options()
   {
      for ($ii = 1; $ii <= $this->progress; $ii++)
      {
         $this->startElement("option");
         $this->writeAttribute("action", "load_album");
         $this->text($ii);
         $this->writeElement("parameter", $ii);
         $this->endElement();
      }
   }
}
<?php
namespace folder;
require_once "Builder.php";
define("LEVEL_IDS_PATH", "../../../../../../users/level_ids");
define("LEVEL_LIMIT", 10);
class Levels extends Builder
{
   public function __construct($practice=false)
   {
      parent::__construct();
      $this->practice = $practice;
      $this->set_level_names();
   }
   private function set_level_names()
   {
      $entries = $this->get_level_data();
      $names = array();
      foreach ($entries as $entry)
      {
         $fields = explode("|", $entry);
         $names[] = trim($fields[1]);
      }
      $this->names = $names;
   }
   private function get_level_data()
   {
      $path = LEVEL_IDS_PATH;
      $ignore = FILE_IGNORE_NEW_LINES;
      return file($path, $ignore);
   }
   protected function add_options()
   {
      $names = $this->names;
      for ($ii = 0; $ii < $this->progress + 1 && $ii < LEVEL_LIMIT; $ii++)
      {
         $practice = $this->practice ? 1 : 0;
         $this->startElement("option");
         $this->writeAttribute("action", "load_level");
         $this->text($names[$ii]);
         $this->writeElement("parameter", $ii + 1);
         $this->writeElement("parameter", $practice);
         $this->endElement();
      }
   }
}
<?php
require_once(dirname(__FILE__) . "/Levels.php");
echo new folder\Levels();
EVR.include("field/landscape/Landscape.js");
EVR.Field = function(container)
{
   EVR.Component.call(this, container, "div", container.firstChild);
   this.colors = FIELD_COLORS;
   this.scrollers = [];
   this.style();
   this.append();
   this.add_fader();
   this.populate();
}
EVR.Field.prototype = new EVR.Component;
EVR.Field.prototype.style = function()
{
   this.set_color(this.colors[0]);
   this.css.position = "relative";
   this.css.margin = "auto";
   this.css.width = "100%";
   this.css.height = "100%";
   this.css.overflow = "hidden";
}
EVR.Field.prototype.append = function()
{
   EVR.Component.prototype.append.call(this);
   this.update_dimensions();
}
EVR.Field.prototype.add_fader = function()
{
   this.fader = new EVR.Animation.Fader(
      this, this.colors[1], FIELD_FADE_RATE, FIELD_FADE_LENGTH,
      FIELD_FADE_LOOP);
}
EVR.Field.prototype.set_colors = function(colors)
{
   this.set_color(colors[0]);
   this.fader.set_path(colors[1]);
}
EVR.Field.prototype.populate = function()
{
   this.add_ground();
   this.add_clouds();
   this.add_trees();
}
EVR.Field.prototype.repopulate = function()
{
   this.update_dimensions();
   this.ground.draw();
   this.redraw_clouds();
   this.redraw_trees();
}
EVR.Field.prototype.add_ground = function()
{
   this.ground = new EVR.Field.Landscape.Ground(this);
}
EVR.Field.prototype.add_clouds = function()
{
   this.clouds = [];
   for (var ii = 0; ii < CLOUD_COUNT; ii++)
   {
      this.clouds.push(new EVR.Field.Landscape.Cloud(this));
   }
   this.add_scroller(this.clouds, CLOUD_STEP, CLOUD_SCROLL_RATE);
}
EVR.Field.prototype.add_scroller = function(graphics, rate, step)
{
   var scroller = new EVR.Animation.Scroller(graphics, rate, step);
   this.scrollers.push(scroller);
   scroller.play();
}
EVR.Field.prototype.redraw_clouds = function()
{
   for (var ii = 0; ii < this.clouds.length; ii++)
   {
      this.clouds[ii].draw();
   }
}      
EVR.Field.prototype.add_trees = function()
{
   this.trees = [];
   for (var ii = 0; ii < TREE_COUNT; ii++)
   {
      this.trees.push(new EVR.Field.Landscape.Tree(this, this.ground));
   }
   this.add_scroller(this.trees, TREE_STEP, TREE_SCROLL_RATE);
}
EVR.Field.prototype.redraw_trees = function()
{
   for (var ii = 0; ii < this.trees.length; ii++)
   {
      this.trees[ii].draw();
   }
}
EVR.Field.prototype.update_dimensions = function()
{
   this.dimensions = EVR.Component.prototype.get_dimensions.call(this);
}
EVR.Field.prototype.get_dimensions = function(ratio)
{
   return this.dimensions;
}
EVR.Field.prototype.stop_trees = function()
{
   this.scrollers[1].stop();
}
EVR.Field.prototype.start_trees = function()
{
   this.scrollers[1].play();
}
EVR.Field.prototype.toString = function()
{
   return "[object EVR.Field]";
}
216.73.216.119
216.73.216.119
216.73.216.119
 
September 13, 2013

from array import array
from time import sleep

import pygame
from pygame.mixer import Sound, get_init, pre_init

class Note(Sound):

    def __init__(self, frequency, volume=.1):
        self.frequency = frequency
        Sound.__init__(self, self.build_samples())
        self.set_volume(volume)

    def build_samples(self):
        period = int(round(get_init()[0] / self.frequency))
        samples = array("h", [0] * period)
        amplitude = 2 ** (abs(get_init()[1]) - 1) - 1
        for time in xrange(period):
            if time < period / 2:
                samples[time] = amplitude
            else:
                samples[time] = -amplitude
        return samples

if __name__ == "__main__":
    pre_init(44100, -16, 1, 1024)
    pygame.init()
    Note(440).play(-1)
    sleep(5)

This program generates and plays a 440 Hz tone for 5 seconds. It can be extended to generate the spectrum of notes with a frequency table or the frequency formula. Because the rewards in Send are idealized ocean waves, they can also be represented as tones. Each level has a tone in its goal and a tone based on where the player's disc lands. Both play at the end of a level, sounding harmonic for a close shot and discordant for a near miss. The game can dynamically create these tones using the program as a basis.

I'm also building an algorithmically generated song: Silk Routes (Scissored). Here is an example of how it sounds so far.