       _____            ____
      / ___/____ ______/ __ \__ _____
    __\ \/ _ / // / _ / /_/ / // / _ \
   /____/\_  \____\___\___\_\____\___/
          / /                     n8y
  _-\/-_
 |  23 YEARS STUFFING BYTES TOGETHER  |
  -________                ________-
          | Pandora's  Cloud |
  _- -____________- -_
 |                                    |
 | CONCEPT:  SquoQuo                  |
 | CODE:     Hopper                   |
 | GFX:      Raven                    |
 | SAMPLES:  Hopper                   |
 | HTML HELP:Widdy                    |
 | MUSIC:    You!                     |
 |                                    |
 | REQUIRES: Python, Pygame           |
 |                                    |
 | GREETINGS:Metalvotze, Nuance, T$,  |
 |           anti, Speckdrumm, Toxie, |
 |           Stroboholics, TRSI, JAC! |
 |           Mercury (we did it ;-)   |
 |           Headcrash, Hitmen, G*P   |
 |                                    |
 | contact:  squoquo@squoquo.de       |
 | website:  http://squoquo.de        |
 |                                    |
  -________________________________-

Here's our latest toy to play around with, a multi-user network music composer thing.
It's been designed for the RaspberryPi, however it should run on any platform running Python 2.7+Pygame 1.9 (e.g. Windows or Linux). It's tested on Python 2.7.9 and Pygame 1.9.1
Since the RasPi B+ is a single core processor, we opted for multi-threading for the sound player and the webserver. Sorry to all multi-core users for that ;-)
There are several command line options you can use for customizing/debugging:
	win			Run in window mode (default is fullscreen)
	l			Run with localhost 127.0.0.1 (instead of real IP)
	j			Show timing information, especially the jitter in the console (default is off)
	v			Show the current vote status of each sample for every step in the console (default is off)
	w=<width>	Set the requested display width. Only valid if used in combiniation with height option. If the requested resolution is not valid, something unwanted might happen (default is system's default resolution)
	h=<height>	Set the requested display height. Only valid if used in combiniation with width option. If the requested resolution is not valid, something unwanted might happen (default is system's default resolution)
	ip=<ip>		Set the IP address the webserver is listening too. Mainly used to select a specific IP address if multiple addresses are available (e.g. from WLAN and LAN) (default is the system's first available IP address)
	m=<sounds>	Set the maximum number of simultaneously triggered samples. Reduce this, if you're running in performance problems. Increase if samples are not played (default is 8)
Exemplary calls:
python pandora.py win w=640 h=400 l j m=16
	Run in 640x400 window on localhost, showing the jitter and playing all samples simultaneously if required. Basically that's my debugging setting
python pandora.py w=1280 h=720 ip=123.45.67.89
	Run fullscreen in HD using IP 123.45.67.89 for the webserver
	
Some keyboard commands:
	Escape		Pressed in the main screen switches to the outtro screen, music is fading out
				Pressed in the outtro screen exits the whole program
	Space		With every press you reduce the samples in volume, bringing back the initial 4/4 bassdrum pattern. Basically helpful to reduce, if the chaos gets a little bit out of hands ;-)
	
If you want other samples, you can exchange them in the samples subdirectory. For every sample there is a corresponding bmp file (used in the GUI) and a png file (used for the website).
The samples g and h are specially in that they are the melodic samples, which are controlled by an underlying song pattern of c-c-c-c-Es-Es-G-G. Therefore several variations of g and h are used as follows:
	- Bass is played by samples g, based on the song the following samples are used g1-g1-g1-g1-g2-g2-g3-g4
	- Melody samples are played by samples h-j, which build the 3 chords: chord c=h-c/h-es/h-g, chord Es=h-b/h-es/h-g, chord G=h-h/h-d/h-g
	
Over and Out
Hopper/SquoQuo