2017/12/12(火)「青空朗読」の紹介【音声同期Epub】

こちらは「青空文庫 Advent Calendar 2017」の11日目の記事です。10日目は @null さんの「null」でした。(つまり発表者がいませんでした😭)

Qiitaだと直接はプログラミングに関係のない記事を書くと削除されるおそれがあるので、決して他者に消されぬようにと、このブログを用意していて随分と間が空いてしまいました。

今回は「音声同期Epub」を中心に「青空朗読」を紹介をしたいと思います。

青空朗読とは

「青空文庫」の作品の…

  • 朗読を聴ける
  • 朗読を投稿できる

Webサイトです。

朗読作品を探す

以下の画像の通り「作品名」「作家名」「朗読担当者名」「ジャンル」「朗読時間」「(あらかじめ用意された)キーワード(タグのようなもの)」で探すことができます。

スクリーンショット 2017-12-11 22.27.50.png

朗読を聴く

Webサイト上で聴く

大多数の方がこれで充分かと思います。audio要素で出力されるインターフェースでよしなに聴くのみです。

写真 2017-12-11 22 32 42.png

音声同期Epubファイルで聴く

ファイルの開き方は「Epub(イーパブ)のご利用方法」に書いてあるので省略します。開くと以下のように読み上げ中の部分がハイライトされます。著作権法上、音声までは収録できませんでした。😅

文字が読めない方や子どもの反応が良かった云々という話を「青空文庫20周年記念シンポジウム」で聞いたような気がします。(記憶が曖昧です。)

音声同期Epubファイルの中身を見てみる

EPUBファイルはZIPファイルなのでMac上で拡張子を「zip」に変えてダブルクリック……ではどういうわけか「cpgz」という拡張子の謎のファイルが生成されたので、コマンドラインから「unzip」を唱えました。

ディレクトリ構造

treeコマンドでファイル構成を見ると、以下の通り、一般的なEPUBファイルという具合でした。

epub/
├── META-INF
│   └── container.xml
├── item
│   ├── image
│   │   └── cover.jpg
│   ├── js
│   │   ├── p-001.xhtml.smil.js
│   │   └── rb_smil_emulator.js
│   ├── navigation-documents.xhtml
│   ├── standard.opf
│   ├── style
│   │   ├── book-style.css
│   │   ├── image-center.css
│   │   ├── style-advance.css
│   │   ├── style-reset.css
│   │   └── style-standard.css
│   └── xhtml
│       ├── p-001.smil
│       ├── p-001.xhtml
│       ├── p-caution.xhtml
│       ├── p-colophon.xhtml
│       ├── p-cover.xhtml
│       └── rd115.mp3
└── mimetype

6 directories, 18 files

どのように音声同期を実現しているか

Synchronized Multimedia Integration Language(SMIL)」と「EPUB Media Overlays 3.0」で実現されていました。

前者はWikipediaの記事では以下のように説明されています。

Synchronized Multimedia Integration Languageは、WWW上でマルチメディアコンテンツを表現するためのマークアップ言語の一つである。静止画、動画、音声、文字(テキスト)などの、位置レイアウト、時間軸上でのレイアウトを、Extensible Markup Language (XML) フォーマットで記述することで統合し、再生させることができる。略称はSMILで、スマイルと読む。同期マルチメディア統合言語と日本語訳されることもある。

後者の仕様は日本語版では以下のように説明されてます。

EPUB Media Overlays 3.0 は、EPUB Content Document と同期する音声表現用に、[SMIL](同期マルチメディア統合言語)、Package Document、EPUBR Style Sheet、および EPUB Content Document の使用方法を定義する。

つまり、「EPUB Media Overlays 3.0」の仕様に従って「Synchronized Multimedia Integration Language」でどういうタイミングで同期するかを記述することでEPUBリーダーでよしなに再生できるようになるのでしょう。

rb_smil_emulator.js

EPUBファイルに含まれていたこのJavaScriptファイルは「EPUB Media Overlays」仕様を適切にサポートしていないプラットフォーム上でタップして再生を可能にするライブラリのようです。

This Javascript file enables the tap-to-play function on those platforms that do not properly support the EPUB 3 Media Overlay specification (most notably, Apple iBooks).

SMILファイルでの同期の記述

p-001.smil ファイルの中身を見ると、朗読ファイルである rd115.mp3 の再生開始位置と再生終了位置がテキストごとに記述されていました。

<?xml version="1.0" encoding="UTF-8"?>
<smil xmlns:epub="http://www.idpf.org/2007/ops" xmlns="http://www.w3.org/ns/SMIL" version="3.0">
    <body>
        <seq id="s000001" epub:textref="p-001.xhtml">
            <par id="p000001">
                <text src="p-001.xhtml#S000001"/>
                <audio src="rd115.mp3" clipBegin="0.000" clipEnd="2.828"/>
            </par>
            <par id="p000002">
                <text src="p-001.xhtml#f000001"/>
                <audio src="rd115.mp3" clipBegin="2.828" clipEnd="6.287"/>
            </par>
            <par id="p000003">
                <text src="p-001.xhtml#f000002"/>
                <audio src="rd115.mp3" clipBegin="6.287" clipEnd="11.416"/>
            </par>
            ・・・
        </seq>
    </body>
</smil>

text要素のsrc属性でどのテキストかが指定されていました。p-001.xhtmlhead -n 18 で見ると以下の通りになっています。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html xmlns:epub="http://www.idpf.org/2007/ops" xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" class="vrtl">
<head>
<meta charset="UTF-8"/>
<title>注文の多い料理店</title>
<link href="../style/book-style.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../js/rb_smil_emulator.js"></script>
<script type="text/javascript" src="../js/p-001.xhtml.smil.js"></script>
</head>
<body class="p-main">
<div class="main">
<p><span id="S000001"/><span id="f000001">宮沢賢治 作</span></p>
<p><br/></p>
<p><span class="bold" id="f000002">注文の多い料理店</span></p>
<p><br/></p>
<p><br/></p>
<p> <span id="f000003">二人の若い紳士が、</span><span id="f000004">すつかりイギリスの兵隊のかたちをして、</span><span id="f000005">ぴか〳〵する鉄砲をかついで、</span><span id="f000006"><ruby>白熊<rt>しろくま</rt></ruby>のやうな犬を二<ruby>疋<rt>ひき</rt></ruby>つれて、</span><span id="f000007">だいぶ山奥の、</span><span id="f000008">木の葉のかさ〳〵したとこを、</span><span id="f000009">こんなことを<ruby>云<rt>い</rt></ruby>ひながら、</span><span id="f000010">あるいてをりました。</span></p>

このようにしてテキストと音声の同期が行われていることが確認できました。

朗読の投稿

メールで送る形式を取られています。音声ファイルは「宅ふぁいる便」「データ便」などのインターネットのファイル転送サービスを利用するして送付するようです。「掲載の可否は試聴した上での判断」とあるように、品質のチェックはやや厳しそうです。

投稿した朗読ファイルの権利回りの詳細は不明です。今度、お会いする機会があれば訊いてみたいところです。

まだまだ「青空文庫 Advent Calendar 2017」への参加者を大募集中です!