@Override
	  public void start(final Stage primaryStage) {
		  stage = primaryStage;
		  primaryStage.setTitle("Visual Eyes"); // clever name sounds like "visualize"
		  Scene scene = new Scene(root);
		  GridPane interfaceElements = new GridPane();
		  interfaceElements.setAlignment(Pos.TOP_LEFT);
		  interfaceElements.setVgap(5);
		  interfaceElements.setHgap(5);
		  
		  HBox topBarElements = new HBox(8); // the number in the constructor specifies margin between each element
		  topBarElements.getChildren().addAll(visualizationChooserLabel,visualizationChooserComboBox/*,directoryBrowseButton*/);
		  
		  VBox controlElements = new VBox();
		  
		  VBox playListControls = new VBox();
		  directoryBrowseButton.setMinWidth(250d);
		  playListControls.getChildren().addAll(songListView,directoryBrowseButton,RecordButton);
		  
		  HBox songControls = new HBox();
		  songControls.getChildren().addAll(playButton,pauseButton);
		  songControls.setAlignment(Pos.CENTER);
		  
		  HBox songDurationDisplay = new HBox();
		  slideDisplay.setMinWidth(400d);
		  songDurationDisplay.getChildren().addAll(durationLabel,slideDisplay);
		  
		  controlElements.getChildren().addAll(songControls/*,songDurationDisplay*/);
		  
		  directoryBrowseButton.setOnAction(new EventHandler<ActionEvent>() {
			  @Override
			  public void handle(ActionEvent e) {
				  File dir = directoryBrowse.showDialog(primaryStage);
				  loadAllAudioFiles(dir,0);
				  if (mediaPlayer == null){
					  mediaPlayer = new MediaPlayer(new Media("file:/"+encodeURL(songNameLocMap.values().iterator().next())));
			    	  spectrumListener = new SpectrumListener();
			    	  mediaPlayer.setAudioSpectrumListener(spectrumListener);
			    	  mediaPlayer.play();
				  }
				  UpdateVisualization();
			  }
		  });
		  
		  playButton.setOnAction(new EventHandler<ActionEvent>() {
			  @Override
			  public void handle(ActionEvent e) {
				  try{
					  mediaPlayer.play();
				  }catch(Exception e1){
					  
				  }
			  }
		  });
		  pauseButton.setOnAction(new EventHandler<ActionEvent>() {
			  @Override
			  public void handle(ActionEvent e) {
				  try{
					  mediaPlayer.pause();
				  }catch(Exception e1){
				  }
			  }
		  });
		  
		  RecordButton.setOnAction(new EventHandler<ActionEvent>() {
			  @Override
			  public void handle(ActionEvent e) {
				  SpectrumMicrophone();
			  }
		  });
		  
		  visualizationChooserComboBox.valueProperty().addListener(new ChangeListener<String>() {
	            public void changed(ObservableValue<? extends String> ov,
	                String old_val, String new_val) {
	                	UpdateVisualization();
	            }
	        });
		  
		  songListView.getSelectionModel().selectedItemProperty().addListener(
				  new ChangeListener<String>() { // event-listener for the user selecting a different song from the listview
					  public void changed(ObservableValue<? extends String> ov,
							  String old_val, String new_val) {
						  StartNewSong(encodeURL(songNameLocMap.get(new_val)));
					  }
				  });
		  
		  interfacePane.setTop(topBarElements);
		  interfacePane.setRight(playListControls);
		  visualizationPane.setBottom(controlElements);
		  Region spacer = new Region();
		  spacer.setMinSize(300, 300);
		  visualizationPane.setCenter(spacer);
		  interfacePane.setCenter(visualizationPane);
		  root.getChildren().add(interfacePane);
		  primaryStage.setScene(scene);
		  visualizationChooserComboBox.getSelectionModel().selectFirst();
		  primaryStage.show();
	  }