private void transcribe() {
    String workNumber = score.getWorkNumber();
    String workTitle = score.getWorkTitle();
    String movementTitle = score.getMovementTitle();
    String composer = score.getComposer();
    String lyricist = score.getLyricist();
    boolean headerAvailable = false;

    if (isNonEmpty(workNumber)) {
      printCenteredLine(new Text(workNumber) {
                          @Override public String getDescription() {
                            return "Work number";
                          }
                        });
      headerAvailable = true;
    }
    if (isNonEmpty(workTitle)) {
      printCenteredLine(new Text(workTitle) {
                          @Override public String getDescription() {
                            return "The work title";
                          }
                        });
      headerAvailable = true;
    }
    if (isNonEmpty(movementTitle)) {
      printCenteredLine(new Text(movementTitle) {
                          @Override public String getDescription() {
                            return "The movement title";
                          }
                        });
      headerAvailable = true;
    }
    if (isNonEmpty(composer) && isNonEmpty(lyricist)) {
      BrailleList line = new BrailleList();
      line.add(new Text("Music by"));
      line.add(new Space());
      line.add(new ComposerName(composer));
      printCenteredLine(line);
      line = new BrailleList();
      line.add(new Text("Lyrics by"));
      line.add(new Space());
      line.add(new Text(lyricist) {
                 @Override public String getDescription() {
                   return "The name of the lyricist";
                 }
               });
      printCenteredLine(line);
      headerAvailable = true;
    } else if (isNonEmpty(composer)) {
      printCenteredLine(new ComposerName(composer));
      headerAvailable = true;
    }
    if (headerAvailable) newLine();

    switch (options.getMethod()) {
    case SectionBySection:
      strategy = new SectionBySection();
      break;
    case BarOverBar:
      strategy = new BarOverBar();
      break;
    default:
      throw new AssertionError(options.getMethod());
    }
    strategy.transcribe(this);
  }