☰ 回主選單

何嘉仁電子書:圖片+聲音是怎麼結合的(逆向筆記)

一、廠商(ebook.html)的做法

一句話:一張跨頁大圖當底圖,上面疊一堆「透明按鈕」,每個按鈕各自綁一個 mp3。

翻頁時載入的檔案(都在 CDOnlineApi/FileCollections/EBookFileUnzip/SF1_H5_student/):

檔案 作用
page.json 單元目錄(Phonics Fun / Topic 1…→ 對應頁碼)
directory.xml 頁面清單(Cover、4/5、6/7…)
book.xml(3.1 MB) 核心:每一頁的底圖、每個可點物件的座標與音檔
Resource/… 所有素材(頁面圖、小圖、mp3)

book.xml 裡一頁長這樣:

<Page pageName="6/7">
  <background><![CDATA[SB1_OriginalPicture/page6.jpg]]></background>   <!-- 底圖 -->

  <Sound>                                                              <!-- 透明熱點 -->
    <position x="-291.5809" y="219.5256"/>
    <size width="444.7999" height="513.92"/>
    <musicPath><![CDATA[Voice_book/01/P06_02_single.mp3]]></musicPath>
  </Sound>

  <Read>                                                               <!-- 整段播放 -->
    <musicPath><![CDATA[Voice_book/01/P06_allplay.mp3]]></musicPath>
    <Link>                                                             <!-- 逐句 highlight 腳本 -->
      <TodoEvent stepName="1" triggerTime="0.6" type="1">…</TodoEvent>  <!-- 0.6 秒:顯示 -->
      <TodoEvent stepName="1" triggerTime="4.9" type="0">…</TodoEvent>  <!-- 4.9 秒:隱藏 -->
    </Link>
  </Read>
</Page>

物件類型:Sound(單句發音)、Read(整段播放+時間軸 highlight)、GroupTrigger(一次播一整組)、JumpPage(跳頁)、loadImage(換圖)、WebLink/AFile(外部連結)。

座標系統(重要)

left% = (1024 + x − w/2) / 2048 × 100
top%  = (640  − y − h/2) / 1280 × 100      ← y 用減號
寬%   = w / 2048 × 100      高% = h / 1280 × 100

例:page 6/7 的 8 個 Sound 排成「每頁 2×2」,P06_01 Stand up 是 x=-744.4 y=+219.5 → left=2.79% top=12.77%(左上角那一格),P06_04 Line up 是 y=-310.2 → top=54.16%(下排),與圖片位置完全吻合。

二、本機播放器(自己做的版本)

廠商那支 ebook.html 要連他們的伺服器、要登入才會動,抓下來沒用,所以照同樣原理重做了一份:

何嘉仁SuperFun01_OK\
├ 播放器.html          ← 播放器本體
├ 播放器資料.js        ← 由 book.xml 轉出的資料(每頁熱點座標+音檔路徑)
├ 開啟播放器.bat        ← 雙擊開啟
├ 課本_StudentBook\    46 張跨頁圖
├ 習作_Homework\       30 張
└ 語音\                738 個 mp3(Voice_book / Voice_WB / Voice)

沒有重建的部分

廠商 Read 物件裡那段 TodoEvent 時間軸(播到第 0.6 秒把某個句子打亮、4.9 秒熄掉)已經做了,就是播放器裡的「逐句跟讀」:

遊戲模式(聽力找圖)

在播放器左側頁籤按「🎮 遊戲模式」,該頁會變成聽力遊戲:

頁面上的「句型練習/補充筆記/遊戲」按鈕

那些不是音檔,是 WebLink(外部連結)與 AFile+jumpPage(電子書內部跳頁),所以在純圖片的頁面圖上不會出現(是前端另外畫上去的)。

22 個外部連結已抓出來,放在播放器左側隱藏頁籤 →「本頁連結」下拉清單裡(面板打開後點「🔗 外部連結 N」展開),點項目會開新分頁;該頁有連結時,左側頁籤上會出現一顆小橘點提示。

按鈕 去哪
單字練習 word_p Quizlet 單字卡
句型練習 Sentence_p Quizlet 句型卡
遊戲 game Wordwall 小遊戲
線上測驗 test etest.hess.com.tw
cooleng Cool English

(補充筆記 與部分 遊戲 是內部跳頁,跳頁目標要靠他們前端的頁碼表,離線對不上,所以沒做。)

三、如果要換書/加書

book.xml 是每本書各自的,路徑規則:

https://bookonline.hess.com.tw/CDOnlineApi/FileCollections/EBookFileUnzip/<書號>/book.xml

把 <書號> 換掉(例如 SF1_H5_student),再用同樣的轉換就能生出新的 播放器資料.js。

挑戰(出題介面 + 分享連結)

老師用的頁面:出題介面.html(播放器左側頁籤也有「🏫 出題介面」按鈕)。

  1. 勾選要考的頁面(清單顯示每頁題數,0 題的頁面不能勾)
  2. 輸入關卡名稱 → 按「🔗 產生分享連結」
  3. 把連結傳給學生,例如 播放器.html?lv=17d2fca8

學生打開連結後是挑戰者模式:

排行榜資料在 ~/edu/runs.json,關卡定義在 ~/edu/levels.json(Pi 上),每個人只留最快的一次。

這頁由 說明_聲音與圖片怎麼結合.md 自動產生(原始 Markdown 仍在同資料夾)。