code: protected void parseInlineIcyTags(byte[] tagBlock)
  	{
  		String blockString = null;
  		try
  		{
  			blockString = new String(tagBlock, "UTF-8");
  		}
  		catch (UnsupportedEncodingException e)
  		{
  			blockString = new String(tagBlock);
  		}
  		StringTokenizer izer = new StringTokenizer(blockString, INLINE_TAG_SEPARATORS);
  		while (izer.hasMoreTokens())
  		{
  			String tagString = izer.nextToken();
  			int separatorIdx = tagString.indexOf('=');
  			if (separatorIdx == -1) continue; // bogus tagString if no '='
  			// try to strip single-quotes around value, if present
  			int valueStartIdx = (tagString.charAt(separatorIdx + 1) == '\'') ? separatorIdx + 2 : separatorIdx + 1;
  			int valueEndIdx = (tagString.charAt(tagString.length() - 1) == '\'') ? tagString.length() - 1 : tagString.length();
  			String name = tagString.substring(0, separatorIdx);
  			String value = tagString.substring(valueStartIdx, valueEndIdx);
  			addTag(new IcyTag(name, value));
  		}
  	}
docs: Parse metadata from an in-stream "block" of bytes, add
  a tag for each one.
  <p>
  Hilariously, the inline data format is totally different
  than the top-of-stream header.  For example, here's a
  block I saw on "Final Fantasy Radio":
  <pre>
  StreamTitle='Final Fantasy 8 - Nobuo Uematsu - Blue Fields';StreamUrl='';
  </pre>
  In other words:
  <ol>
  <li>Tags are delimited by semicolons
  <li>Keys/values are delimited by equals-signs
  <li>Values are wrapped in single-quotes
  <li>Key names are in SentenceCase, not lowercase-dashed
  </ol>