private void loadAllAudioFiles(File dir, int depth) {
		  // listOfSongs.clear(); // remove comment if we want loading audio files to destroy the current list of songs
		  if(depth==2) {return;} // prevent too much recursion (searching through too many sub-directories)
		  
		  // prevents user from selecting a drive, C:\ D:\ etc., which will crash the program -> too many files
		  for(File drive : File.listRoots()) {
			  if (dir == drive) {
					// There is no easy way to display a message dialog to the user
					// without creating another stage
					return;
			  }
		  }

		  if(dir!=null) { // null can be passed in if the user cancels the directory-chooser dialog
			  try {
				  File[] allFiles = dir.listFiles();
				  for(File f : allFiles) {
					  if(f.isFile() && (f.getName().endsWith(".wav") || f.getName().endsWith(".mp3"))) {
						  String songNameNoExt = f.getName().substring(0, f.getName().indexOf(".")); // Drops of Jupiter, not Drops of Jupiter.mp3
						  songNameLocMap.put(songNameNoExt, f.getAbsolutePath());
						  listOfSongs.add(songNameNoExt);
					  }
					  else if(f.isDirectory()) {
						  loadAllAudioFiles(f,++depth); // recursive call to search sub-directories
					  }
				  }
				  
			  }
			  catch(SecurityException se) { } // i.e. permissions not granted to read specified directory
			  catch(Exception e) { } // error occurred in loading directory or adding file to map
		  }
		  else { /* Do nothing */ /* Maximum depth may have been reached */}
	  }