Intégrer des partitions MusicXML dans un e-book

Les mécanismes internes d’EPUB intéressants pour les partitions numériques – 1e partie

Comme dit dans notre article d’introduction Les partitions EPUB ont-elles un avenir ?, le format ePub permet nativement d’afficher des partitions numériques mais seulement si celles-ci sont représentées dans un format graphique : image gif, jpeg, png.., ou SVG. Ceux-ci n’étant pas des formats de partition structurés, l’intérêt en ce qui nous concerne est alors extrêmement limité.

Or ePub permet d’intégrer des dialectes XML étrangers, qui peuvent ou non être compris par le lecteur, selon ses possibilités.

Dans notre cas, le dialecte étranger peut être du MusicXML. Si le reader ne possède pas la faculté de le lire et de l’afficher, le fichier ePub devra proposer une alternative dans un format standard (image ou SVG).

Cette fonctionnalité sera à même d’offrir à partir d’un même fichier ePub:

  • Aux readers ePub généralistes, la possibilité d’afficher des partitions même si beaucoup de fonctionnalités en sont dégradées,
  • Aux readers ePub spécialisés, la possibilité de tirer pleinement profit d’un format de partitions structuré.

Comment mettre ça en œuvre dans un vrai doc epub ? 

Mais tout d’abord ….

Comment est structuré un epub ?

Comme dit à l’article précédent, un ePub est un conteneur d’autres fichiers.

En voici un qu’on pourra utiliser par la suite et qui a la structure minimum suivante:

Structure d'un ePub

Structure d’un ePub

Note sur la structure :

  • Le répertoire META-INF est obligatoire
  • Le fichier container.xml est obligatoire et contient le chemin de content.opf
  • Le fichier mimetype est obligatoire et ne contient qu’une seule ligne, invariable.
  • content.opf est obligatoire (mais peut être nommé différemment). Son contenu liste tous les fichiers de l’ePub, donne l’organisation des pages et fournit les métadonnées.
  • La structure sous OEBPS (dont le nom peut être changé), est libre. Nous avons séparé les images, des pages de l’e-book, des styles.
  • Nous avons donné à l’e-book un contenu qui nous semblait minimum :
    • Une table des matières (toc.xhtml),
    • Une couverture (cover.xhtml),
    • et une page de partition (partition.xhtml).

Nous avons nommé ce fichier ePub : partition.epub

On voit qu’un ePub est organisé en pages, à l’instar des pages d’un livre. Vous devez avoir un fichier .xtml par page de votre e-book.

Remarque sur la compatibilité epub2 :

Afin d’être compatible avec le format ePub2, il est d’usage de créer une deuxième table des matières au format NCX (toc.ncx), répondant aux spécifications du consortium Daisy.

Outils nécessaires

Quels sont les outils nécessaires à la mise en œuvre d’un ePub contenant une partition ?

Tous les outils recensés ci-dessous sont gratuits.

Editeurs ePub

Il existe deux éditeurs largement répandus car gratuits : Calibre (http://calibre-ebook.com/) et Sigil (http://code.google.com/p/sigil/)

Malheureusement, ceux-ci ne sont pas à ce jour compatibles avec le format ePub3.

Les posts qui vont suivre n’en nécessitent donc pas l’usage.

Décompresseur epub

Un fichier ePub est en fait un répertoire compressé avec zip, mais portant l’extension ‘.epub’.

Windows

Il peut donc être ouvert en renommant le fichier .epub en .zip et en le décompressant avec le décompresseur standard Windows.

Mac

Le plus simple est de lancer dans un terminal la ligne de commande :

unzip partition.epub

dans le répertoire où se trouve le fichier.

Compresseur epub 

Compresser un ePub, diffère d’une compression normale d’un dossier, en ce qu’un des fichiers (le fichier mimetype qu’on verra plus tard), ne doit lui-même pas être compressé.

Windows

Par conséquent sous Windows, la commande ‘Envoyer vers/Dossier compressé’ ne peut pas être utilisée.

On peut utiliser à la place :

http://sourceforge.net/projects/epubpack/

Mac

Compresser un epub sur Mac nécessite deux choses :

  • que le fichier mimetype soit non compressé
  • que les fichiers Mac OS  .DS_Store soient exclus de l’archive

En étant placé dans le répertoire partition donné ci-dessus, on peut obtenir l’epub en lançant dans un terminal les commandes :

zip -X ../partition.epub mimetype
zip -rq ../partition.epub META-INF OEBPS -x \*.DS_Store

Validateurs ePub 2 & 3

Lorsque l’ePub aura été créé, il faut le valider pour s’assurer qu’il peut s’ouvrir dans un lecteur ePub3.

Il est possible soit d’utiliser un validateur en ligne, soit d’en installer un sur son propre système.

En ligne

Via le validateur de l’IDPF, lui-même :

http://validator.idpf.org/

Sur son poste

Soit via Pagina, qui est très simple à utiliser et très rapide:

http://www.pagina-online.de/produkte/epub-checker/

Readers ePub3

Afin de lire l’epub produit, on peut utiliser un reader ePub3 assez répandu actuellement : Readium (http://readium.org/) qui s’installe comme plugin dans Chrome.

Les îlots de données XML et les instructions conditionnelles

Il est possible d’utiliser dans chaque page .xhtml un élément epub : switch qui pourra donc nous permettre d’embarquer du MusicXML dans du XHTML, avec la possibilité – ou non – pour le lecteur d’interpréter cette partition.

Si le lecteur supporte l’élément <epub:switch> (ce qui est toujours le cas avec un reader ePub3) et MusicXML, le MusicXML sera pris en compte par le reader. Il y aura donc un îlot XML dans le fichier XHTML. Sinon, une alternative (« fallback » en anglais) sera utilisée.

Le mécanisme de fallback permettra en cas d’impossibilité d’interpréter le MusicXML, d’afficher la partition préférablement sous format PNG (ou SVG)

De plus, il existe deux variantes pour intégrer un dialecte XML dans un document ePub : Soit au sein d’un fichier XHTML (îlots inline), soit lorsque la taille du fragment écrit dans le dialecte est importante ou que la structuration le nécessite, dans un document séparé (on parle alors d’îlots out-of-line). Le switch renvoie alors vers un autre fichier contenu dans l’epub.

Les îlots inline

Exemple avec MusicXML et fallback en PNG

Dans notre exemple, le fallback au fragment MusicXML est une image PNG.

Insertion d’une image de partition dans l’ePub

Nous avons placé une image (représentant un simple DO 4 (serrure)) :

do serrure

do serrure

sous :

images/doserrure.png

Cela nécessite de mentionner ce fichier dans l’élément <manifest> de content.opf, de la manière suivante :

<item href="images/doserrure.png" id="notedo" media-type="image/png"/>
Modification de partition.xhtml pour insérer le fragment MusicXML et l’alternative .PNG

Nous pouvons modifier le fichier partition.xhtml comme suit:

Dans l’en-tête on rajoute :

<?xml version='1.0' encoding='utf-8'?> 
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops">

Il est nécessaire de déclarer ce namespace afin d’utiliser via le préfixe epub le vocabulaire switch/case car ce n’est pas du xhtml.

Puis dans le corps …

<body>
 <epub:switch id="musicXML_Example">
  <epub:case required-namespace="http://www.musicxml.org/xsd/MusicXML">

Le champ required-namespace doit identifier le dialecte XML que le reader doit supporter pour traiter le contenu de l’élément <epub:case>.

Nous avons utilisé le namespace http://www.musicxml.org/xsd/MusicXML comme cela est préconisé dans le schéma de MusicXML (musicxml.xsd).

A l’intérieur de l’élément <epub:case>, nous avons précisé : La version 3 de MusicXML car c’est la plus récente, et le préfixe (que nous avons nommé xsm) pour le dialecte MusicXML à l’intérieur de l’élément score-partwise car même si l’îlot XML ne doit pas être valide vis à vis de son schéma, il doit être bien formé, et dans notre cas conforme à du XHTML.

<score-partwise version="3.0" xmlns:xsm="http://www.musicxml.org/xsd/MusicXML">

Le fragment MusicXML correspondant à un do serrure est le suivant (nous avons préfixé l’attribut id pour éviter l’erreur de parsing duplicate id: P1) :

<part-list>
   <score-part xsm:id="P1">
      <part-name>Music</part-name>
   </score-part>
</part-list>
<part xsm:id="P1">
   <measure number="1">
     <attributes>
          <divisions>1</divisions>
          <key>
            <fifths>0</fifths>
          </key>
          <time>
            <beats>4</beats>
            <beat-type>4</beat-type>
          </time>
          <clef>
            <sign>G</sign>
            <line>2</line>
          </clef>
     </attributes>
     <note>
      <pitch>
        <step>C</step>
        <octave>4</octave>
      </pitch>
      <duration>4</duration>
      <type>whole</type>
     </note>
  </measure>
 </part>
</score-partwise>
</epub:case>

L’alternative au fragment MusicXML est donc une image affichant la même note mais sous forme d’image :

 <epub:default>
  <img src="../images/doserrure.png"/>

La source pour l’image est relative à la localisation du fichier l’incluant (ici partition.xhtml). Par rapport à ce fichier se trouvant sous pages, il faut remonter d’un niveau pour redescendre dans le répertoire images contenant doserrure.png

 </epub:default>
</epub:switch>
</body>
</html>
Modifier content.opf

Nous avons utilisé un élément ePub (switch) dans un fichier XHTML, cela doit être précisé explicitement dans le fichier OPF de l’e-book, sous la forme d’une propriété:

<item id="doc" href="partition.xhtml" properties="switch" media-type="application/xhtml+xml"/>

Les éléments de l’e-book sont prêts. Vous pouvez compresser l’ePub comme indiqué ci-dessus, puis le valider en ligne ou via Pagina.

Vous pouvez enfin le charger et le lire via Readium. Que voyez-vous ??

Affichage de la partition ePub sous Readium...

Affichage de la partition ePub sous Readium…

Bien évidemment Readium ne connaît pas MusicXML, et vous affichera l’image .PNG (pas vraiment spectaculaire, je reconnais). Mais vous aurez constaté que le mécanisme de fallback a bien été mis en œuvre ….

Les îlots out of line

Nous partons du constat que les partitions MusicXML sont des fichiers séparés et bien formés existant indépendamment de leur intégration dans un e-book. Il est donc plus naturel de les référencer depuis une page de l’e-book plutôt que d’en inclure des fragments.

Dans ce cas, l’élément <epub:switch> renvoie vers un autre fichier de l’ePub.

Exemple avec MusicXML et fallback en PNG

Créer doserrure.xml

On peut reprendre le code inline et mettre toute la partie score-partwise dans un doserrure.xml sous « pages », avec en tête :

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 3.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
Modifier content.opf

MusicXML 3.0 a deux media types enregistrés:

  • application/vnd.recordare.musicxml pour les fichiers compressés (.mxl)
  • application/vnd.recordare.musicxml+xml pour les fichiers non compressés (.xml)

Dans notre exemple, nous avons un fichier MusicXML non compressé et rajouté la ligne suivante dans le manifest de l’OPF :

<item id="partitxml" href="pages/doserrure.xml" media-type="application/vnd.recordare.musicxml+xml"/>
Modifier partition.xhtml

Dans partition.xhtml, à la place du fragment MusicXML, la partie <epub:case>, référence directement le fichier externe comme suit :

<epub:switch id="musicXML_Example">
 <epub:case required-namespace="http://www.musicxml.org/xsd/MusicXML">
   <object width="400" height="400" data="doserrure.xml">This is an alternate text, for browsers that do not support this tag</object>
 </epub:case>

Vous pouvez reconstruire l’ePub comme précédemment, le valider et le lire dans Readium.

Vous lirez à nouveau le recueil de partitions contenant l’image PNG du do serrure.

A suivre… dans Des partitions MEI dans un eBook

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *