private String getDescriptionFromSoundfileName(String soundfileName)
  {
    logger.logDebug("ENTERED makeDescriptionFromFilename ...");

    // some self-protection
    if (soundfileName == null)
      return "";
    if (soundfileName.trim().equals(""))
      return "";

    logger.logDebug("sound filename init: " + soundfileName);

    // protection: only allow letters, numbers, decimals, hyphens, and underscores
    soundfileName = soundfileName.replaceAll("[^a-zA-Z0-9_.-]", "");
    logger.logDebug("sound filename replaced: " + soundfileName);

    // get the basename
    // assume the filename is split by the last "."
    int decimalLocation = soundfileName.lastIndexOf(".");
    if (decimalLocation <= 0)
      return "";
    String baseFilename = soundfileName.substring(0, decimalLocation);

    logger.logDebug("base filename: " + baseFilename);
    // split the base filename by "-" characters ("synth", "zingers", "2")
    String[] words = null;
    if (baseFilename.indexOf("-") > 0)
    {
      words = baseFilename.split("[.-]");
    }
    else if (baseFilename.indexOf("_") > 0)
    {
      words = baseFilename.split("[._]");
    }
    else
    {
      // hmm, nothing to split on, so we just have one word, like "foo", from "foo.wav"
      words = new String[1];
      words[0] = baseFilename;
    }

    for (int i = 0; i < words.length; i++)
    {
      logger.logDebug("word[i]: " + words[i]);
    }

    logger.logDebug("do uppercase ...");
    
    // uppercase the first letter in each word
    for (int i = 0; i < words.length; i++)
    {
      String word = words[i];
      word = word.toLowerCase();
      String firstLetterAsUpper = word.substring(0, 1).toUpperCase();
      words[i] = firstLetterAsUpper + word.substring(1);
      logger.logDebug("word[i]: " + words[i]);
    }

    logger.logDebug("add spaces to words");
    StringBuilder description = new StringBuilder();
    for (int i = 0; i < words.length; i++)
    {
      description.append(words[i]);
      if (i < words.length - 1)
      {
        description.append(" ");
      }
    }

    logger.logDebug("final description: '" + description.toString() + "'");
    return description.toString();
  }