資料説明の収録ファイル(開発中)
現在開発中です。 2026年11月2日確認の資料説明PoC作業ブランチの保存形式です。製品・マニュアルの主版0.36.4は維持しており、通常配布への追加リリースを意味しません。
概要
資料説明の収録・再生は、ChatGPTタブで実際に再生された音声と、取得できた音声字幕、資料の表示画像、説明箇所と時刻を保存します。再生は保存データだけで行い、AIによる説明文生成や音声合成を行いません。
2026年11月2日の修正では、取得許可がない場合にChromeの標準タブ共有から音声へ接続できるようにしました。共有元の識別は接続中だけの一時情報で、収録JSONや通常ZIPへ追加しません。録音へ渡すのは音声だけで、共有時の画面動画やマイク音声はこのファイルへ収録しません。保存形式版1と既存の項目・参照関係は維持します。
このデータは記憶・会話・情報源のDuckDBテーブルへ追加しません。プロジェクトIDや記憶IDとの関連付けもありません。音声字幕は既存のTimeline会話記録とは独立しています。
利用条件
対応する開発ビルドのMyMemAIVoiceChatで作成・再生します。旧版のMyMemや、一般のJSON閲覧ツールで読み込んだだけでは再生できません。保管・移動には「収録ファイルを書き出す」を使います。
使い方
保存場所とファイル構成
ブラウザー内では、拡張のOPFS(オリジン専用ファイル領域)へ保存します。
mymem-presentations-v1/
└── <収録ID>/
├── audio.bin
├── timeline.json
└── manifest.json
audio.bin は実際の収録音声のバイナリです。拡張子で形式を判定せず、manifest.audio.mimeType を参照します。timeline.json は資料画像と時刻付きイベントです。manifest.json を最後に保存し、一覧には保存完了を確認できる収録だけを表示します。保存途中の失敗や非対応の形式を、成功した収録として表示しません。
書き出す .mymem-presentation.json は、最上位に manifest、timeline、audioBase64 を持つ1つのJSONです。ブラウザー内の audio.bin をBase64にして同梱し、音声を再生成・再圧縮しません。
manifestの項目
| 項目 | 保存内容と再生画面での役割 |
|---|---|
format / version | mymem-presentation / 1。製品版や通常ZIPの形式番号とは独立 |
id | 収録全体のUUID。保存フォルダーと一覧の選択を対応付ける |
title / createdAt | 収録名と作成日時。保存済み一覧の表示・新しい順の並びに使う |
durationMs | 待ち時間を含む収録元の長さ。単位はミリ秒 |
audio.mimeType / bytes / sha256 | 音声形式・バイト数・SHA-256。読込時にサイズと音声の整合を検証 |
pageCount / captionCount | 保存した表示画面数と音声字幕の発話シーケンス数。字幕の文字数ではない |
interrupted | 接続中断・上限到達・発話途中の終了などを含む収録の印 |
trimSilence | 長い待ち時間を詰める選択 |
gapMs | 再生範囲の間に置く固定の無音。通常は短縮ONで300、OFFで0 |
ranges[] | 元音声から再生する範囲。各項目の startMs と endMs は元音声上の時刻 |
長い待ち時間を詰める場合も、元音声は全体を保持します。収録時の音量から発話範囲を作り、前200ms・後300msを残し、範囲間が1.5秒未満ならつなげます。再生位置から元音声の時刻への対応は、この確定済みの範囲と gapMs で毎回同じように計算します。再生時に発話判定をやり直しません。
timeline.pagesの項目とIDの関係
| 項目 | 保存内容と用途 |
|---|---|
id | 収録時に取得した表示範囲のID。events[].pageId の参照先 |
sourceUrl / title / 任意の pageNumber | 元の公開URL・タイトル・ページ番号。再生時にURLを開いたり再取得したりしない |
text | 取得した資料本文。既存の記憶本文とは別の複製 |
viewport.width / height | 取得時の表示範囲。ポインタ座標の基準 |
image.dataUrl / width / height | PNG画像と画像サイズ。画面表示にそのまま使う |
targets[] | 説明対象の id、text、kind(text/figure)、任意の role(heading/body/caption/figure)、rect(x/y/width/height) |
targetId は同じ pageId の targets[].id とだけ対応します。元サイトの永続的なDOM IDやDuckDBの主キーではありません。同じ資料を再取得すると別の表示範囲として保存でき、録音ごとの画像・要素・時刻が一緒に残ります。
timeline.eventsの項目
全イベントに type と atMs があり、atMs は音声収録開始からのミリ秒です。時刻順に保存します。
| type | 追加項目と再生時の動作 |
|---|---|
page | pageId。この表示画像へ切り替え、それまでのポインタを消す |
target | pageId、targetId、任意の settings。同じ画面内の対象へポインタを表示。targetId: null は非表示 |
caption | 任意の pageId、sequence、text、replace。ChatGPTの音声字幕を表示 |
settings は enabled(有効状態)、color(色)、size(大きさ)、highlight(強調表示)、animate(アニメーション)、duration(移動時間)の設定です。再生画面は収録した矩形と色・強調表示で説明箇所を表示します。caption.sequence は同じ発話の字幕更新を結ぶ番号で、MyMemの会話IDではありません。replace: false は直前の同じシーケンスの字幕へ追加し、true は訂正された全文で置き換えます。全文表示はシーケンスごとの最終字幕を連結します。
字幕の時刻は取得した時刻であり、単語ごとの音声認識・強制アライメント結果ではありません。字幕を取得できなかった収録は captionCount: 0 として、その旨を画面へ表示します。準備原稿を実際の発話として保存することはありません。
通常ZIP・SQL・旧形式との違い
通常バックアップZIPは、既存のDuckDB・IndexedDB・選ばれた設定を収録します。このOPFSフォルダーは対象外です。通常ZIPの復元だけでは収録を移せません。必要な収録を個別に書き出し、新しい環境の「収録ファイルを読み込む」で戻します。インポート時は新しいUUIDのコピーとして保存し、同じ音声ハッシュ・ページID・要素ID・イベント時刻を保ちます。
以前の資料説明・準備原稿には、実際の音声と同期時刻の保存がありません。そこから収録済みデータへ自動移行はできず、あらためて本番収録します。未知の収録形式版は読込を拒否します。
DuckDBのDDL、キー、制約、インデックス、ビュー、通常ZIPのformatVersion 6と複製範囲は変更していません。この機能のための参照用SQLはなく、既存のSQLも変更不要です。構造と保存の照合は架空の資料2画面・合成音声・合成字幕で実施し、音声のハッシュ一致、独立ファイルの読込、ブラウザー再読み込み後の参照を確認しています。利用者のダンプは使用していません。
注意点
収録ファイルは暗号化された保管形式ではありません。音声、字幕、資料の本文・画像・URLが含まれます。共有範囲を確認して保管してください。ブラウザーのデータ削除や拡張の削除で失われる場合があるため、必要なものは書き出します。
現在の上限は1収録30分・音声40MiB・200画面・2000字幕シーケンス・30000イベント、書き出し/読込ファイル128MiBです。入力時は形式・上限・ID参照・時刻の順序・音声のサイズとSHA-256を検証します。上限や保存容量で失敗した場合、画面を閉じる前に書き出せるか確認してください。