public final String getTitle(int xIdx, final IOHandler io) {
		if (!this.init) {
			align();
			if (this.duration == null) {
				calculateDuration(io);
			}
			if (this.title == null) {
				this.title = this.path.getFilename().substring(0,
						this.path.getFilename().length() - 4);
			}
		}
		final Integer x = this.renumberMap.get(xIdx);
		if (x != null) {
			return getTitle(x.intValue(), io);
		}
		final StringBuilder sb = new StringBuilder(60);
		sb.append("X:");
		sb.append(xIdx);
		sb.append("\r\n");
		sb.append("T: ");
		sb.append(this.title);

		if (this.n == 1) {
			/*
			 * name schema?
			 */
		} else {
			final Integer[] idx = this.partsIndices.get(Integer.valueOf(xIdx));
			sb.append(" ");
			sb.append(idx[1]);
			for (int i = 2; i < idx.length; i++) {
				sb.append(",");
				sb.append(idx[i]);
			}
			sb.append("/");
			sb.append(this.n);
		}
		final String partsName_ = this.partsName.get(xIdx);
		if (partsName_ != null) {
			sb.append(" ");
			sb.append(partsName_);
		}

		if (xIdx == 1) {
			sb.append(" (");
			sb.append(this.duration);
			sb.append(")");
		} else if (xIdx == 2) {
			sb.append(" ");
			final Calendar calendar = Calendar.getInstance();
			calendar.setTimeInMillis(this.path.toFile().lastModified());
			sb.append(Month.values()[calendar.get(Calendar.MONTH)]);
			sb.append(" ");
			sb.append(calendar.get(Calendar.DAY_OF_MONTH));
		}
		return sb.toString();
	}