From 055121639ebac937a9b971df47033525b8511936 Mon Sep 17 00:00:00 2001 From: ai-hpc Date: Thu, 11 Jun 2026 16:10:46 +0200 Subject: [PATCH] deploy/parakeet-stt: add edge-stt take-home (3-mode CLI + benchmark harness + results) Edge AI STT assessment under edge-stt/: one ./transcribe CLI over three modes (A offline parakeet.cpp, B streaming Zipformer, C multilingual LID), the WER/RTF/memory harness, locked deps, and measured LibriSpeech-300 results. Primary engine parakeet.cpp (tdt=q5_k 1.808%/61x, ctc=q8_0 2.383%/107x, +450MB); sherpa-onnx for Modes B/C and the reproducible alternative. Does not touch the production STT-server deploy files. --- deploy/parakeet-stt/edge-stt/.gitignore | 24 ++ deploy/parakeet-stt/edge-stt/ASSUMPTIONS.md | 93 ++++++ deploy/parakeet-stt/edge-stt/README.md | 100 ++++++ deploy/parakeet-stt/edge-stt/data/README.md | 8 + .../parakeet-stt/edge-stt/data/manifest.jsonl | 300 ++++++++++++++++++ .../edge-stt/data/manifest.sha256 | 1 + .../edge-stt/data_de/manifest_de.jsonl | 30 ++ deploy/parakeet-stt/edge-stt/docs/CONTRACT.md | 104 ++++++ .../parakeet-stt/edge-stt/docs/STAGE2-MEMO.md | 95 ++++++ .../parakeet-stt/edge-stt/docs/TRADE-OFFS.md | 66 ++++ deploy/parakeet-stt/edge-stt/requirements.in | 16 + .../parakeet-stt/edge-stt/requirements.lock | 28 ++ .../edge-stt/results/decisions.json | 156 +++++++++ .../edge-stt/results/dtype/RESULTS.md | 47 +++ .../edge-stt/results/dtype/f16_ctc.json | 22 ++ .../edge-stt/results/dtype/f16_tdt.json | 22 ++ .../edge-stt/results/dtype/q4_k_ctc.json | 22 ++ .../edge-stt/results/dtype/q4_k_tdt.json | 22 ++ .../edge-stt/results/dtype/q5_k_ctc.json | 22 ++ .../edge-stt/results/dtype/q5_k_tdt.json | 22 ++ .../edge-stt/results/dtype/q8_0_ctc.json | 22 ++ .../edge-stt/results/dtype/q8_0_tdt.json | 22 ++ .../edge-stt/results/feasibility.md | 157 +++++++++ .../edge-stt/results/m1/hyps.jsonl | 300 ++++++++++++++++++ .../edge-stt/results/m1/hyps_B.jsonl | 100 ++++++ .../edge-stt/results/m1/hyps_C_de.jsonl | 30 ++ .../edge-stt/results/m1/hyps_v3_de.jsonl | 30 ++ .../edge-stt/results/m1/report.json | 22 ++ .../edge-stt/results/m1/report_B.json | 22 ++ .../edge-stt/results/m1/report_B300.json | 22 ++ .../edge-stt/results/m1/report_C_de.json | 22 ++ .../edge-stt/results/m1/report_v3_de.json | 22 ++ .../edge-stt/results/m1/report_v3_en.json | 22 ++ .../edge-stt/results/parakeet/RESULTS.md | 46 +++ .../edge-stt/results/parakeet/bench300.json | 1 + .../edge-stt/results/parakeet/hyps_ctc.jsonl | 300 ++++++++++++++++++ .../edge-stt/results/parakeet/hyps_tdt.jsonl | 300 ++++++++++++++++++ .../edge-stt/results/parakeet/report_ctc.json | 22 ++ .../edge-stt/results/parakeet/report_tdt.json | 22 ++ .../edge-stt/scripts/bench_zip.sh | 22 ++ .../edge-stt/scripts/build-parakeet.sh | 44 +++ .../edge-stt/scripts/build-sherpa.sh | 72 +++++ .../parakeet-stt/edge-stt/scripts/get-data.sh | 30 ++ .../edge-stt/scripts/get-models.sh | 95 ++++++ .../edge-stt/scripts/mem-sample.sh | 8 + .../edge-stt/scripts/pk_dtype_bench.sh | 32 ++ .../edge-stt/scripts/pk_dtype_fetch.sh | 14 + .../edge-stt/scripts/pk_thread_sweep.sh | 40 +++ .../edge-stt/scripts/preflight.sh | 49 +++ .../edge-stt/scripts/prepare_data.py | 111 +++++++ deploy/parakeet-stt/edge-stt/scripts/score.sh | 7 + deploy/parakeet-stt/edge-stt/src/__init__.py | 0 .../edge-stt/src/common/__init__.py | 0 .../parakeet-stt/edge-stt/src/common/audio.py | 45 +++ .../edge-stt/src/common/memory_accountant.py | 268 ++++++++++++++++ .../edge-stt/src/common/wer_rtf_report.py | 134 ++++++++ .../edge-stt/src/entrypoint/__init__.py | 0 .../edge-stt/src/entrypoint/transcribe.py | 226 +++++++++++++ .../edge-stt/src/modes/__init__.py | 0 .../edge-stt/src/modes/a_offline/__init__.py | 0 .../src/modes/a_offline/parakeet_runner.py | 89 ++++++ .../edge-stt/src/modes/a_offline/runner.py | 180 +++++++++++ .../src/modes/b_streaming/__init__.py | 0 .../edge-stt/src/modes/b_streaming/runner.py | 119 +++++++ .../src/modes/c_multilingual/__init__.py | 0 .../src/modes/c_multilingual/residency.py | 129 ++++++++ .../src/modes/c_multilingual/runner.py | 113 +++++++ deploy/parakeet-stt/edge-stt/transcribe | 6 + 68 files changed, 4517 insertions(+) create mode 100644 deploy/parakeet-stt/edge-stt/.gitignore create mode 100644 deploy/parakeet-stt/edge-stt/ASSUMPTIONS.md create mode 100644 deploy/parakeet-stt/edge-stt/README.md create mode 100644 deploy/parakeet-stt/edge-stt/data/README.md create mode 100644 deploy/parakeet-stt/edge-stt/data/manifest.jsonl create mode 100644 deploy/parakeet-stt/edge-stt/data/manifest.sha256 create mode 100644 deploy/parakeet-stt/edge-stt/data_de/manifest_de.jsonl create mode 100644 deploy/parakeet-stt/edge-stt/docs/CONTRACT.md create mode 100644 deploy/parakeet-stt/edge-stt/docs/STAGE2-MEMO.md create mode 100644 deploy/parakeet-stt/edge-stt/docs/TRADE-OFFS.md create mode 100644 deploy/parakeet-stt/edge-stt/requirements.in create mode 100644 deploy/parakeet-stt/edge-stt/requirements.lock create mode 100644 deploy/parakeet-stt/edge-stt/results/decisions.json create mode 100644 deploy/parakeet-stt/edge-stt/results/dtype/RESULTS.md create mode 100644 deploy/parakeet-stt/edge-stt/results/dtype/f16_ctc.json create mode 100644 deploy/parakeet-stt/edge-stt/results/dtype/f16_tdt.json create mode 100644 deploy/parakeet-stt/edge-stt/results/dtype/q4_k_ctc.json create mode 100644 deploy/parakeet-stt/edge-stt/results/dtype/q4_k_tdt.json create mode 100644 deploy/parakeet-stt/edge-stt/results/dtype/q5_k_ctc.json create mode 100644 deploy/parakeet-stt/edge-stt/results/dtype/q5_k_tdt.json create mode 100644 deploy/parakeet-stt/edge-stt/results/dtype/q8_0_ctc.json create mode 100644 deploy/parakeet-stt/edge-stt/results/dtype/q8_0_tdt.json create mode 100644 deploy/parakeet-stt/edge-stt/results/feasibility.md create mode 100644 deploy/parakeet-stt/edge-stt/results/m1/hyps.jsonl create mode 100644 deploy/parakeet-stt/edge-stt/results/m1/hyps_B.jsonl create mode 100644 deploy/parakeet-stt/edge-stt/results/m1/hyps_C_de.jsonl create mode 100644 deploy/parakeet-stt/edge-stt/results/m1/hyps_v3_de.jsonl create mode 100644 deploy/parakeet-stt/edge-stt/results/m1/report.json create mode 100644 deploy/parakeet-stt/edge-stt/results/m1/report_B.json create mode 100644 deploy/parakeet-stt/edge-stt/results/m1/report_B300.json create mode 100644 deploy/parakeet-stt/edge-stt/results/m1/report_C_de.json create mode 100644 deploy/parakeet-stt/edge-stt/results/m1/report_v3_de.json create mode 100644 deploy/parakeet-stt/edge-stt/results/m1/report_v3_en.json create mode 100644 deploy/parakeet-stt/edge-stt/results/parakeet/RESULTS.md create mode 100644 deploy/parakeet-stt/edge-stt/results/parakeet/bench300.json create mode 100644 deploy/parakeet-stt/edge-stt/results/parakeet/hyps_ctc.jsonl create mode 100644 deploy/parakeet-stt/edge-stt/results/parakeet/hyps_tdt.jsonl create mode 100644 deploy/parakeet-stt/edge-stt/results/parakeet/report_ctc.json create mode 100644 deploy/parakeet-stt/edge-stt/results/parakeet/report_tdt.json create mode 100644 deploy/parakeet-stt/edge-stt/scripts/bench_zip.sh create mode 100644 deploy/parakeet-stt/edge-stt/scripts/build-parakeet.sh create mode 100755 deploy/parakeet-stt/edge-stt/scripts/build-sherpa.sh create mode 100755 deploy/parakeet-stt/edge-stt/scripts/get-data.sh create mode 100644 deploy/parakeet-stt/edge-stt/scripts/get-models.sh create mode 100755 deploy/parakeet-stt/edge-stt/scripts/mem-sample.sh create mode 100644 deploy/parakeet-stt/edge-stt/scripts/pk_dtype_bench.sh create mode 100644 deploy/parakeet-stt/edge-stt/scripts/pk_dtype_fetch.sh create mode 100644 deploy/parakeet-stt/edge-stt/scripts/pk_thread_sweep.sh create mode 100755 deploy/parakeet-stt/edge-stt/scripts/preflight.sh create mode 100755 deploy/parakeet-stt/edge-stt/scripts/prepare_data.py create mode 100755 deploy/parakeet-stt/edge-stt/scripts/score.sh create mode 100644 deploy/parakeet-stt/edge-stt/src/__init__.py create mode 100644 deploy/parakeet-stt/edge-stt/src/common/__init__.py create mode 100644 deploy/parakeet-stt/edge-stt/src/common/audio.py create mode 100644 deploy/parakeet-stt/edge-stt/src/common/memory_accountant.py create mode 100644 deploy/parakeet-stt/edge-stt/src/common/wer_rtf_report.py create mode 100644 deploy/parakeet-stt/edge-stt/src/entrypoint/__init__.py create mode 100644 deploy/parakeet-stt/edge-stt/src/entrypoint/transcribe.py create mode 100644 deploy/parakeet-stt/edge-stt/src/modes/__init__.py create mode 100644 deploy/parakeet-stt/edge-stt/src/modes/a_offline/__init__.py create mode 100644 deploy/parakeet-stt/edge-stt/src/modes/a_offline/parakeet_runner.py create mode 100644 deploy/parakeet-stt/edge-stt/src/modes/a_offline/runner.py create mode 100644 deploy/parakeet-stt/edge-stt/src/modes/b_streaming/__init__.py create mode 100644 deploy/parakeet-stt/edge-stt/src/modes/b_streaming/runner.py create mode 100644 deploy/parakeet-stt/edge-stt/src/modes/c_multilingual/__init__.py create mode 100644 deploy/parakeet-stt/edge-stt/src/modes/c_multilingual/residency.py create mode 100644 deploy/parakeet-stt/edge-stt/src/modes/c_multilingual/runner.py create mode 100755 deploy/parakeet-stt/edge-stt/transcribe diff --git a/deploy/parakeet-stt/edge-stt/.gitignore b/deploy/parakeet-stt/edge-stt/.gitignore new file mode 100644 index 0000000..ea7ecdf --- /dev/null +++ b/deploy/parakeet-stt/edge-stt/.gitignore @@ -0,0 +1,24 @@ +# --- audio payloads (regenerated by scripts/get-data.sh; manifests+checksums ARE committed) --- +data/wav/ +data/*.tar.gz +data/LibriSpeech/ + +# --- models / engines / large artifacts (fetched/built on-device, never committed) --- +models/ +*.onnx +*.engine +*.plan +*.gguf +*.nemo + +# --- python / venv --- +.venv/ +__pycache__/ +*.pyc +*.pyo + +# --- run outputs: transient logs only. The CURATED metric artifacts under results/ +# (decisions.json, dtype/, parakeet/, m1/ reports) ARE committed — they are the reported numbers. --- +*.log +/tmp/ +wheelhouse/ diff --git a/deploy/parakeet-stt/edge-stt/ASSUMPTIONS.md b/deploy/parakeet-stt/edge-stt/ASSUMPTIONS.md new file mode 100644 index 0000000..40f8dde --- /dev/null +++ b/deploy/parakeet-stt/edge-stt/ASSUMPTIONS.md @@ -0,0 +1,93 @@ +# ASSUMPTIONS — measurement definitions & device reality + +The grader runs **our** harness, so where the brief is ambiguous we pick an honest default, +**instrument both readings**, and never block on assessor confirmation. Each default is a +single flag/env so a clarification is a one-line change, not a rebuild. + +--- + +## Device target (deviation from the written plan — read this first) + +> **DEVICE (as-used, measured 2026-06-06):** Jetson Orin Nano Super 8 GB · +> **L4T 36.4.7** (`R36 (release), REVISION: 4.7`) / JetPack 6.2.x · +> **CUDA 12.6** · **TensorRT 10.3.0.30** · **cuDNN 9.3.0.75** · Python 3.10.12 · aarch64 · +> power mode **25 W** (not MAXN SUPER). + +The original ROADMAP pinned a clean reflash to **L4T 36.4.3** with a golden backup and a +clean-room rehearsal. **That is not done here:** the device is a **shared, in-use machine** +running other live workloads, so reflashing, power-mode/clock locking, and headless +idle-RAM isolation are out of scope. Consequences, recorded honestly: + +- **Toolchain matches the plan anyway** — CUDA 12.6 / TRT 10.3 / cuDNN 9.3 are exactly the + targeted versions; only the L4T point-release differs (4.7 vs 4.3). The 4.7 NVMap idle-RAM + regression noted in the study means idle RAM is **higher and shared** — accounted for by + measuring memory **as-observed** (see Memory below), never by freeing RAM. +- **No MAXN/clock lock** — RTF numbers are reported with the `25 W` power-mode caveat; they + are conservative relative to a clock-locked MAXN SUPER run. +- **Preflight** asserts the **actual** versions (CUDA 12.6 / TRT 10.3 / cuDNN 9.3) rather than + enforcing the 36.4.3 clean-room string. + +--- + +## ENG — engine decision (Mode A primary = parakeet.cpp; sherpa-onnx alternative; TensorRT deferred) + +- **Decision (2026-06-10, amends the 2026-06-09 sherpa decision):** Mode A's **primary engine is `parakeet.cpp`** (ggml CUDA backend, `tdt_ctc-110m`, built from source) — measured **1.808 % WER @ 61× (tdt, q5_k) / 2.383 % @ 107× (ctc, q8_0)**, +450 MB, after it beat the sherpa-onnx path (~25×) on RTF. **`sherpa-onnx-offline`** remains the **reproducible alternative** (`STT_ENGINE=sherpa`) and the **Mode B** (streaming Zipformer INT8) and **Mode C** (Whisper-tiny LID + Parakeet-v3 + TTL/LRU) engines. Reasoning: [`docs/STAGE2-MEMO.md`](docs/STAGE2-MEMO.md) + [`docs/TRADE-OFFS.md`](docs/TRADE-OFFS.md). +- **What this replaces:** the original Mode A was a bespoke **TensorRT 10.3 INT8 eager-batched label-looping TDT decode** built on-device. That path is **evaluated and deferred**, not built — parakeet.cpp reaches near-TRT throughput (107×) on a reproducible from-source build without the non-portable engine. Full rationale in [`docs/TRADE-OFFS.md`](docs/TRADE-OFFS.md). +- **Why TRT stays deferred:** (1) the **RTF ≤0.004 (250×) gate is unreachable either way** — TRT was only ~100–180×, a documented miss; the deliverable is the honest gap analysis, not the number. (2) The non-portable, device-keyed TRT engine + bespoke host-side batched-TDT decode is the **single biggest Stage-1 blind-replication hazard**. (3) **Accuracy is unaffected** — both decoders stay <3 % WER. +- **Consequence for RTF honesty:** Mode A's RTFx is the **best-achieved on-device number** (parakeet.cpp 107× ctc), reported with the **A100→Orin ~18–20× + 25 W / shared** gap analysis. Never presented as streaming. +- **Instrument:** `--mode A` runs **parakeet.cpp by default** (`PK_DECODER=tdt|ctc` picks the q5_k|q8_0 default; `PK_MODEL` overrides); `STT_ENGINE=sherpa` selects the sherpa-onnx alternative. +- **Preflight consequence:** `scripts/preflight.sh` hard-asserts only the **CUDA runtime** (CUDA 12.6 / cuDNN 9.3) and records **TensorRT warn-only** — reproduction must not fail for lack of the exact TRT version. +- **Override:** if a TRT Mode A is ever wanted, the deferred design + rationale live in [`docs/TRADE-OFFS.md`](docs/TRADE-OFFS.md) — it is a re-activation, not a rewrite. + +## FND-MEM — what "memory" means + +- **Decision:** headline = **total system RAM** (brief: "must accommodate OS overhead" → total + is the literal read); **also** report **incremental process RSS over baseline** and CUDA usage. +- **Why:** the study shows a ~1.1–1.4 GB floor before weights; **≤1 GB total is infeasible as + worded**, so we report total + floor + incremental and lead with that honesty. +- **Instrument:** `src/common/memory_accountant.py` samples `tegrastats`/`meminfo` total + + `/proc//status` RSS + `cudaMemGetInfo` together. +- **Shared-box rule:** the GATE-A floor is measured **as-observed** on the live machine (other + projects resident) — we do **not** stop services or free RAM to get a cleaner number. The + reported idle is therefore an upper bound, stated as such. +- **Pending-confirm:** **FND-MEM**. **Fallback:** if the assessor means incremental-only, the + same report already carries `proc_rss_mb`/`delta_total_mb` — switch the headline field. + +## FND-RTF — replay order + +- **Decision:** **sequential per-utterance by default** (honest edge number); **also** report + offline-**batched** RTFx for Mode A. `--replay {sequential|batched}`. +- **Why:** the grader may replay per-utterance, which kills the batched-250× premise; instrument + both so neither is hidden. +- **Instrument:** `report.json.rtfx`/`rtf` + `--replay` field; streaming RTF reported separately, + never conflated with offline. +- **Pending-confirm:** **FND-RTF**. **Fallback:** flip `--replay`; both paths emit identical schema. + +## FND-SUBSET — which 300 + +- **Decision:** **first-300 sorted by utterance id** (matches `scripts/prepare_data.py`). +- **Why:** the brief's "default subset of 300" is unspecified; sorted-by-id is deterministic and + reproducible byte-for-byte from `scripts/get-data.sh`. +- **Instrument:** `data/manifest.jsonl` (300 rows) + `data/manifest.sha256`. +- **Pending-confirm:** **FND-SUBSET** (note ±0.1–0.2 abs WER variance on N=300). + **Fallback:** `prepare_data.py --n`/`--url` selects any other subset/split. + +## FND-NORM — WER normalizer + +- **Decision:** **Whisper-style normalizer** (Open ASR Leaderboard convention) via pinned + `whisper-normalizer`; documented lowercase/punct-strip fallback if the package is absent. +- **Why:** matches the leaderboard numbers we cite (1.69 % v2 / 1.93 % v3). +- **Instrument:** `report.json.normalizer` records which normalizer actually ran + (`whisper` vs `fallback-lower-punct`). +- **Pending-confirm:** **FND-NORM**. **Fallback:** swap the normalizer function; one call site. + +--- + +## How to override + +Every default above is a single flag or env var (`--replay`, `--limit`, `prepare_data.py --n/--url`, +the normalizer import). An assessor's clarification is a one-line change. The 4 `FND-` items are +the open questions; nothing in the build/run path blocks on a reply. + +*GATE-A floor numbers (idle_total_mb, cuda_ctx_floor_mb, measured as-observed) will be appended +here once measured on-device.* diff --git a/deploy/parakeet-stt/edge-stt/README.md b/deploy/parakeet-stt/edge-stt/README.md new file mode 100644 index 0000000..935f276 --- /dev/null +++ b/deploy/parakeet-stt/edge-stt/README.md @@ -0,0 +1,100 @@ +# Edge AI Speech-to-Text — Jetson Orin Nano Super 8 GB + +An STT engine behind one CLI for the Jetson Orin Nano Super 8 GB. The **primary engine is parakeet.cpp** +(ggml CUDA) — the fastest, smallest, accurate option measured (**1.808 % WER @ 61×** with the q5_k tdt +default, or **2.383 % @ 107×** ctc, **+450 MB**). No single config meets all five brief constraints at once (WER ≤3 % · RTF ≤0.004 · ≤1 GB total · +multilingual + dynamic · true streaming) — they are in direct tension — so a **3-mode** architecture (offline +/ streaming / multilingual) sits behind the CLI and the submission **reports honest, measured trade-offs** +(see [`docs/STAGE2-MEMO.md`](docs/STAGE2-MEMO.md) + [`docs/TRADE-OFFS.md`](docs/TRADE-OFFS.md)). + +| Mode | Engine | Wins | Measured (LibriSpeech-300 / FLEURS-de) | +|---|---|---|---| +| **A** (primary) | offline — **parakeet.cpp** (ggml CUDA) `tdt_ctc-110m` (tdt=q5_k / ctc=q8_0) | **WER + RTF + memory** | **WER 1.808 %**, **RTF 0.0163 (61×)**, **+450 MB** · ctc decoder: 2.383 % @ **107×** | +| A (sherpa alt.) | sherpa-onnx-offline INT8 Zipformer (68 MB), CPU | reproducible fallback | 1.598 %, 21.6×, 204 MB resident | +| **B** | true streaming — sherpa-onnx-online INT8 Zipformer (chunk-16-left-128) | latency | **WER 1.976 %** (n=300), CPU | +| **C** | multilingual + dynamic — whisper-tiny LID + Parakeet-v3 (25-lang) | coverage | **LID 97 %**, German **7.41 %** (v3) | + +> **Primary engine: parakeet.cpp (ggml CUDA).** This is the headline — `tdt_ctc-110m` reaches **61× RTF +> at 1.808 % WER** (decoder `tdt`, q5_k) or **107× at 2.383 %** (decoder `ctc`, q8_0), both < 3 %, at **+450 MB** +> and ~126 ms/call (results/parakeet/RESULTS.md). An on-GPU **dtype sweep** (`results/dtype/`) showed RTFx is +> *dtype-invariant* here — quant is a memory lever, not a speed one — so the tdt path runs q5_k for free +> (== q8_0 accuracy, 23 % smaller). The **ggml CUDA backend is ~4–14× faster than ONNX Runtime** on +> the same 25 W Orin — near-TensorRT throughput on a **reproducible from-source build** (no bespoke TRT +> engine). `./transcribe --mode A` uses it by default; pick the decoder with `PK_DECODER=tdt|ctc`. The +> sherpa-onnx Zipformer is the reproducible alternative (`STT_ENGINE=sherpa`), and Modes B/C (streaming + +> multilingual) stay on sherpa-onnx. **250× is still a documented miss** (~18–20× A100→Orin + 25 W), but +> parakeet.cpp closes most of the engine gap that sherpa-onnx could not. A bespoke **TensorRT** Mode A was +> evaluated and **deferred** (non-portable engine = the top blind-replication hazard, and it still misses +> 250×); parakeet.cpp gets near-TRT throughput without it. Reasoning: [`docs/STAGE2-MEMO.md`](docs/STAGE2-MEMO.md). + +## Device assumptions (read first) + +Used **as-is** on a **shared** Jetson — no reflash, no clock lock (see [`ASSUMPTIONS.md`](ASSUMPTIONS.md)): + +- **L4T 36.4.7** · **CUDA 12.6** · **cuDNN 9.3.0.75** · Python 3.10 · aarch64 (sm_87). Build prereqs: + `git`, `cmake`, a C++17 toolchain, `nvcc` on PATH (`/usr/local/cuda/bin`), `sox` (decode), and the + **locked Python deps** in [`requirements.lock`](requirements.lock) (pinned, aarch64/cp310; `requirements.in` + is the human-edited source). The GPU engines are built from source on-device, not pip-installed. +- Power mode **25 W** (not MAXN) — every RTF number carries this caveat. +- **Memory is the binding constraint.** ≤1 GB *total* is infeasible (the OS floor alone is ~1.5 GB), so we + report total + floor + increment. The deployable parakeet.cpp engine adds only **+450 MB**; the 0.6 B + alternative peaks ~6.6 GB and won't co-reside with a large workload on 8 GB. Run the eval on an otherwise-idle box. + +## Deployment (every step is a committed script; the guide ends at `./transcribe`) + +```sh +# 0. Verify the toolchain (CUDA 12.6 / nvcc / cuDNN 9.3; TensorRT warn-only — not used). +source scripts/preflight.sh # or: ./transcribe --selfcheck + +# 0b. Install the locked Python deps (scoring + data-prep; pinned for aarch64/cp310). +pip install --break-system-packages -r requirements.lock + +# 1. Eval data: LibriSpeech test-clean first-300-by-id -> data/wav/ + data/manifest.jsonl +bash scripts/get-data.sh + +# 2. Fetch models (parakeet.cpp GGUF + the sherpa-onnx models for B/C and the alt; HF, nothing committed). +bash scripts/get-models.sh # -> ~/parakeet-models/ + ~/edge-stt/models/ + +# 3a. Build the PRIMARY engine: parakeet.cpp from source (ggml CUDA, sm_87). ~few min, -j4. +bash scripts/build-parakeet.sh # -> ~/parakeet.cpp/build/examples/cli/parakeet-cli + +# 3b. (Modes B/C + sherpa alternative) build the sherpa-onnx GPU binary. Pre-stage the ORT tarball once: +# curl -L -o ~/Downloads/onnxruntime-linux-aarch64-gpu-cuda12-1.18.1.tar.bz2 \ +# https://github.com/csukuangfj/onnxruntime-libs/releases/download/v1.18.1/onnxruntime-linux-aarch64-gpu-cuda12-1.18.1.tar.bz2 +bash scripts/build-sherpa.sh # -> ~/edge-stt/sherpa-onnx/build/bin/{sherpa-onnx-offline,sherpa-onnx} + +# 4. RUN. Both engines need the CUDA libs on LD_LIBRARY_PATH (sherpa also needs the ORT lib dir): +export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$HOME/edge-stt/ort/onnxruntime-linux-aarch64-gpu-1.18.1/lib + +# Mode A — parakeet.cpp (DEFAULT). PK_DECODER=tdt (1.81%/61x, q5_k) or ctc (2.38%/107x, q8_0); PK_MODEL overrides: +./transcribe --mode A --input data/manifest.jsonl --out hyps.jsonl --report report.json +PK_DECODER=ctc ./transcribe --mode A --input data/manifest.jsonl --out hyps_ctc.jsonl --report rctc.json +STT_ENGINE=sherpa ./transcribe --mode A --input data/manifest.jsonl --out hyps_sherpa.jsonl --report rs.json --device cpu # alt + +./transcribe --mode B --input data/manifest.jsonl --out hyps_B.jsonl --report rB.json --device cpu # streaming +./transcribe --mode C --input --out hyps_C.jsonl --report rC.json # multilingual (LID auto) +``` + +`report.json` carries WER (Whisper-normalized) + RTFx + the memory accountant's `mem.*`. Re-score an +existing `hyps.jsonl` without re-running inference via `bash scripts/score.sh hyps.jsonl data/manifest.jsonl`. +The frozen CLI + schemas are in [`docs/CONTRACT.md`](docs/CONTRACT.md). + +## Results & honesty + +Measured numbers + the gate verdicts (WER pass; RTF/memory honest misses with gap analysis; streaming + +multilingual) are in [`results/feasibility.md`](results/feasibility.md) and machine-readable in +[`results/decisions.json`](results/decisions.json). The headline trade-offs map to the Stage-2 questions in +[`docs/TRADE-OFFS.md`](docs/TRADE-OFFS.md). + +Full reasoning (the four Stage-2 questions — memory reduction, engine choice, quant/precision/size, adapting +if memory tightens) is in [`docs/STAGE2-MEMO.md`](docs/STAGE2-MEMO.md). + +### Mode notes (engineering findings, all measured) +- **Mode A (parakeet.cpp, primary)** loads the GGUF once (`load_ms`, excluded from RTF) and benches the batch; + per-file `proc_ms` is the inference-only time. `PK_DECODER` picks tdt (accurate) or ctc (fast). The + sherpa-onnx alternative (`STT_ENGINE=sherpa`) sorts clips shortest-first and splits a chunk to singles if the + ORT CUDA arena overflows. +- **Mode B** runs on **CPU** — GPU is ~3× *slower* for the tiny streaming model (per-chunk kernel-launch + overhead). Streaming RTF is reported separately from offline, never conflated. +- **Mode C** uses whisper-tiny for both LID (the JSON `lang` field) and multilingual recognition; the accurate + 25-lang **Parakeet-v3** drops in behind the same router for production accuracy (German 7.41 %). diff --git a/deploy/parakeet-stt/edge-stt/data/README.md b/deploy/parakeet-stt/edge-stt/data/README.md new file mode 100644 index 0000000..2f9d5ac --- /dev/null +++ b/deploy/parakeet-stt/edge-stt/data/README.md @@ -0,0 +1,8 @@ +# Eval data (regenerated; not committed) + +- Source: LibriSpeech `test-clean` (https://www.openslr.org/resources/12/test-clean.tar.gz, ~346 MB) +- Subset: first-300 by utterance id (ASSUMPTIONS.md FND-SUBSET) +- Utterances: 300 +- Total audio: 2641.1 s + +Regenerate with: `bash scripts/get-data.sh`. Manifests + checksums are committed; wav payloads are not. diff --git a/deploy/parakeet-stt/edge-stt/data/manifest.jsonl b/deploy/parakeet-stt/edge-stt/data/manifest.jsonl new file mode 100644 index 0000000..f4884ed --- /dev/null +++ b/deploy/parakeet-stt/edge-stt/data/manifest.jsonl @@ -0,0 +1,300 @@ +{"id": "1089-134686-0000", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1089-134686-0000.wav", "ref": "HE HOPED THERE WOULD BE STEW FOR DINNER TURNIPS AND CARROTS AND BRUISED POTATOES AND FAT MUTTON PIECES TO BE LADLED OUT IN THICK PEPPERED FLOUR FATTENED SAUCE", "duration_sec": 10.435} +{"id": "1089-134686-0001", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1089-134686-0001.wav", "ref": "STUFF IT INTO YOU HIS BELLY COUNSELLED HIM", "duration_sec": 3.275} +{"id": "1089-134686-0002", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1089-134686-0002.wav", "ref": "AFTER EARLY NIGHTFALL THE YELLOW LAMPS WOULD LIGHT UP HERE AND THERE THE SQUALID QUARTER OF THE BROTHELS", "duration_sec": 6.625} +{"id": "1089-134686-0003", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1089-134686-0003.wav", "ref": "HELLO BERTIE ANY GOOD IN YOUR MIND", "duration_sec": 2.68} +{"id": "1089-134686-0004", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1089-134686-0004.wav", "ref": "NUMBER TEN FRESH NELLY IS WAITING ON YOU GOOD NIGHT HUSBAND", "duration_sec": 5.215} +{"id": "1089-134686-0005", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1089-134686-0005.wav", "ref": "THE MUSIC CAME NEARER AND HE RECALLED THE WORDS THE WORDS OF SHELLEY'S FRAGMENT UPON THE MOON WANDERING COMPANIONLESS PALE FOR WEARINESS", "duration_sec": 9.635} +{"id": "1089-134686-0006", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1089-134686-0006.wav", "ref": "THE DULL LIGHT FELL MORE FAINTLY UPON THE PAGE WHEREON ANOTHER EQUATION BEGAN TO UNFOLD ITSELF SLOWLY AND TO SPREAD ABROAD ITS WIDENING TAIL", "duration_sec": 10.555} +{"id": "1089-134686-0007", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1089-134686-0007.wav", "ref": "A COLD LUCID INDIFFERENCE REIGNED IN HIS SOUL", "duration_sec": 4.275} +{"id": "1089-134686-0008", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1089-134686-0008.wav", "ref": "THE CHAOS IN WHICH HIS ARDOUR EXTINGUISHED ITSELF WAS A COLD INDIFFERENT KNOWLEDGE OF HIMSELF", "duration_sec": 6.73} +{"id": "1089-134686-0009", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1089-134686-0009.wav", "ref": "AT MOST BY AN ALMS GIVEN TO A BEGGAR WHOSE BLESSING HE FLED FROM HE MIGHT HOPE WEARILY TO WIN FOR HIMSELF SOME MEASURE OF ACTUAL GRACE", "duration_sec": 10.575} +{"id": "1089-134686-0010", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1089-134686-0010.wav", "ref": "WELL NOW ENNIS I DECLARE YOU HAVE A HEAD AND SO HAS MY STICK", "duration_sec": 4.405} +{"id": "1089-134686-0011", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1089-134686-0011.wav", "ref": "ON SATURDAY MORNINGS WHEN THE SODALITY MET IN THE CHAPEL TO RECITE THE LITTLE OFFICE HIS PLACE WAS A CUSHIONED KNEELING DESK AT THE RIGHT OF THE ALTAR FROM WHICH HE LED HIS WING OF BOYS THROUGH THE RESPONSES", "duration_sec": 12.445} +{"id": "1089-134686-0012", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1089-134686-0012.wav", "ref": "HER EYES SEEMED TO REGARD HIM WITH MILD PITY HER HOLINESS A STRANGE LIGHT GLOWING FAINTLY UPON HER FRAIL FLESH DID NOT HUMILIATE THE SINNER WHO APPROACHED HER", "duration_sec": 11.64} +{"id": "1089-134686-0013", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1089-134686-0013.wav", "ref": "IF EVER HE WAS IMPELLED TO CAST SIN FROM HIM AND TO REPENT THE IMPULSE THAT MOVED HIM WAS THE WISH TO BE HER KNIGHT", "duration_sec": 7.915} +{"id": "1089-134686-0014", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1089-134686-0014.wav", "ref": "HE TRIED TO THINK HOW IT COULD BE", "duration_sec": 2.225} +{"id": "1089-134686-0015", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1089-134686-0015.wav", "ref": "BUT THE DUSK DEEPENING IN THE SCHOOLROOM COVERED OVER HIS THOUGHTS THE BELL RANG", "duration_sec": 5.815} +{"id": "1089-134686-0016", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1089-134686-0016.wav", "ref": "THEN YOU CAN ASK HIM QUESTIONS ON THE CATECHISM DEDALUS", "duration_sec": 3.54} +{"id": "1089-134686-0017", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1089-134686-0017.wav", "ref": "STEPHEN LEANING BACK AND DRAWING IDLY ON HIS SCRIBBLER LISTENED TO THE TALK ABOUT HIM WHICH HERON CHECKED FROM TIME TO TIME BY SAYING", "duration_sec": 8.87} +{"id": "1089-134686-0018", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1089-134686-0018.wav", "ref": "IT WAS STRANGE TOO THAT HE FOUND AN ARID PLEASURE IN FOLLOWING UP TO THE END THE RIGID LINES OF THE DOCTRINES OF THE CHURCH AND PENETRATING INTO OBSCURE SILENCES ONLY TO HEAR AND FEEL THE MORE DEEPLY HIS OWN CONDEMNATION", "duration_sec": 15.72} +{"id": "1089-134686-0019", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1089-134686-0019.wav", "ref": "THE SENTENCE OF SAINT JAMES WHICH SAYS THAT HE WHO OFFENDS AGAINST ONE COMMANDMENT BECOMES GUILTY OF ALL HAD SEEMED TO HIM FIRST A SWOLLEN PHRASE UNTIL HE HAD BEGUN TO GROPE IN THE DARKNESS OF HIS OWN STATE", "duration_sec": 13.895} +{"id": "1089-134686-0020", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1089-134686-0020.wav", "ref": "IF A MAN HAD STOLEN A POUND IN HIS YOUTH AND HAD USED THAT POUND TO AMASS A HUGE FORTUNE HOW MUCH WAS HE OBLIGED TO GIVE BACK THE POUND HE HAD STOLEN ONLY OR THE POUND TOGETHER WITH THE COMPOUND INTEREST ACCRUING UPON IT OR ALL HIS HUGE FORTUNE", "duration_sec": 16.79} +{"id": "1089-134686-0021", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1089-134686-0021.wav", "ref": "IF A LAYMAN IN GIVING BAPTISM POUR THE WATER BEFORE SAYING THE WORDS IS THE CHILD BAPTIZED", "duration_sec": 6.55} +{"id": "1089-134686-0022", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1089-134686-0022.wav", "ref": "HOW COMES IT THAT WHILE THE FIRST BEATITUDE PROMISES THE KINGDOM OF HEAVEN TO THE POOR OF HEART THE SECOND BEATITUDE PROMISES ALSO TO THE MEEK THAT THEY SHALL POSSESS THE LAND", "duration_sec": 11.175} +{"id": "1089-134686-0023", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1089-134686-0023.wav", "ref": "WHY WAS THE SACRAMENT OF THE EUCHARIST INSTITUTED UNDER THE TWO SPECIES OF BREAD AND WINE IF JESUS CHRIST BE PRESENT BODY AND BLOOD SOUL AND DIVINITY IN THE BREAD ALONE AND IN THE WINE ALONE", "duration_sec": 13.275} +{"id": "1089-134686-0024", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1089-134686-0024.wav", "ref": "IF THE WINE CHANGE INTO VINEGAR AND THE HOST CRUMBLE INTO CORRUPTION AFTER THEY HAVE BEEN CONSECRATED IS JESUS CHRIST STILL PRESENT UNDER THEIR SPECIES AS GOD AND AS MAN", "duration_sec": 11.655} +{"id": "1089-134686-0025", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1089-134686-0025.wav", "ref": "A GENTLE KICK FROM THE TALL BOY IN THE BENCH BEHIND URGED STEPHEN TO ASK A DIFFICULT QUESTION", "duration_sec": 6.61} +{"id": "1089-134686-0026", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1089-134686-0026.wav", "ref": "THE RECTOR DID NOT ASK FOR A CATECHISM TO HEAR THE LESSON FROM", "duration_sec": 4.01} +{"id": "1089-134686-0027", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1089-134686-0027.wav", "ref": "HE CLASPED HIS HANDS ON THE DESK AND SAID", "duration_sec": 2.71} +{"id": "1089-134686-0028", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1089-134686-0028.wav", "ref": "THE RETREAT WILL BEGIN ON WEDNESDAY AFTERNOON IN HONOUR OF SAINT FRANCIS XAVIER WHOSE FEAST DAY IS SATURDAY", "duration_sec": 7.83} +{"id": "1089-134686-0029", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1089-134686-0029.wav", "ref": "ON FRIDAY CONFESSION WILL BE HEARD ALL THE AFTERNOON AFTER BEADS", "duration_sec": 4.67} +{"id": "1089-134686-0030", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1089-134686-0030.wav", "ref": "BEWARE OF MAKING THAT MISTAKE", "duration_sec": 2.715} +{"id": "1089-134686-0031", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1089-134686-0031.wav", "ref": "STEPHEN'S HEART BEGAN SLOWLY TO FOLD AND FADE WITH FEAR LIKE A WITHERING FLOWER", "duration_sec": 6.615} +{"id": "1089-134686-0032", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1089-134686-0032.wav", "ref": "HE IS CALLED AS YOU KNOW THE APOSTLE OF THE INDIES", "duration_sec": 4.09} +{"id": "1089-134686-0033", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1089-134686-0033.wav", "ref": "A GREAT SAINT SAINT FRANCIS XAVIER", "duration_sec": 3.33} +{"id": "1089-134686-0034", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1089-134686-0034.wav", "ref": "THE RECTOR PAUSED AND THEN SHAKING HIS CLASPED HANDS BEFORE HIM WENT ON", "duration_sec": 5.81} +{"id": "1089-134686-0035", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1089-134686-0035.wav", "ref": "HE HAD THE FAITH IN HIM THAT MOVES MOUNTAINS", "duration_sec": 3.445} +{"id": "1089-134686-0036", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1089-134686-0036.wav", "ref": "A GREAT SAINT SAINT FRANCIS XAVIER", "duration_sec": 3.25} +{"id": "1089-134686-0037", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1089-134686-0037.wav", "ref": "IN THE SILENCE THEIR DARK FIRE KINDLED THE DUSK INTO A TAWNY GLOW", "duration_sec": 5.21} +{"id": "1089-134691-0000", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1089-134691-0000.wav", "ref": "HE COULD WAIT NO LONGER", "duration_sec": 2.085} +{"id": "1089-134691-0001", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1089-134691-0001.wav", "ref": "FOR A FULL HOUR HE HAD PACED UP AND DOWN WAITING BUT HE COULD WAIT NO LONGER", "duration_sec": 5.415} +{"id": "1089-134691-0002", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1089-134691-0002.wav", "ref": "HE SET OFF ABRUPTLY FOR THE BULL WALKING RAPIDLY LEST HIS FATHER'S SHRILL WHISTLE MIGHT CALL HIM BACK AND IN A FEW MOMENTS HE HAD ROUNDED THE CURVE AT THE POLICE BARRACK AND WAS SAFE", "duration_sec": 11.6} +{"id": "1089-134691-0003", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1089-134691-0003.wav", "ref": "THE UNIVERSITY", "duration_sec": 2.175} +{"id": "1089-134691-0004", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1089-134691-0004.wav", "ref": "PRIDE AFTER SATISFACTION UPLIFTED HIM LIKE LONG SLOW WAVES", "duration_sec": 5.175} +{"id": "1089-134691-0005", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1089-134691-0005.wav", "ref": "WHOSE FEET ARE AS THE FEET OF HARTS AND UNDERNEATH THE EVERLASTING ARMS", "duration_sec": 5.36} +{"id": "1089-134691-0006", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1089-134691-0006.wav", "ref": "THE PRIDE OF THAT DIM IMAGE BROUGHT BACK TO HIS MIND THE DIGNITY OF THE OFFICE HE HAD REFUSED", "duration_sec": 5.895} +{"id": "1089-134691-0007", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1089-134691-0007.wav", "ref": "SOON THE WHOLE BRIDGE WAS TREMBLING AND RESOUNDING", "duration_sec": 3.44} +{"id": "1089-134691-0008", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1089-134691-0008.wav", "ref": "THE UNCOUTH FACES PASSED HIM TWO BY TWO STAINED YELLOW OR RED OR LIVID BY THE SEA AND AS HE STROVE TO LOOK AT THEM WITH EASE AND INDIFFERENCE A FAINT STAIN OF PERSONAL SHAME AND COMMISERATION ROSE TO HIS OWN FACE", "duration_sec": 14.985} +{"id": "1089-134691-0009", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1089-134691-0009.wav", "ref": "ANGRY WITH HIMSELF HE TRIED TO HIDE HIS FACE FROM THEIR EYES BY GAZING DOWN SIDEWAYS INTO THE SHALLOW SWIRLING WATER UNDER THE BRIDGE BUT HE STILL SAW A REFLECTION THEREIN OF THEIR TOP HEAVY SILK HATS AND HUMBLE TAPE LIKE COLLARS AND LOOSELY HANGING CLERICAL CLOTHES BROTHER HICKEY", "duration_sec": 20.055} +{"id": "1089-134691-0010", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1089-134691-0010.wav", "ref": "BROTHER MAC ARDLE BROTHER KEOGH", "duration_sec": 3.195} +{"id": "1089-134691-0011", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1089-134691-0011.wav", "ref": "THEIR PIETY WOULD BE LIKE THEIR NAMES LIKE THEIR FACES LIKE THEIR CLOTHES AND IT WAS IDLE FOR HIM TO TELL HIMSELF THAT THEIR HUMBLE AND CONTRITE HEARTS IT MIGHT BE PAID A FAR RICHER TRIBUTE OF DEVOTION THAN HIS HAD EVER BEEN A GIFT TENFOLD MORE ACCEPTABLE THAN HIS ELABORATE ADORATION", "duration_sec": 20.01} +{"id": "1089-134691-0012", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1089-134691-0012.wav", "ref": "IT WAS IDLE FOR HIM TO MOVE HIMSELF TO BE GENEROUS TOWARDS THEM TO TELL HIMSELF THAT IF HE EVER CAME TO THEIR GATES STRIPPED OF HIS PRIDE BEATEN AND IN BEGGAR'S WEEDS THAT THEY WOULD BE GENEROUS TOWARDS HIM LOVING HIM AS THEMSELVES", "duration_sec": 15.03} +{"id": "1089-134691-0013", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1089-134691-0013.wav", "ref": "IDLE AND EMBITTERING FINALLY TO ARGUE AGAINST HIS OWN DISPASSIONATE CERTITUDE THAT THE COMMANDMENT OF LOVE BADE US NOT TO LOVE OUR NEIGHBOUR AS OURSELVES WITH THE SAME AMOUNT AND INTENSITY OF LOVE BUT TO LOVE HIM AS OURSELVES WITH THE SAME KIND OF LOVE", "duration_sec": 16.33} +{"id": "1089-134691-0014", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1089-134691-0014.wav", "ref": "THE PHRASE AND THE DAY AND THE SCENE HARMONIZED IN A CHORD", "duration_sec": 4.755} +{"id": "1089-134691-0015", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1089-134691-0015.wav", "ref": "WORDS WAS IT THEIR COLOURS", "duration_sec": 3.395} +{"id": "1089-134691-0016", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1089-134691-0016.wav", "ref": "THEY WERE VOYAGING ACROSS THE DESERTS OF THE SKY A HOST OF NOMADS ON THE MARCH VOYAGING HIGH OVER IRELAND WESTWARD BOUND", "duration_sec": 9.06} +{"id": "1089-134691-0017", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1089-134691-0017.wav", "ref": "THE EUROPE THEY HAD COME FROM LAY OUT THERE BEYOND THE IRISH SEA EUROPE OF STRANGE TONGUES AND VALLEYED AND WOODBEGIRT AND CITADELLED AND OF ENTRENCHED AND MARSHALLED RACES", "duration_sec": 11.695} +{"id": "1089-134691-0018", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1089-134691-0018.wav", "ref": "AGAIN AGAIN", "duration_sec": 3.09} +{"id": "1089-134691-0019", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1089-134691-0019.wav", "ref": "A VOICE FROM BEYOND THE WORLD WAS CALLING", "duration_sec": 3.155} +{"id": "1089-134691-0020", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1089-134691-0020.wav", "ref": "HELLO STEPHANOS HERE COMES THE DEDALUS", "duration_sec": 3.99} +{"id": "1089-134691-0021", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1089-134691-0021.wav", "ref": "THEIR DIVING STONE POISED ON ITS RUDE SUPPORTS AND ROCKING UNDER THEIR PLUNGES AND THE ROUGH HEWN STONES OF THE SLOPING BREAKWATER OVER WHICH THEY SCRAMBLED IN THEIR HORSEPLAY GLEAMED WITH COLD WET LUSTRE", "duration_sec": 13.37} +{"id": "1089-134691-0022", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1089-134691-0022.wav", "ref": "HE STOOD STILL IN DEFERENCE TO THEIR CALLS AND PARRIED THEIR BANTER WITH EASY WORDS", "duration_sec": 5.635} +{"id": "1089-134691-0023", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1089-134691-0023.wav", "ref": "IT WAS A PAIN TO SEE THEM AND A SWORD LIKE PAIN TO SEE THE SIGNS OF ADOLESCENCE THAT MADE REPELLENT THEIR PITIABLE NAKEDNESS", "duration_sec": 7.735} +{"id": "1089-134691-0024", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1089-134691-0024.wav", "ref": "STEPHANOS DEDALOS", "duration_sec": 2.215} +{"id": "1089-134691-0025", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1089-134691-0025.wav", "ref": "A MOMENT BEFORE THE GHOST OF THE ANCIENT KINGDOM OF THE DANES HAD LOOKED FORTH THROUGH THE VESTURE OF THE HAZEWRAPPED CITY", "duration_sec": 8.005} +{"id": "1188-133604-0000", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1188-133604-0000.wav", "ref": "YOU WILL FIND ME CONTINUALLY SPEAKING OF FOUR MEN TITIAN HOLBEIN TURNER AND TINTORET IN ALMOST THE SAME TERMS", "duration_sec": 10.725} +{"id": "1188-133604-0001", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1188-133604-0001.wav", "ref": "THEY UNITE EVERY QUALITY AND SOMETIMES YOU WILL FIND ME REFERRING TO THEM AS COLORISTS SOMETIMES AS CHIAROSCURISTS", "duration_sec": 9.04} +{"id": "1188-133604-0002", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1188-133604-0002.wav", "ref": "BY BEING STUDIOUS OF COLOR THEY ARE STUDIOUS OF DIVISION AND WHILE THE CHIAROSCURIST DEVOTES HIMSELF TO THE REPRESENTATION OF DEGREES OF FORCE IN ONE THING UNSEPARATED LIGHT THE COLORISTS HAVE FOR THEIR FUNCTION THE ATTAINMENT OF BEAUTY BY ARRANGEMENT OF THE DIVISIONS OF LIGHT", "duration_sec": 17.96} +{"id": "1188-133604-0003", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1188-133604-0003.wav", "ref": "MY FIRST AND PRINCIPAL REASON WAS THAT THEY ENFORCED BEYOND ALL RESISTANCE ON ANY STUDENT WHO MIGHT ATTEMPT TO COPY THEM THIS METHOD OF LAYING PORTIONS OF DISTINCT HUE SIDE BY SIDE", "duration_sec": 12.61} +{"id": "1188-133604-0004", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1188-133604-0004.wav", "ref": "SOME OF THE TOUCHES INDEED WHEN THE TINT HAS BEEN MIXED WITH MUCH WATER HAVE BEEN LAID IN LITTLE DROPS OR PONDS SO THAT THE PIGMENT MIGHT CRYSTALLIZE HARD AT THE EDGE", "duration_sec": 10.65} +{"id": "1188-133604-0005", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1188-133604-0005.wav", "ref": "IT IS THE HEAD OF A PARROT WITH A LITTLE FLOWER IN HIS BEAK FROM A PICTURE OF CARPACCIO'S ONE OF HIS SERIES OF THE LIFE OF SAINT GEORGE", "duration_sec": 8.56} +{"id": "1188-133604-0006", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1188-133604-0006.wav", "ref": "THEN HE COMES TO THE BEAK OF IT", "duration_sec": 2.4} +{"id": "1188-133604-0007", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1188-133604-0007.wav", "ref": "THE BROWN GROUND BENEATH IS LEFT FOR THE MOST PART ONE TOUCH OF BLACK IS PUT FOR THE HOLLOW TWO DELICATE LINES OF DARK GRAY DEFINE THE OUTER CURVE AND ONE LITTLE QUIVERING TOUCH OF WHITE DRAWS THE INNER EDGE OF THE MANDIBLE", "duration_sec": 14.24} +{"id": "1188-133604-0008", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1188-133604-0008.wav", "ref": "FOR BELIEVE ME THE FINAL PHILOSOPHY OF ART CAN ONLY RATIFY THEIR OPINION THAT THE BEAUTY OF A COCK ROBIN IS TO BE RED AND OF A GRASS PLOT TO BE GREEN AND THE BEST SKILL OF ART IS IN INSTANTLY SEIZING ON THE MANIFOLD DELICIOUSNESS OF LIGHT WHICH YOU CAN ONLY SEIZE BY PRECISION OF INSTANTANEOUS TOUCH", "duration_sec": 20.755} +{"id": "1188-133604-0009", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1188-133604-0009.wav", "ref": "NOW YOU WILL SEE IN THESE STUDIES THAT THE MOMENT THE WHITE IS INCLOSED PROPERLY AND HARMONIZED WITH THE OTHER HUES IT BECOMES SOMEHOW MORE PRECIOUS AND PEARLY THAN THE WHITE PAPER AND THAT I AM NOT AFRAID TO LEAVE A WHOLE FIELD OF UNTREATED WHITE PAPER ALL ROUND IT BEING SURE THAT EVEN THE LITTLE DIAMONDS IN THE ROUND WINDOW WILL TELL AS JEWELS IF THEY ARE GRADATED JUSTLY", "duration_sec": 23.06} +{"id": "1188-133604-0010", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1188-133604-0010.wav", "ref": "BUT IN THIS VIGNETTE COPIED FROM TURNER YOU HAVE THE TWO PRINCIPLES BROUGHT OUT PERFECTLY", "duration_sec": 6.095} +{"id": "1188-133604-0011", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1188-133604-0011.wav", "ref": "THEY ARE BEYOND ALL OTHER WORKS THAT I KNOW EXISTING DEPENDENT FOR THEIR EFFECT ON LOW SUBDUED TONES THEIR FAVORITE CHOICE IN TIME OF DAY BEING EITHER DAWN OR TWILIGHT AND EVEN THEIR BRIGHTEST SUNSETS PRODUCED CHIEFLY OUT OF GRAY PAPER", "duration_sec": 15.19} +{"id": "1188-133604-0012", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1188-133604-0012.wav", "ref": "IT MAY BE THAT A GREAT COLORIST WILL USE HIS UTMOST FORCE OF COLOR AS A SINGER HIS FULL POWER OF VOICE BUT LOUD OR LOW THE VIRTUE IS IN BOTH CASES ALWAYS IN REFINEMENT NEVER IN LOUDNESS", "duration_sec": 14.65} +{"id": "1188-133604-0013", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1188-133604-0013.wav", "ref": "IT MUST REMEMBER BE ONE OR THE OTHER", "duration_sec": 3.02} +{"id": "1188-133604-0014", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1188-133604-0014.wav", "ref": "DO NOT THEREFORE THINK THAT THE GOTHIC SCHOOL IS AN EASY ONE", "duration_sec": 4.39} +{"id": "1188-133604-0015", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1188-133604-0015.wav", "ref": "THE LAW OF THAT SCHOOL IS THAT EVERYTHING SHALL BE SEEN CLEARLY OR AT LEAST ONLY IN SUCH MIST OR FAINTNESS AS SHALL BE DELIGHTFUL AND I HAVE NO DOUBT THAT THE BEST INTRODUCTION TO IT WOULD BE THE ELEMENTARY PRACTICE OF PAINTING EVERY STUDY ON A GOLDEN GROUND", "duration_sec": 16.085} +{"id": "1188-133604-0016", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1188-133604-0016.wav", "ref": "THIS AT ONCE COMPELS YOU TO UNDERSTAND THAT THE WORK IS TO BE IMAGINATIVE AND DECORATIVE THAT IT REPRESENTS BEAUTIFUL THINGS IN THE CLEAREST WAY BUT NOT UNDER EXISTING CONDITIONS AND THAT IN FACT YOU ARE PRODUCING JEWELER'S WORK RATHER THAN PICTURES", "duration_sec": 16.595} +{"id": "1188-133604-0017", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1188-133604-0017.wav", "ref": "THAT A STYLE IS RESTRAINED OR SEVERE DOES NOT MEAN THAT IT IS ALSO ERRONEOUS", "duration_sec": 4.615} +{"id": "1188-133604-0018", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1188-133604-0018.wav", "ref": "IN ALL EARLY GOTHIC ART INDEED YOU WILL FIND FAILURE OF THIS KIND ESPECIALLY DISTORTION AND RIGIDITY WHICH ARE IN MANY RESPECTS PAINFULLY TO BE COMPARED WITH THE SPLENDID REPOSE OF CLASSIC ART", "duration_sec": 11.55} +{"id": "1188-133604-0019", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1188-133604-0019.wav", "ref": "THE LARGE LETTER CONTAINS INDEED ENTIRELY FEEBLE AND ILL DRAWN FIGURES THAT IS MERELY CHILDISH AND FAILING WORK OF AN INFERIOR HAND IT IS NOT CHARACTERISTIC OF GOTHIC OR ANY OTHER SCHOOL", "duration_sec": 13.93} +{"id": "1188-133604-0020", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1188-133604-0020.wav", "ref": "BUT OBSERVE YOU CAN ONLY DO THIS ON ONE CONDITION THAT OF STRIVING ALSO TO CREATE IN REALITY THE BEAUTY WHICH YOU SEEK IN IMAGINATION", "duration_sec": 10.26} +{"id": "1188-133604-0021", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1188-133604-0021.wav", "ref": "IT WILL BE WHOLLY IMPOSSIBLE FOR YOU TO RETAIN THE TRANQUILLITY OF TEMPER AND FELICITY OF FAITH NECESSARY FOR NOBLE PURIST PAINTING UNLESS YOU ARE ACTIVELY ENGAGED IN PROMOTING THE FELICITY AND PEACE OF PRACTICAL LIFE", "duration_sec": 14.02} +{"id": "1188-133604-0022", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1188-133604-0022.wav", "ref": "YOU MUST LOOK AT HIM IN THE FACE FIGHT HIM CONQUER HIM WITH WHAT SCATHE YOU MAY YOU NEED NOT THINK TO KEEP OUT OF THE WAY OF HIM", "duration_sec": 9.63} +{"id": "1188-133604-0023", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1188-133604-0023.wav", "ref": "THE COLORIST SAYS FIRST OF ALL AS MY DELICIOUS PAROQUET WAS RUBY SO THIS NASTY VIPER SHALL BE BLACK AND THEN IS THE QUESTION CAN I ROUND HIM OFF EVEN THOUGH HE IS BLACK AND MAKE HIM SLIMY AND YET SPRINGY AND CLOSE DOWN CLOTTED LIKE A POOL OF BLACK BLOOD ON THE EARTH ALL THE SAME", "duration_sec": 23.67} +{"id": "1188-133604-0024", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1188-133604-0024.wav", "ref": "NOTHING WILL BE MORE PRECIOUS TO YOU I THINK IN THE PRACTICAL STUDY OF ART THAN THE CONVICTION WHICH WILL FORCE ITSELF ON YOU MORE AND MORE EVERY HOUR OF THE WAY ALL THINGS ARE BOUND TOGETHER LITTLE AND GREAT IN SPIRIT AND IN MATTER", "duration_sec": 15.24} +{"id": "1188-133604-0025", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1188-133604-0025.wav", "ref": "YOU KNOW I HAVE JUST BEEN TELLING YOU HOW THIS SCHOOL OF MATERIALISM AND CLAY INVOLVED ITSELF AT LAST IN CLOUD AND FIRE", "duration_sec": 7.45} +{"id": "1188-133604-0026", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1188-133604-0026.wav", "ref": "HERE IS AN EQUALLY TYPICAL GREEK SCHOOL LANDSCAPE BY WILSON LOST WHOLLY IN GOLDEN MIST THE TREES SO SLIGHTLY DRAWN THAT YOU DON'T KNOW IF THEY ARE TREES OR TOWERS AND NO CARE FOR COLOR WHATEVER PERFECTLY DECEPTIVE AND MARVELOUS EFFECT OF SUNSHINE THROUGH THE MIST APOLLO AND THE PYTHON", "duration_sec": 20.125} +{"id": "1188-133604-0027", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1188-133604-0027.wav", "ref": "NOW HERE IS RAPHAEL EXACTLY BETWEEN THE TWO TREES STILL DRAWN LEAF BY LEAF WHOLLY FORMAL BUT BEAUTIFUL MIST COMING GRADUALLY INTO THE DISTANCE", "duration_sec": 11.245} +{"id": "1188-133604-0028", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1188-133604-0028.wav", "ref": "WELL THEN LAST HERE IS TURNER'S GREEK SCHOOL OF THE HIGHEST CLASS AND YOU DEFINE HIS ART ABSOLUTELY AS FIRST THE DISPLAYING INTENSELY AND WITH THE STERNEST INTELLECT OF NATURAL FORM AS IT IS AND THEN THE ENVELOPMENT OF IT WITH CLOUD AND FIRE", "duration_sec": 19.005} +{"id": "1188-133604-0029", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1188-133604-0029.wav", "ref": "ONLY THERE ARE TWO SORTS OF CLOUD AND FIRE", "duration_sec": 3.705} +{"id": "1188-133604-0030", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1188-133604-0030.wav", "ref": "HE KNOWS THEM BOTH", "duration_sec": 1.915} +{"id": "1188-133604-0031", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1188-133604-0031.wav", "ref": "THERE'S ONE AND THERE'S ANOTHER THE DUDLEY AND THE FLINT", "duration_sec": 4.25} +{"id": "1188-133604-0032", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1188-133604-0032.wav", "ref": "IT IS ONLY A PENCIL OUTLINE BY EDWARD BURNE JONES IN ILLUSTRATION OF THE STORY OF PSYCHE IT IS THE INTRODUCTION OF PSYCHE AFTER ALL HER TROUBLES INTO HEAVEN", "duration_sec": 10.985} +{"id": "1188-133604-0033", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1188-133604-0033.wav", "ref": "EVERY PLANT IN THE GRASS IS SET FORMALLY GROWS PERFECTLY AND MAY BE REALIZED COMPLETELY", "duration_sec": 6.625} +{"id": "1188-133604-0034", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1188-133604-0034.wav", "ref": "EXQUISITE ORDER AND UNIVERSAL WITH ETERNAL LIFE AND LIGHT THIS IS THE FAITH AND EFFORT OF THE SCHOOLS OF CRYSTAL AND YOU MAY DESCRIBE AND COMPLETE THEIR WORK QUITE LITERALLY BY TAKING ANY VERSES OF CHAUCER IN HIS TENDER MOOD AND OBSERVING HOW HE INSISTS ON THE CLEARNESS AND BRIGHTNESS FIRST AND THEN ON THE ORDER", "duration_sec": 20.905} +{"id": "1188-133604-0035", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1188-133604-0035.wav", "ref": "THUS IN CHAUCER'S DREAM", "duration_sec": 2.925} +{"id": "1188-133604-0036", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1188-133604-0036.wav", "ref": "IN BOTH THESE HIGH MYTHICAL SUBJECTS THE SURROUNDING NATURE THOUGH SUFFERING IS STILL DIGNIFIED AND BEAUTIFUL", "duration_sec": 7.97} +{"id": "1188-133604-0037", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1188-133604-0037.wav", "ref": "EVERY LINE IN WHICH THE MASTER TRACES IT EVEN WHERE SEEMINGLY NEGLIGENT IS LOVELY AND SET DOWN WITH A MEDITATIVE CALMNESS WHICH MAKES THESE TWO ETCHINGS CAPABLE OF BEING PLACED BESIDE THE MOST TRANQUIL WORK OF HOLBEIN OR DUERER", "duration_sec": 14.51} +{"id": "1188-133604-0038", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1188-133604-0038.wav", "ref": "BUT NOW HERE IS A SUBJECT OF WHICH YOU WILL WONDER AT FIRST WHY TURNER DREW IT AT ALL", "duration_sec": 5.365} +{"id": "1188-133604-0039", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1188-133604-0039.wav", "ref": "IT HAS NO BEAUTY WHATSOEVER NO SPECIALTY OF PICTURESQUENESS AND ALL ITS LINES ARE CRAMPED AND POOR", "duration_sec": 6.625} +{"id": "1188-133604-0040", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1188-133604-0040.wav", "ref": "THE CRAMPNESS AND THE POVERTY ARE ALL INTENDED", "duration_sec": 3.23} +{"id": "1188-133604-0041", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1188-133604-0041.wav", "ref": "IT IS A GLEANER BRINGING DOWN HER ONE SHEAF OF CORN TO AN OLD WATERMILL ITSELF MOSSY AND RENT SCARCELY ABLE TO GET ITS STONES TO TURN", "duration_sec": 10.07} +{"id": "1188-133604-0042", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1188-133604-0042.wav", "ref": "THE SCENE IS ABSOLUTELY ARCADIAN", "duration_sec": 2.66} +{"id": "1188-133604-0043", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1188-133604-0043.wav", "ref": "SEE THAT YOUR LIVES BE IN NOTHING WORSE THAN A BOY'S CLIMBING FOR HIS ENTANGLED KITE", "duration_sec": 4.885} +{"id": "1188-133604-0044", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1188-133604-0044.wav", "ref": "IT WILL BE WELL FOR YOU IF YOU JOIN NOT WITH THOSE WHO INSTEAD OF KITES FLY FALCONS WHO INSTEAD OF OBEYING THE LAST WORDS OF THE GREAT CLOUD SHEPHERD TO FEED HIS SHEEP LIVE THE LIVES HOW MUCH LESS THAN VANITY OF THE WAR WOLF AND THE GIER EAGLE", "duration_sec": 18.545} +{"id": "121-121726-0000", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/121-121726-0000.wav", "ref": "ALSO A POPULAR CONTRIVANCE WHEREBY LOVE MAKING MAY BE SUSPENDED BUT NOT STOPPED DURING THE PICNIC SEASON", "duration_sec": 8.46} +{"id": "121-121726-0001", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/121-121726-0001.wav", "ref": "HARANGUE THE TIRESOME PRODUCT OF A TIRELESS TONGUE", "duration_sec": 5.925} +{"id": "121-121726-0002", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/121-121726-0002.wav", "ref": "ANGOR PAIN PAINFUL TO HEAR", "duration_sec": 4.41} +{"id": "121-121726-0003", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/121-121726-0003.wav", "ref": "HAY FEVER A HEART TROUBLE CAUSED BY FALLING IN LOVE WITH A GRASS WIDOW", "duration_sec": 6.755} +{"id": "121-121726-0004", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/121-121726-0004.wav", "ref": "HEAVEN A GOOD PLACE TO BE RAISED TO", "duration_sec": 4.02} +{"id": "121-121726-0005", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/121-121726-0005.wav", "ref": "HEDGE A FENCE", "duration_sec": 3.1} +{"id": "121-121726-0006", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/121-121726-0006.wav", "ref": "HEREDITY THE CAUSE OF ALL OUR FAULTS", "duration_sec": 3.895} +{"id": "121-121726-0007", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/121-121726-0007.wav", "ref": "HORSE SENSE A DEGREE OF WISDOM THAT KEEPS ONE FROM BETTING ON THE RACES", "duration_sec": 6.73} +{"id": "121-121726-0008", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/121-121726-0008.wav", "ref": "HOSE MAN'S EXCUSE FOR WETTING THE WALK", "duration_sec": 4.99} +{"id": "121-121726-0009", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/121-121726-0009.wav", "ref": "HOTEL A PLACE WHERE A GUEST OFTEN GIVES UP GOOD DOLLARS FOR POOR QUARTERS", "duration_sec": 7.26} +{"id": "121-121726-0010", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/121-121726-0010.wav", "ref": "HOUSECLEANING A DOMESTIC UPHEAVAL THAT MAKES IT EASY FOR THE GOVERNMENT TO ENLIST ALL THE SOLDIERS IT NEEDS", "duration_sec": 9.81} +{"id": "121-121726-0011", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/121-121726-0011.wav", "ref": "HUSBAND THE NEXT THING TO A WIFE", "duration_sec": 4.035} +{"id": "121-121726-0012", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/121-121726-0012.wav", "ref": "HUSSY WOMAN AND BOND TIE", "duration_sec": 4.045} +{"id": "121-121726-0013", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/121-121726-0013.wav", "ref": "TIED TO A WOMAN", "duration_sec": 2.49} +{"id": "121-121726-0014", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/121-121726-0014.wav", "ref": "HYPOCRITE A HORSE DEALER", "duration_sec": 3.165} +{"id": "121-123852-0000", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/121-123852-0000.wav", "ref": "THOSE PRETTY WRONGS THAT LIBERTY COMMITS WHEN I AM SOMETIME ABSENT FROM THY HEART THY BEAUTY AND THY YEARS FULL WELL BEFITS FOR STILL TEMPTATION FOLLOWS WHERE THOU ART", "duration_sec": 17.695} +{"id": "121-123852-0001", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/121-123852-0001.wav", "ref": "AY ME", "duration_sec": 1.87} +{"id": "121-123852-0002", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/121-123852-0002.wav", "ref": "NO MATTER THEN ALTHOUGH MY FOOT DID STAND UPON THE FARTHEST EARTH REMOV'D FROM THEE FOR NIMBLE THOUGHT CAN JUMP BOTH SEA AND LAND AS SOON AS THINK THE PLACE WHERE HE WOULD BE BUT AH", "duration_sec": 17.285} +{"id": "121-123852-0003", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/121-123852-0003.wav", "ref": "THOUGHT KILLS ME THAT I AM NOT THOUGHT TO LEAP LARGE LENGTHS OF MILES WHEN THOU ART GONE BUT THAT SO MUCH OF EARTH AND WATER WROUGHT I MUST ATTEND TIME'S LEISURE WITH MY MOAN RECEIVING NOUGHT BY ELEMENTS SO SLOW BUT HEAVY TEARS BADGES OF EITHER'S WOE", "duration_sec": 23.505} +{"id": "121-123852-0004", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/121-123852-0004.wav", "ref": "MY HEART DOTH PLEAD THAT THOU IN HIM DOST LIE A CLOSET NEVER PIERC'D WITH CRYSTAL EYES BUT THE DEFENDANT DOTH THAT PLEA DENY AND SAYS IN HIM THY FAIR APPEARANCE LIES", "duration_sec": 16.29} +{"id": "121-123859-0000", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/121-123859-0000.wav", "ref": "YOU ARE MY ALL THE WORLD AND I MUST STRIVE TO KNOW MY SHAMES AND PRAISES FROM YOUR TONGUE NONE ELSE TO ME NOR I TO NONE ALIVE THAT MY STEEL'D SENSE OR CHANGES RIGHT OR WRONG", "duration_sec": 17.39} +{"id": "121-123859-0001", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/121-123859-0001.wav", "ref": "O TIS THE FIRST TIS FLATTERY IN MY SEEING AND MY GREAT MIND MOST KINGLY DRINKS IT UP MINE EYE WELL KNOWS WHAT WITH HIS GUST IS GREEING AND TO HIS PALATE DOTH PREPARE THE CUP IF IT BE POISON'D TIS THE LESSER SIN THAT MINE EYE LOVES IT AND DOTH FIRST BEGIN", "duration_sec": 25.395} +{"id": "121-123859-0002", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/121-123859-0002.wav", "ref": "BUT RECKONING TIME WHOSE MILLION'D ACCIDENTS CREEP IN TWIXT VOWS AND CHANGE DECREES OF KINGS TAN SACRED BEAUTY BLUNT THE SHARP'ST INTENTS DIVERT STRONG MINDS TO THE COURSE OF ALTERING THINGS ALAS WHY FEARING OF TIME'S TYRANNY MIGHT I NOT THEN SAY NOW I LOVE YOU BEST WHEN I WAS CERTAIN O'ER INCERTAINTY CROWNING THE PRESENT DOUBTING OF THE REST", "duration_sec": 30.04} +{"id": "121-123859-0003", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/121-123859-0003.wav", "ref": "LOVE IS A BABE THEN MIGHT I NOT SAY SO TO GIVE FULL GROWTH TO THAT WHICH STILL DOTH GROW", "duration_sec": 10.825} +{"id": "121-123859-0004", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/121-123859-0004.wav", "ref": "SO I RETURN REBUK'D TO MY CONTENT AND GAIN BY ILL THRICE MORE THAN I HAVE SPENT", "duration_sec": 9.505} +{"id": "121-127105-0000", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/121-127105-0000.wav", "ref": "IT WAS THIS OBSERVATION THAT DREW FROM DOUGLAS NOT IMMEDIATELY BUT LATER IN THE EVENING A REPLY THAT HAD THE INTERESTING CONSEQUENCE TO WHICH I CALL ATTENTION", "duration_sec": 9.875} +{"id": "121-127105-0001", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/121-127105-0001.wav", "ref": "SOMEONE ELSE TOLD A STORY NOT PARTICULARLY EFFECTIVE WHICH I SAW HE WAS NOT FOLLOWING", "duration_sec": 5.025} +{"id": "121-127105-0002", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/121-127105-0002.wav", "ref": "CRIED ONE OF THE WOMEN HE TOOK NO NOTICE OF HER HE LOOKED AT ME BUT AS IF INSTEAD OF ME HE SAW WHAT HE SPOKE OF", "duration_sec": 7.495} +{"id": "121-127105-0003", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/121-127105-0003.wav", "ref": "THERE WAS A UNANIMOUS GROAN AT THIS AND MUCH REPROACH AFTER WHICH IN HIS PREOCCUPIED WAY HE EXPLAINED", "duration_sec": 7.725} +{"id": "121-127105-0004", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/121-127105-0004.wav", "ref": "THE STORY'S WRITTEN", "duration_sec": 2.11} +{"id": "121-127105-0005", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/121-127105-0005.wav", "ref": "I COULD WRITE TO MY MAN AND ENCLOSE THE KEY HE COULD SEND DOWN THE PACKET AS HE FINDS IT", "duration_sec": 5.82} +{"id": "121-127105-0006", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/121-127105-0006.wav", "ref": "THE OTHERS RESENTED POSTPONEMENT BUT IT WAS JUST HIS SCRUPLES THAT CHARMED ME", "duration_sec": 4.725} +{"id": "121-127105-0007", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/121-127105-0007.wav", "ref": "TO THIS HIS ANSWER WAS PROMPT OH THANK GOD NO AND IS THE RECORD YOURS", "duration_sec": 5.79} +{"id": "121-127105-0008", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/121-127105-0008.wav", "ref": "HE HUNG FIRE AGAIN A WOMAN'S", "duration_sec": 2.76} +{"id": "121-127105-0009", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/121-127105-0009.wav", "ref": "SHE HAS BEEN DEAD THESE TWENTY YEARS", "duration_sec": 2.29} +{"id": "121-127105-0010", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/121-127105-0010.wav", "ref": "SHE SENT ME THE PAGES IN QUESTION BEFORE SHE DIED", "duration_sec": 2.85} +{"id": "121-127105-0011", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/121-127105-0011.wav", "ref": "SHE WAS THE MOST AGREEABLE WOMAN I'VE EVER KNOWN IN HER POSITION SHE WOULD HAVE BEEN WORTHY OF ANY WHATEVER", "duration_sec": 5.78} +{"id": "121-127105-0012", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/121-127105-0012.wav", "ref": "IT WASN'T SIMPLY THAT SHE SAID SO BUT THAT I KNEW SHE HADN'T I WAS SURE I COULD SEE", "duration_sec": 4.83} +{"id": "121-127105-0013", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/121-127105-0013.wav", "ref": "YOU'LL EASILY JUDGE WHY WHEN YOU HEAR BECAUSE THE THING HAD BEEN SUCH A SCARE HE CONTINUED TO FIX ME", "duration_sec": 5.895} +{"id": "121-127105-0014", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/121-127105-0014.wav", "ref": "YOU ARE ACUTE", "duration_sec": 2.255} +{"id": "121-127105-0015", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/121-127105-0015.wav", "ref": "HE QUITTED THE FIRE AND DROPPED BACK INTO HIS CHAIR", "duration_sec": 2.96} +{"id": "121-127105-0016", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/121-127105-0016.wav", "ref": "PROBABLY NOT TILL THE SECOND POST", "duration_sec": 2.03} +{"id": "121-127105-0017", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/121-127105-0017.wav", "ref": "IT WAS ALMOST THE TONE OF HOPE EVERYBODY WILL STAY", "duration_sec": 2.695} +{"id": "121-127105-0018", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/121-127105-0018.wav", "ref": "CRIED THE LADIES WHOSE DEPARTURE HAD BEEN FIXED", "duration_sec": 2.77} +{"id": "121-127105-0019", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/121-127105-0019.wav", "ref": "MISSUS GRIFFIN HOWEVER EXPRESSED THE NEED FOR A LITTLE MORE LIGHT", "duration_sec": 3.525} +{"id": "121-127105-0020", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/121-127105-0020.wav", "ref": "WHO WAS IT SHE WAS IN LOVE WITH THE STORY WILL TELL I TOOK UPON MYSELF TO REPLY OH I CAN'T WAIT FOR THE STORY THE STORY WON'T TELL SAID DOUGLAS NOT IN ANY LITERAL VULGAR WAY MORE'S THE PITY THEN", "duration_sec": 14.355} +{"id": "121-127105-0021", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/121-127105-0021.wav", "ref": "WON'T YOU TELL DOUGLAS", "duration_sec": 2.0} +{"id": "121-127105-0022", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/121-127105-0022.wav", "ref": "WELL IF I DON'T KNOW WHO SHE WAS IN LOVE WITH I KNOW WHO HE WAS", "duration_sec": 5.075} +{"id": "121-127105-0023", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/121-127105-0023.wav", "ref": "LET ME SAY HERE DISTINCTLY TO HAVE DONE WITH IT THAT THIS NARRATIVE FROM AN EXACT TRANSCRIPT OF MY OWN MADE MUCH LATER IS WHAT I SHALL PRESENTLY GIVE", "duration_sec": 10.91} +{"id": "121-127105-0024", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/121-127105-0024.wav", "ref": "POOR DOUGLAS BEFORE HIS DEATH WHEN IT WAS IN SIGHT COMMITTED TO ME THE MANUSCRIPT THAT REACHED HIM ON THE THIRD OF THESE DAYS AND THAT ON THE SAME SPOT WITH IMMENSE EFFECT HE BEGAN TO READ TO OUR HUSHED LITTLE CIRCLE ON THE NIGHT OF THE FOURTH", "duration_sec": 14.45} +{"id": "121-127105-0025", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/121-127105-0025.wav", "ref": "THE DEPARTING LADIES WHO HAD SAID THEY WOULD STAY DIDN'T OF COURSE THANK HEAVEN STAY THEY DEPARTED IN CONSEQUENCE OF ARRANGEMENTS MADE IN A RAGE OF CURIOSITY AS THEY PROFESSED PRODUCED BY THE TOUCHES WITH WHICH HE HAD ALREADY WORKED US UP", "duration_sec": 16.065} +{"id": "121-127105-0026", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/121-127105-0026.wav", "ref": "THE FIRST OF THESE TOUCHES CONVEYED THAT THE WRITTEN STATEMENT TOOK UP THE TALE AT A POINT AFTER IT HAD IN A MANNER BEGUN", "duration_sec": 7.53} +{"id": "121-127105-0027", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/121-127105-0027.wav", "ref": "HE HAD FOR HIS OWN TOWN RESIDENCE A BIG HOUSE FILLED WITH THE SPOILS OF TRAVEL AND THE TROPHIES OF THE CHASE BUT IT WAS TO HIS COUNTRY HOME AN OLD FAMILY PLACE IN ESSEX THAT HE WISHED HER IMMEDIATELY TO PROCEED", "duration_sec": 13.87} +{"id": "121-127105-0028", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/121-127105-0028.wav", "ref": "THE AWKWARD THING WAS THAT THEY HAD PRACTICALLY NO OTHER RELATIONS AND THAT HIS OWN AFFAIRS TOOK UP ALL HIS TIME", "duration_sec": 6.75} +{"id": "121-127105-0029", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/121-127105-0029.wav", "ref": "THERE WERE PLENTY OF PEOPLE TO HELP BUT OF COURSE THE YOUNG LADY WHO SHOULD GO DOWN AS GOVERNESS WOULD BE IN SUPREME AUTHORITY", "duration_sec": 7.31} +{"id": "121-127105-0030", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/121-127105-0030.wav", "ref": "I DON'T ANTICIPATE", "duration_sec": 2.175} +{"id": "121-127105-0031", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/121-127105-0031.wav", "ref": "SHE WAS YOUNG UNTRIED NERVOUS IT WAS A VISION OF SERIOUS DUTIES AND LITTLE COMPANY OF REALLY GREAT LONELINESS", "duration_sec": 10.765} +{"id": "121-127105-0032", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/121-127105-0032.wav", "ref": "YES BUT THAT'S JUST THE BEAUTY OF HER PASSION", "duration_sec": 3.17} +{"id": "121-127105-0033", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/121-127105-0033.wav", "ref": "IT WAS THE BEAUTY OF IT", "duration_sec": 2.355} +{"id": "121-127105-0034", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/121-127105-0034.wav", "ref": "IT SOUNDED DULL IT SOUNDED STRANGE AND ALL THE MORE SO BECAUSE OF HIS MAIN CONDITION WHICH WAS", "duration_sec": 7.41} +{"id": "121-127105-0035", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/121-127105-0035.wav", "ref": "SHE PROMISED TO DO THIS AND SHE MENTIONED TO ME THAT WHEN FOR A MOMENT DISBURDENED DELIGHTED HE HELD HER HAND THANKING HER FOR THE SACRIFICE SHE ALREADY FELT REWARDED", "duration_sec": 14.15} +{"id": "121-127105-0036", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/121-127105-0036.wav", "ref": "BUT WAS THAT ALL HER REWARD ONE OF THE LADIES ASKED", "duration_sec": 4.15} +{"id": "1221-135766-0000", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1221-135766-0000.wav", "ref": "HOW STRANGE IT SEEMED TO THE SAD WOMAN AS SHE WATCHED THE GROWTH AND THE BEAUTY THAT BECAME EVERY DAY MORE BRILLIANT AND THE INTELLIGENCE THAT THREW ITS QUIVERING SUNSHINE OVER THE TINY FEATURES OF THIS CHILD", "duration_sec": 12.435} +{"id": "1221-135766-0001", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1221-135766-0001.wav", "ref": "GOD AS A DIRECT CONSEQUENCE OF THE SIN WHICH MAN THUS PUNISHED HAD GIVEN HER A LOVELY CHILD WHOSE PLACE WAS ON THAT SAME DISHONOURED BOSOM TO CONNECT HER PARENT FOR EVER WITH THE RACE AND DESCENT OF MORTALS AND TO BE FINALLY A BLESSED SOUL IN HEAVEN", "duration_sec": 16.715} +{"id": "1221-135766-0002", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1221-135766-0002.wav", "ref": "YET THESE THOUGHTS AFFECTED HESTER PRYNNE LESS WITH HOPE THAN APPREHENSION", "duration_sec": 4.825} +{"id": "1221-135766-0003", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1221-135766-0003.wav", "ref": "THE CHILD HAD A NATIVE GRACE WHICH DOES NOT INVARIABLY CO EXIST WITH FAULTLESS BEAUTY ITS ATTIRE HOWEVER SIMPLE ALWAYS IMPRESSED THE BEHOLDER AS IF IT WERE THE VERY GARB THAT PRECISELY BECAME IT BEST", "duration_sec": 13.72} +{"id": "1221-135766-0004", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1221-135766-0004.wav", "ref": "THIS OUTWARD MUTABILITY INDICATED AND DID NOT MORE THAN FAIRLY EXPRESS THE VARIOUS PROPERTIES OF HER INNER LIFE", "duration_sec": 7.44} +{"id": "1221-135766-0005", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1221-135766-0005.wav", "ref": "HESTER COULD ONLY ACCOUNT FOR THE CHILD'S CHARACTER AND EVEN THEN MOST VAGUELY AND IMPERFECTLY BY RECALLING WHAT SHE HERSELF HAD BEEN DURING THAT MOMENTOUS PERIOD WHILE PEARL WAS IMBIBING HER SOUL FROM THE SPIRITUAL WORLD AND HER BODILY FRAME FROM ITS MATERIAL OF EARTH", "duration_sec": 16.645} +{"id": "1221-135766-0006", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1221-135766-0006.wav", "ref": "THEY WERE NOW ILLUMINATED BY THE MORNING RADIANCE OF A YOUNG CHILD'S DISPOSITION BUT LATER IN THE DAY OF EARTHLY EXISTENCE MIGHT BE PROLIFIC OF THE STORM AND WHIRLWIND", "duration_sec": 11.415} +{"id": "1221-135766-0007", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1221-135766-0007.wav", "ref": "HESTER PRYNNE NEVERTHELESS THE LOVING MOTHER OF THIS ONE CHILD RAN LITTLE RISK OF ERRING ON THE SIDE OF UNDUE SEVERITY", "duration_sec": 8.795} +{"id": "1221-135766-0008", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1221-135766-0008.wav", "ref": "MINDFUL HOWEVER OF HER OWN ERRORS AND MISFORTUNES SHE EARLY SOUGHT TO IMPOSE A TENDER BUT STRICT CONTROL OVER THE INFANT IMMORTALITY THAT WAS COMMITTED TO HER CHARGE", "duration_sec": 10.78} +{"id": "1221-135766-0009", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1221-135766-0009.wav", "ref": "AS TO ANY OTHER KIND OF DISCIPLINE WHETHER ADDRESSED TO HER MIND OR HEART LITTLE PEARL MIGHT OR MIGHT NOT BE WITHIN ITS REACH IN ACCORDANCE WITH THE CAPRICE THAT RULED THE MOMENT", "duration_sec": 10.19} +{"id": "1221-135766-0010", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1221-135766-0010.wav", "ref": "IT WAS A LOOK SO INTELLIGENT YET INEXPLICABLE PERVERSE SOMETIMES SO MALICIOUS BUT GENERALLY ACCOMPANIED BY A WILD FLOW OF SPIRITS THAT HESTER COULD NOT HELP QUESTIONING AT SUCH MOMENTS WHETHER PEARL WAS A HUMAN CHILD", "duration_sec": 15.05} +{"id": "1221-135766-0011", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1221-135766-0011.wav", "ref": "BEHOLDING IT HESTER WAS CONSTRAINED TO RUSH TOWARDS THE CHILD TO PURSUE THE LITTLE ELF IN THE FLIGHT WHICH SHE INVARIABLY BEGAN TO SNATCH HER TO HER BOSOM WITH A CLOSE PRESSURE AND EARNEST KISSES NOT SO MUCH FROM OVERFLOWING LOVE AS TO ASSURE HERSELF THAT PEARL WAS FLESH AND BLOOD AND NOT UTTERLY DELUSIVE", "duration_sec": 21.345} +{"id": "1221-135766-0012", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1221-135766-0012.wav", "ref": "BROODING OVER ALL THESE MATTERS THE MOTHER FELT LIKE ONE WHO HAS EVOKED A SPIRIT BUT BY SOME IRREGULARITY IN THE PROCESS OF CONJURATION HAS FAILED TO WIN THE MASTER WORD THAT SHOULD CONTROL THIS NEW AND INCOMPREHENSIBLE INTELLIGENCE", "duration_sec": 16.22} +{"id": "1221-135766-0013", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1221-135766-0013.wav", "ref": "PEARL WAS A BORN OUTCAST OF THE INFANTILE WORLD", "duration_sec": 3.645} +{"id": "1221-135766-0014", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1221-135766-0014.wav", "ref": "PEARL SAW AND GAZED INTENTLY BUT NEVER SOUGHT TO MAKE ACQUAINTANCE", "duration_sec": 4.75} +{"id": "1221-135766-0015", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1221-135766-0015.wav", "ref": "IF SPOKEN TO SHE WOULD NOT SPEAK AGAIN", "duration_sec": 2.63} +{"id": "1221-135767-0000", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1221-135767-0000.wav", "ref": "HESTER PRYNNE WENT ONE DAY TO THE MANSION OF GOVERNOR BELLINGHAM WITH A PAIR OF GLOVES WHICH SHE HAD FRINGED AND EMBROIDERED TO HIS ORDER AND WHICH WERE TO BE WORN ON SOME GREAT OCCASION OF STATE FOR THOUGH THE CHANCES OF A POPULAR ELECTION HAD CAUSED THIS FORMER RULER TO DESCEND A STEP OR TWO FROM THE HIGHEST RANK HE STILL HELD AN HONOURABLE AND INFLUENTIAL PLACE AMONG THE COLONIAL MAGISTRACY", "duration_sec": 24.85} +{"id": "1221-135767-0001", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1221-135767-0001.wav", "ref": "ANOTHER AND FAR MORE IMPORTANT REASON THAN THE DELIVERY OF A PAIR OF EMBROIDERED GLOVES IMPELLED HESTER AT THIS TIME TO SEEK AN INTERVIEW WITH A PERSONAGE OF SO MUCH POWER AND ACTIVITY IN THE AFFAIRS OF THE SETTLEMENT", "duration_sec": 13.43} +{"id": "1221-135767-0002", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1221-135767-0002.wav", "ref": "AT THAT EPOCH OF PRISTINE SIMPLICITY HOWEVER MATTERS OF EVEN SLIGHTER PUBLIC INTEREST AND OF FAR LESS INTRINSIC WEIGHT THAN THE WELFARE OF HESTER AND HER CHILD WERE STRANGELY MIXED UP WITH THE DELIBERATIONS OF LEGISLATORS AND ACTS OF STATE", "duration_sec": 16.12} +{"id": "1221-135767-0003", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1221-135767-0003.wav", "ref": "THE PERIOD WAS HARDLY IF AT ALL EARLIER THAN THAT OF OUR STORY WHEN A DISPUTE CONCERNING THE RIGHT OF PROPERTY IN A PIG NOT ONLY CAUSED A FIERCE AND BITTER CONTEST IN THE LEGISLATIVE BODY OF THE COLONY BUT RESULTED IN AN IMPORTANT MODIFICATION OF THE FRAMEWORK ITSELF OF THE LEGISLATURE", "duration_sec": 18.63} +{"id": "1221-135767-0004", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1221-135767-0004.wav", "ref": "WE HAVE SPOKEN OF PEARL'S RICH AND LUXURIANT BEAUTY A BEAUTY THAT SHONE WITH DEEP AND VIVID TINTS A BRIGHT COMPLEXION EYES POSSESSING INTENSITY BOTH OF DEPTH AND GLOW AND HAIR ALREADY OF A DEEP GLOSSY BROWN AND WHICH IN AFTER YEARS WOULD BE NEARLY AKIN TO BLACK", "duration_sec": 19.09} +{"id": "1221-135767-0005", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1221-135767-0005.wav", "ref": "IT WAS THE SCARLET LETTER IN ANOTHER FORM THE SCARLET LETTER ENDOWED WITH LIFE", "duration_sec": 5.865} +{"id": "1221-135767-0006", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1221-135767-0006.wav", "ref": "THE MOTHER HERSELF AS IF THE RED IGNOMINY WERE SO DEEPLY SCORCHED INTO HER BRAIN THAT ALL HER CONCEPTIONS ASSUMED ITS FORM HAD CAREFULLY WROUGHT OUT THE SIMILITUDE LAVISHING MANY HOURS OF MORBID INGENUITY TO CREATE AN ANALOGY BETWEEN THE OBJECT OF HER AFFECTION AND THE EMBLEM OF HER GUILT AND TORTURE", "duration_sec": 20.56} +{"id": "1221-135767-0007", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1221-135767-0007.wav", "ref": "BUT IN TRUTH PEARL WAS THE ONE AS WELL AS THE OTHER AND ONLY IN CONSEQUENCE OF THAT IDENTITY HAD HESTER CONTRIVED SO PERFECTLY TO REPRESENT THE SCARLET LETTER IN HER APPEARANCE", "duration_sec": 12.77} +{"id": "1221-135767-0008", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1221-135767-0008.wav", "ref": "COME THEREFORE AND LET US FLING MUD AT THEM", "duration_sec": 3.095} +{"id": "1221-135767-0009", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1221-135767-0009.wav", "ref": "BUT PEARL WHO WAS A DAUNTLESS CHILD AFTER FROWNING STAMPING HER FOOT AND SHAKING HER LITTLE HAND WITH A VARIETY OF THREATENING GESTURES SUDDENLY MADE A RUSH AT THE KNOT OF HER ENEMIES AND PUT THEM ALL TO FLIGHT", "duration_sec": 13.34} +{"id": "1221-135767-0010", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1221-135767-0010.wav", "ref": "SHE SCREAMED AND SHOUTED TOO WITH A TERRIFIC VOLUME OF SOUND WHICH DOUBTLESS CAUSED THE HEARTS OF THE FUGITIVES TO QUAKE WITHIN THEM", "duration_sec": 8.2} +{"id": "1221-135767-0011", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1221-135767-0011.wav", "ref": "IT WAS FURTHER DECORATED WITH STRANGE AND SEEMINGLY CABALISTIC FIGURES AND DIAGRAMS SUITABLE TO THE QUAINT TASTE OF THE AGE WHICH HAD BEEN DRAWN IN THE STUCCO WHEN NEWLY LAID ON AND HAD NOW GROWN HARD AND DURABLE FOR THE ADMIRATION OF AFTER TIMES", "duration_sec": 16.51} +{"id": "1221-135767-0012", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1221-135767-0012.wav", "ref": "THEY APPROACHED THE DOOR WHICH WAS OF AN ARCHED FORM AND FLANKED ON EACH SIDE BY A NARROW TOWER OR PROJECTION OF THE EDIFICE IN BOTH OF WHICH WERE LATTICE WINDOWS THE WOODEN SHUTTERS TO CLOSE OVER THEM AT NEED", "duration_sec": 13.885} +{"id": "1221-135767-0013", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1221-135767-0013.wav", "ref": "LIFTING THE IRON HAMMER THAT HUNG AT THE PORTAL HESTER PRYNNE GAVE A SUMMONS WHICH WAS ANSWERED BY ONE OF THE GOVERNOR'S BOND SERVANT A FREE BORN ENGLISHMAN BUT NOW A SEVEN YEARS SLAVE", "duration_sec": 11.985} +{"id": "1221-135767-0014", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1221-135767-0014.wav", "ref": "YEA HIS HONOURABLE WORSHIP IS WITHIN BUT HE HATH A GODLY MINISTER OR TWO WITH HIM AND LIKEWISE A LEECH", "duration_sec": 7.07} +{"id": "1221-135767-0015", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1221-135767-0015.wav", "ref": "YE MAY NOT SEE HIS WORSHIP NOW", "duration_sec": 2.85} +{"id": "1221-135767-0016", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1221-135767-0016.wav", "ref": "WITH MANY VARIATIONS SUGGESTED BY THE NATURE OF HIS BUILDING MATERIALS DIVERSITY OF CLIMATE AND A DIFFERENT MODE OF SOCIAL LIFE GOVERNOR BELLINGHAM HAD PLANNED HIS NEW HABITATION AFTER THE RESIDENCES OF GENTLEMEN OF FAIR ESTATE IN HIS NATIVE LAND", "duration_sec": 15.255} +{"id": "1221-135767-0017", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1221-135767-0017.wav", "ref": "ON THE TABLE IN TOKEN THAT THE SENTIMENT OF OLD ENGLISH HOSPITALITY HAD NOT BEEN LEFT BEHIND STOOD A LARGE PEWTER TANKARD AT THE BOTTOM OF WHICH HAD HESTER OR PEARL PEEPED INTO IT THEY MIGHT HAVE SEEN THE FROTHY REMNANT OF A RECENT DRAUGHT OF ALE", "duration_sec": 16.72} +{"id": "1221-135767-0018", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1221-135767-0018.wav", "ref": "LITTLE PEARL WHO WAS AS GREATLY PLEASED WITH THE GLEAMING ARMOUR AS SHE HAD BEEN WITH THE GLITTERING FRONTISPIECE OF THE HOUSE SPENT SOME TIME LOOKING INTO THE POLISHED MIRROR OF THE BREASTPLATE", "duration_sec": 11.16} +{"id": "1221-135767-0019", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1221-135767-0019.wav", "ref": "MOTHER CRIED SHE I SEE YOU HERE LOOK LOOK", "duration_sec": 3.78} +{"id": "1221-135767-0020", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1221-135767-0020.wav", "ref": "IN TRUTH SHE SEEMED ABSOLUTELY HIDDEN BEHIND IT", "duration_sec": 3.345} +{"id": "1221-135767-0021", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1221-135767-0021.wav", "ref": "PEARL ACCORDINGLY RAN TO THE BOW WINDOW AT THE FURTHER END OF THE HALL AND LOOKED ALONG THE VISTA OF A GARDEN WALK CARPETED WITH CLOSELY SHAVEN GRASS AND BORDERED WITH SOME RUDE AND IMMATURE ATTEMPT AT SHRUBBERY", "duration_sec": 12.72} +{"id": "1221-135767-0022", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1221-135767-0022.wav", "ref": "BUT THE PROPRIETOR APPEARED ALREADY TO HAVE RELINQUISHED AS HOPELESS THE EFFORT TO PERPETUATE ON THIS SIDE OF THE ATLANTIC IN A HARD SOIL AND AMID THE CLOSE STRUGGLE FOR SUBSISTENCE THE NATIVE ENGLISH TASTE FOR ORNAMENTAL GARDENING", "duration_sec": 14.395} +{"id": "1221-135767-0023", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1221-135767-0023.wav", "ref": "THERE WERE A FEW ROSE BUSHES HOWEVER AND A NUMBER OF APPLE TREES PROBABLY THE DESCENDANTS OF THOSE PLANTED BY THE REVEREND MISTER BLACKSTONE THE FIRST SETTLER OF THE PENINSULA THAT HALF MYTHOLOGICAL PERSONAGE WHO RIDES THROUGH OUR EARLY ANNALS SEATED ON THE BACK OF A BULL", "duration_sec": 16.27} +{"id": "1221-135767-0024", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1221-135767-0024.wav", "ref": "PEARL SEEING THE ROSE BUSHES BEGAN TO CRY FOR A RED ROSE AND WOULD NOT BE PACIFIED", "duration_sec": 5.85} +{"id": "1284-1180-0000", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1284-1180-0000.wav", "ref": "HE WORE BLUE SILK STOCKINGS BLUE KNEE PANTS WITH GOLD BUCKLES A BLUE RUFFLED WAIST AND A JACKET OF BRIGHT BLUE BRAIDED WITH GOLD", "duration_sec": 8.12} +{"id": "1284-1180-0001", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1284-1180-0001.wav", "ref": "HIS HAT HAD A PEAKED CROWN AND A FLAT BRIM AND AROUND THE BRIM WAS A ROW OF TINY GOLDEN BELLS THAT TINKLED WHEN HE MOVED", "duration_sec": 7.755} +{"id": "1284-1180-0002", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1284-1180-0002.wav", "ref": "INSTEAD OF SHOES THE OLD MAN WORE BOOTS WITH TURNOVER TOPS AND HIS BLUE COAT HAD WIDE CUFFS OF GOLD BRAID", "duration_sec": 7.68} +{"id": "1284-1180-0003", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1284-1180-0003.wav", "ref": "FOR A LONG TIME HE HAD WISHED TO EXPLORE THE BEAUTIFUL LAND OF OZ IN WHICH THEY LIVED", "duration_sec": 4.835} +{"id": "1284-1180-0004", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1284-1180-0004.wav", "ref": "WHEN THEY WERE OUTSIDE UNC SIMPLY LATCHED THE DOOR AND STARTED UP THE PATH", "duration_sec": 4.285} +{"id": "1284-1180-0005", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1284-1180-0005.wav", "ref": "NO ONE WOULD DISTURB THEIR LITTLE HOUSE EVEN IF ANYONE CAME SO FAR INTO THE THICK FOREST WHILE THEY WERE GONE", "duration_sec": 6.55} +{"id": "1284-1180-0006", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1284-1180-0006.wav", "ref": "AT THE FOOT OF THE MOUNTAIN THAT SEPARATED THE COUNTRY OF THE MUNCHKINS FROM THE COUNTRY OF THE GILLIKINS THE PATH DIVIDED", "duration_sec": 6.865} +{"id": "1284-1180-0007", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1284-1180-0007.wav", "ref": "HE KNEW IT WOULD TAKE THEM TO THE HOUSE OF THE CROOKED MAGICIAN WHOM HE HAD NEVER SEEN BUT WHO WAS THEIR NEAREST NEIGHBOR", "duration_sec": 6.265} +{"id": "1284-1180-0008", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1284-1180-0008.wav", "ref": "ALL THE MORNING THEY TRUDGED UP THE MOUNTAIN PATH AND AT NOON UNC AND OJO SAT ON A FALLEN TREE TRUNK AND ATE THE LAST OF THE BREAD WHICH THE OLD MUNCHKIN HAD PLACED IN HIS POCKET", "duration_sec": 10.49} +{"id": "1284-1180-0009", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1284-1180-0009.wav", "ref": "THEN THEY STARTED ON AGAIN AND TWO HOURS LATER CAME IN SIGHT OF THE HOUSE OF DOCTOR PIPT", "duration_sec": 6.285} +{"id": "1284-1180-0010", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1284-1180-0010.wav", "ref": "UNC KNOCKED AT THE DOOR OF THE HOUSE AND A CHUBBY PLEASANT FACED WOMAN DRESSED ALL IN BLUE OPENED IT AND GREETED THE VISITORS WITH A SMILE", "duration_sec": 8.635} +{"id": "1284-1180-0011", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1284-1180-0011.wav", "ref": "I AM MY DEAR AND ALL STRANGERS ARE WELCOME TO MY HOME", "duration_sec": 4.275} +{"id": "1284-1180-0012", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1284-1180-0012.wav", "ref": "WE HAVE COME FROM A FAR LONELIER PLACE THAN THIS A LONELIER PLACE", "duration_sec": 4.88} +{"id": "1284-1180-0013", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1284-1180-0013.wav", "ref": "AND YOU MUST BE OJO THE UNLUCKY SHE ADDED", "duration_sec": 3.705} +{"id": "1284-1180-0014", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1284-1180-0014.wav", "ref": "OJO HAD NEVER EATEN SUCH A FINE MEAL IN ALL HIS LIFE", "duration_sec": 3.665} +{"id": "1284-1180-0015", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1284-1180-0015.wav", "ref": "WE ARE TRAVELING REPLIED OJO AND WE STOPPED AT YOUR HOUSE JUST TO REST AND REFRESH OURSELVES", "duration_sec": 5.835} +{"id": "1284-1180-0016", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1284-1180-0016.wav", "ref": "THE WOMAN SEEMED THOUGHTFUL", "duration_sec": 2.13} +{"id": "1284-1180-0017", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1284-1180-0017.wav", "ref": "AT ONE END STOOD A GREAT FIREPLACE IN WHICH A BLUE LOG WAS BLAZING WITH A BLUE FLAME AND OVER THE FIRE HUNG FOUR KETTLES IN A ROW ALL BUBBLING AND STEAMING AT A GREAT RATE", "duration_sec": 10.68} +{"id": "1284-1180-0018", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1284-1180-0018.wav", "ref": "IT TAKES ME SEVERAL YEARS TO MAKE THIS MAGIC POWDER BUT AT THIS MOMENT I AM PLEASED TO SAY IT IS NEARLY DONE YOU SEE I AM MAKING IT FOR MY GOOD WIFE MARGOLOTTE WHO WANTS TO USE SOME OF IT FOR A PURPOSE OF HER OWN", "duration_sec": 12.005} +{"id": "1284-1180-0019", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1284-1180-0019.wav", "ref": "YOU MUST KNOW SAID MARGOLOTTE WHEN THEY WERE ALL SEATED TOGETHER ON THE BROAD WINDOW SEAT THAT MY HUSBAND FOOLISHLY GAVE AWAY ALL THE POWDER OF LIFE HE FIRST MADE TO OLD MOMBI THE WITCH WHO USED TO LIVE IN THE COUNTRY OF THE GILLIKINS TO THE NORTH OF HERE", "duration_sec": 15.025} +{"id": "1284-1180-0020", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1284-1180-0020.wav", "ref": "THE FIRST LOT WE TESTED ON OUR GLASS CAT WHICH NOT ONLY BEGAN TO LIVE BUT HAS LIVED EVER SINCE", "duration_sec": 5.87} +{"id": "1284-1180-0021", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1284-1180-0021.wav", "ref": "I THINK THE NEXT GLASS CAT THE MAGICIAN MAKES WILL HAVE NEITHER BRAINS NOR HEART FOR THEN IT WILL NOT OBJECT TO CATCHING MICE AND MAY PROVE OF SOME USE TO US", "duration_sec": 9.84} +{"id": "1284-1180-0022", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1284-1180-0022.wav", "ref": "I'M AFRAID I DON'T KNOW MUCH ABOUT THE LAND OF OZ", "duration_sec": 2.885} +{"id": "1284-1180-0023", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1284-1180-0023.wav", "ref": "YOU SEE I'VE LIVED ALL MY LIFE WITH UNC NUNKIE THE SILENT ONE AND THERE WAS NO ONE TO TELL ME ANYTHING", "duration_sec": 5.61} +{"id": "1284-1180-0024", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1284-1180-0024.wav", "ref": "THAT IS ONE REASON YOU ARE OJO THE UNLUCKY SAID THE WOMAN IN A SYMPATHETIC TONE", "duration_sec": 5.26} +{"id": "1284-1180-0025", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1284-1180-0025.wav", "ref": "I THINK I MUST SHOW YOU MY PATCHWORK GIRL SAID MARGOLOTTE LAUGHING AT THE BOY'S ASTONISHMENT FOR SHE IS RATHER DIFFICULT TO EXPLAIN", "duration_sec": 8.705} +{"id": "1284-1180-0026", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1284-1180-0026.wav", "ref": "BUT FIRST I WILL TELL YOU THAT FOR MANY YEARS I HAVE LONGED FOR A SERVANT TO HELP ME WITH THE HOUSEWORK AND TO COOK THE MEALS AND WASH THE DISHES", "duration_sec": 8.29} +{"id": "1284-1180-0027", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1284-1180-0027.wav", "ref": "YET THAT TASK WAS NOT SO EASY AS YOU MAY SUPPOSE", "duration_sec": 3.27} +{"id": "1284-1180-0028", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1284-1180-0028.wav", "ref": "A BED QUILT MADE OF PATCHES OF DIFFERENT KINDS AND COLORS OF CLOTH ALL NEATLY SEWED TOGETHER", "duration_sec": 6.045} +{"id": "1284-1180-0029", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1284-1180-0029.wav", "ref": "SOMETIMES IT IS CALLED A CRAZY QUILT BECAUSE THE PATCHES AND COLORS ARE SO MIXED UP", "duration_sec": 5.335} +{"id": "1284-1180-0030", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1284-1180-0030.wav", "ref": "WHEN I FOUND IT I SAID TO MYSELF THAT IT WOULD DO NICELY FOR MY SERVANT GIRL FOR WHEN SHE WAS BROUGHT TO LIFE SHE WOULD NOT BE PROUD NOR HAUGHTY AS THE GLASS CAT IS FOR SUCH A DREADFUL MIXTURE OF COLORS WOULD DISCOURAGE HER FROM TRYING TO BE AS DIGNIFIED AS THE BLUE MUNCHKINS ARE", "duration_sec": 16.22} +{"id": "1284-1180-0031", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1284-1180-0031.wav", "ref": "AT THE EMERALD CITY WHERE OUR PRINCESS OZMA LIVES GREEN IS THE POPULAR COLOR", "duration_sec": 4.825} +{"id": "1284-1180-0032", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1284-1180-0032.wav", "ref": "I WILL SHOW YOU WHAT A GOOD JOB I DID AND SHE WENT TO A TALL CUPBOARD AND THREW OPEN THE DOORS", "duration_sec": 5.78} +{"id": "1284-1181-0000", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1284-1181-0000.wav", "ref": "OJO EXAMINED THIS CURIOUS CONTRIVANCE WITH WONDER", "duration_sec": 3.965} +{"id": "1284-1181-0001", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1284-1181-0001.wav", "ref": "MARGOLOTTE HAD FIRST MADE THE GIRL'S FORM FROM THE PATCHWORK QUILT AND THEN SHE HAD DRESSED IT WITH A PATCHWORK SKIRT AND AN APRON WITH POCKETS IN IT USING THE SAME GAY MATERIAL THROUGHOUT", "duration_sec": 11.43} +{"id": "1284-1181-0002", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1284-1181-0002.wav", "ref": "THE HEAD OF THE PATCHWORK GIRL WAS THE MOST CURIOUS PART OF HER", "duration_sec": 3.835} +{"id": "1284-1181-0003", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1284-1181-0003.wav", "ref": "THE HAIR WAS OF BROWN YARN AND HUNG DOWN ON HER NECK IN SEVERAL NEAT BRAIDS", "duration_sec": 4.505} +{"id": "1284-1181-0004", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1284-1181-0004.wav", "ref": "GOLD IS THE MOST COMMON METAL IN THE LAND OF OZ AND IS USED FOR MANY PURPOSES BECAUSE IT IS SOFT AND PLIABLE", "duration_sec": 7.15} +{"id": "1284-1181-0005", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1284-1181-0005.wav", "ref": "NO I FORGOT ALL ABOUT THE BRAINS EXCLAIMED THE WOMAN", "duration_sec": 3.855} +{"id": "1284-1181-0006", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1284-1181-0006.wav", "ref": "WELL THAT MAY BE TRUE AGREED MARGOLOTTE BUT ON THE CONTRARY A SERVANT WITH TOO MUCH BRAINS IS SURE TO BECOME INDEPENDENT AND HIGH AND MIGHTY AND FEEL ABOVE HER WORK", "duration_sec": 11.405} +{"id": "1284-1181-0007", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1284-1181-0007.wav", "ref": "SHE POURED INTO THE DISH A QUANTITY FROM EACH OF THESE BOTTLES", "duration_sec": 4.04} +{"id": "1284-1181-0008", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1284-1181-0008.wav", "ref": "I THINK THAT WILL DO SHE CONTINUED FOR THE OTHER QUALITIES ARE NOT NEEDED IN A SERVANT", "duration_sec": 6.08} +{"id": "1284-1181-0009", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1284-1181-0009.wav", "ref": "SHE RAN TO HER HUSBAND'S SIDE AT ONCE AND HELPED HIM LIFT THE FOUR KETTLES FROM THE FIRE", "duration_sec": 5.245} +{"id": "1284-1181-0010", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1284-1181-0010.wav", "ref": "THEIR CONTENTS HAD ALL BOILED AWAY LEAVING IN THE BOTTOM OF EACH KETTLE A FEW GRAINS OF FINE WHITE POWDER", "duration_sec": 6.435} +{"id": "1284-1181-0011", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1284-1181-0011.wav", "ref": "VERY CAREFULLY THE MAGICIAN REMOVED THIS POWDER PLACING IT ALL TOGETHER IN A GOLDEN DISH WHERE HE MIXED IT WITH A GOLDEN SPOON", "duration_sec": 7.75} +{"id": "1284-1181-0012", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1284-1181-0012.wav", "ref": "NO ONE SAW HIM DO THIS FOR ALL WERE LOOKING AT THE POWDER OF LIFE BUT SOON THE WOMAN REMEMBERED WHAT SHE HAD BEEN DOING AND CAME BACK TO THE CUPBOARD", "duration_sec": 8.51} +{"id": "1284-1181-0013", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1284-1181-0013.wav", "ref": "OJO BECAME A BIT UNEASY AT THIS FOR HE HAD ALREADY PUT QUITE A LOT OF THE CLEVERNESS POWDER IN THE DISH BUT HE DARED NOT INTERFERE AND SO HE COMFORTED HIMSELF WITH THE THOUGHT THAT ONE CANNOT HAVE TOO MUCH CLEVERNESS", "duration_sec": 12.66} +{"id": "1284-1181-0014", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1284-1181-0014.wav", "ref": "HE SELECTED A SMALL GOLD BOTTLE WITH A PEPPER BOX TOP SO THAT THE POWDER MIGHT BE SPRINKLED ON ANY OBJECT THROUGH THE SMALL HOLES", "duration_sec": 7.92} +{"id": "1284-1181-0015", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1284-1181-0015.wav", "ref": "MOST PEOPLE TALK TOO MUCH SO IT IS A RELIEF TO FIND ONE WHO TALKS TOO LITTLE", "duration_sec": 5.115} +{"id": "1284-1181-0016", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1284-1181-0016.wav", "ref": "I AM NOT ALLOWED TO PERFORM MAGIC EXCEPT FOR MY OWN AMUSEMENT HE TOLD HIS VISITORS AS HE LIGHTED A PIPE WITH A CROOKED STEM AND BEGAN TO SMOKE", "duration_sec": 9.515} +{"id": "1284-1181-0017", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1284-1181-0017.wav", "ref": "THE WIZARD OF OZ WHO USED TO BE A HUMBUG AND KNEW NO MAGIC AT ALL HAS BEEN TAKING LESSONS OF GLINDA AND I'M TOLD HE IS GETTING TO BE A PRETTY GOOD WIZARD BUT HE IS MERELY THE ASSISTANT OF THE GREAT SORCERESS", "duration_sec": 11.775} +{"id": "1284-1181-0018", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1284-1181-0018.wav", "ref": "IT TRULY IS ASSERTED THE MAGICIAN", "duration_sec": 3.16} +{"id": "1284-1181-0019", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1284-1181-0019.wav", "ref": "I NOW USE THEM AS ORNAMENTAL STATUARY IN MY GARDEN", "duration_sec": 3.2} +{"id": "1284-1181-0020", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1284-1181-0020.wav", "ref": "DEAR ME WHAT A CHATTERBOX YOU'RE GETTING TO BE UNC REMARKED THE MAGICIAN WHO WAS PLEASED WITH THE COMPLIMENT", "duration_sec": 6.73} +{"id": "1284-1181-0021", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1284-1181-0021.wav", "ref": "ASKED THE VOICE IN SCORNFUL ACCENTS", "duration_sec": 2.7} +{"id": "1284-134647-0000", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1284-134647-0000.wav", "ref": "THE GRATEFUL APPLAUSE OF THE CLERGY HAS CONSECRATED THE MEMORY OF A PRINCE WHO INDULGED THEIR PASSIONS AND PROMOTED THEIR INTEREST", "duration_sec": 8.53} +{"id": "1284-134647-0001", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1284-134647-0001.wav", "ref": "THE EDICT OF MILAN THE GREAT CHARTER OF TOLERATION HAD CONFIRMED TO EACH INDIVIDUAL OF THE ROMAN WORLD THE PRIVILEGE OF CHOOSING AND PROFESSING HIS OWN RELIGION", "duration_sec": 10.275} +{"id": "1284-134647-0002", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1284-134647-0002.wav", "ref": "BUT THIS INESTIMABLE PRIVILEGE WAS SOON VIOLATED WITH THE KNOWLEDGE OF TRUTH THE EMPEROR IMBIBED THE MAXIMS OF PERSECUTION AND THE SECTS WHICH DISSENTED FROM THE CATHOLIC CHURCH WERE AFFLICTED AND OPPRESSED BY THE TRIUMPH OF CHRISTIANITY", "duration_sec": 15.11} +{"id": "1284-134647-0003", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1284-134647-0003.wav", "ref": "CONSTANTINE EASILY BELIEVED THAT THE HERETICS WHO PRESUMED TO DISPUTE HIS OPINIONS OR TO OPPOSE HIS COMMANDS WERE GUILTY OF THE MOST ABSURD AND CRIMINAL OBSTINACY AND THAT A SEASONABLE APPLICATION OF MODERATE SEVERITIES MIGHT SAVE THOSE UNHAPPY MEN FROM THE DANGER OF AN EVERLASTING CONDEMNATION", "duration_sec": 20.145} +{"id": "1284-134647-0004", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1284-134647-0004.wav", "ref": "SOME OF THE PENAL REGULATIONS WERE COPIED FROM THE EDICTS OF DIOCLETIAN AND THIS METHOD OF CONVERSION WAS APPLAUDED BY THE SAME BISHOPS WHO HAD FELT THE HAND OF OPPRESSION AND PLEADED FOR THE RIGHTS OF HUMANITY", "duration_sec": 12.835} +{"id": "1284-134647-0005", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1284-134647-0005.wav", "ref": "THEY ASSERTED WITH CONFIDENCE AND ALMOST WITH EXULTATION THAT THE APOSTOLICAL SUCCESSION WAS INTERRUPTED THAT ALL THE BISHOPS OF EUROPE AND ASIA WERE INFECTED BY THE CONTAGION OF GUILT AND SCHISM AND THAT THE PREROGATIVES OF THE CATHOLIC CHURCH WERE CONFINED TO THE CHOSEN PORTION OF THE AFRICAN BELIEVERS WHO ALONE HAD PRESERVED INVIOLATE THE INTEGRITY OF THEIR FAITH AND DISCIPLINE", "duration_sec": 23.335} +{"id": "1284-134647-0006", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1284-134647-0006.wav", "ref": "BISHOPS VIRGINS AND EVEN SPOTLESS INFANTS WERE SUBJECTED TO THE DISGRACE OF A PUBLIC PENANCE BEFORE THEY COULD BE ADMITTED TO THE COMMUNION OF THE DONATISTS", "duration_sec": 10.155} +{"id": "1284-134647-0007", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1284-134647-0007.wav", "ref": "PROSCRIBED BY THE CIVIL AND ECCLESIASTICAL POWERS OF THE EMPIRE THE DONATISTS STILL MAINTAINED IN SOME PROVINCES PARTICULARLY IN NUMIDIA THEIR SUPERIOR NUMBERS AND FOUR HUNDRED BISHOPS ACKNOWLEDGED THE JURISDICTION OF THEIR PRIMATE", "duration_sec": 14.17} +{"id": "1320-122612-0000", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1320-122612-0000.wav", "ref": "SINCE THE PERIOD OF OUR TALE THE ACTIVE SPIRIT OF THE COUNTRY HAS SURROUNDED IT WITH A BELT OF RICH AND THRIVING SETTLEMENTS THOUGH NONE BUT THE HUNTER OR THE SAVAGE IS EVER KNOWN EVEN NOW TO PENETRATE ITS WILD RECESSES", "duration_sec": 13.48} +{"id": "1320-122612-0001", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1320-122612-0001.wav", "ref": "THE DEWS WERE SUFFERED TO EXHALE AND THE SUN HAD DISPERSED THE MISTS AND WAS SHEDDING A STRONG AND CLEAR LIGHT IN THE FOREST WHEN THE TRAVELERS RESUMED THEIR JOURNEY", "duration_sec": 9.52} +{"id": "1320-122612-0002", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1320-122612-0002.wav", "ref": "AFTER PROCEEDING A FEW MILES THE PROGRESS OF HAWKEYE WHO LED THE ADVANCE BECAME MORE DELIBERATE AND WATCHFUL", "duration_sec": 7.46} +{"id": "1320-122612-0003", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1320-122612-0003.wav", "ref": "HE OFTEN STOPPED TO EXAMINE THE TREES NOR DID HE CROSS A RIVULET WITHOUT ATTENTIVELY CONSIDERING THE QUANTITY THE VELOCITY AND THE COLOR OF ITS WATERS", "duration_sec": 9.865} +{"id": "1320-122612-0004", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1320-122612-0004.wav", "ref": "DISTRUSTING HIS OWN JUDGMENT HIS APPEALS TO THE OPINION OF CHINGACHGOOK WERE FREQUENT AND EARNEST", "duration_sec": 6.425} +{"id": "1320-122612-0005", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1320-122612-0005.wav", "ref": "YET HERE ARE WE WITHIN A SHORT RANGE OF THE SCAROONS AND NOT A SIGN OF A TRAIL HAVE WE CROSSED", "duration_sec": 5.915} +{"id": "1320-122612-0006", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1320-122612-0006.wav", "ref": "LET US RETRACE OUR STEPS AND EXAMINE AS WE GO WITH KEENER EYES", "duration_sec": 4.845} +{"id": "1320-122612-0007", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1320-122612-0007.wav", "ref": "CHINGACHGOOK HAD CAUGHT THE LOOK AND MOTIONING WITH HIS HAND HE BADE HIM SPEAK", "duration_sec": 5.54} +{"id": "1320-122612-0008", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1320-122612-0008.wav", "ref": "THE EYES OF THE WHOLE PARTY FOLLOWED THE UNEXPECTED MOVEMENT AND READ THEIR SUCCESS IN THE AIR OF TRIUMPH THAT THE YOUTH ASSUMED", "duration_sec": 7.875} +{"id": "1320-122612-0009", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1320-122612-0009.wav", "ref": "IT WOULD HAVE BEEN MORE WONDERFUL HAD HE SPOKEN WITHOUT A BIDDING", "duration_sec": 3.88} +{"id": "1320-122612-0010", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1320-122612-0010.wav", "ref": "SEE SAID UNCAS POINTING NORTH AND SOUTH AT THE EVIDENT MARKS OF THE BROAD TRAIL ON EITHER SIDE OF HIM THE DARK HAIR HAS GONE TOWARD THE FOREST", "duration_sec": 10.195} +{"id": "1320-122612-0011", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1320-122612-0011.wav", "ref": "IF A ROCK OR A RIVULET OR A BIT OF EARTH HARDER THAN COMMON SEVERED THE LINKS OF THE CLEW THEY FOLLOWED THE TRUE EYE OF THE SCOUT RECOVERED THEM AT A DISTANCE AND SELDOM RENDERED THE DELAY OF A SINGLE MOMENT NECESSARY", "duration_sec": 13.695} +{"id": "1320-122612-0012", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1320-122612-0012.wav", "ref": "EXTINGUISHED BRANDS WERE LYING AROUND A SPRING THE OFFALS OF A DEER WERE SCATTERED ABOUT THE PLACE AND THE TREES BORE EVIDENT MARKS OF HAVING BEEN BROWSED BY THE HORSES", "duration_sec": 10.49} +{"id": "1320-122612-0013", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1320-122612-0013.wav", "ref": "A CIRCLE OF A FEW HUNDRED FEET IN CIRCUMFERENCE WAS DRAWN AND EACH OF THE PARTY TOOK A SEGMENT FOR HIS PORTION", "duration_sec": 6.55} +{"id": "1320-122612-0014", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1320-122612-0014.wav", "ref": "THE EXAMINATION HOWEVER RESULTED IN NO DISCOVERY", "duration_sec": 3.515} +{"id": "1320-122612-0015", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1320-122612-0015.wav", "ref": "THE WHOLE PARTY CROWDED TO THE SPOT WHERE UNCAS POINTED OUT THE IMPRESSION OF A MOCCASIN IN THE MOIST ALLUVION", "duration_sec": 6.385} +{"id": "1320-122612-0016", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1320-122612-0016.wav", "ref": "RUN BACK UNCAS AND BRING ME THE SIZE OF THE SINGER'S FOOT", "duration_sec": 3.49} +{"id": "1320-122617-0000", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1320-122617-0000.wav", "ref": "NOTWITHSTANDING THE HIGH RESOLUTION OF HAWKEYE HE FULLY COMPREHENDED ALL THE DIFFICULTIES AND DANGER HE WAS ABOUT TO INCUR", "duration_sec": 7.835} +{"id": "1320-122617-0001", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1320-122617-0001.wav", "ref": "IN HIS RETURN TO THE CAMP HIS ACUTE AND PRACTISED INTELLECTS WERE INTENTLY ENGAGED IN DEVISING MEANS TO COUNTERACT A WATCHFULNESS AND SUSPICION ON THE PART OF HIS ENEMIES THAT HE KNEW WERE IN NO DEGREE INFERIOR TO HIS OWN", "duration_sec": 14.055} +{"id": "1320-122617-0002", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1320-122617-0002.wav", "ref": "IN OTHER WORDS WHILE HE HAD IMPLICIT FAITH IN THE ABILITY OF BALAAM'S ASS TO SPEAK HE WAS SOMEWHAT SKEPTICAL ON THE SUBJECT OF A BEAR'S SINGING AND YET HE HAD BEEN ASSURED OF THE LATTER ON THE TESTIMONY OF HIS OWN EXQUISITE ORGANS", "duration_sec": 13.585} +{"id": "1320-122617-0003", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1320-122617-0003.wav", "ref": "THERE WAS SOMETHING IN HIS AIR AND MANNER THAT BETRAYED TO THE SCOUT THE UTTER CONFUSION OF THE STATE OF HIS MIND", "duration_sec": 6.285} +{"id": "1320-122617-0004", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1320-122617-0004.wav", "ref": "THE INGENIOUS HAWKEYE WHO RECALLED THE HASTY MANNER IN WHICH THE OTHER HAD ABANDONED HIS POST AT THE BEDSIDE OF THE SICK WOMAN WAS NOT WITHOUT HIS SUSPICIONS CONCERNING THE SUBJECT OF SO MUCH SOLEMN DELIBERATION", "duration_sec": 12.26} +{"id": "1320-122617-0005", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1320-122617-0005.wav", "ref": "THE BEAR SHOOK HIS SHAGGY SIDES AND THEN A WELL KNOWN VOICE REPLIED", "duration_sec": 4.4} +{"id": "1320-122617-0006", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1320-122617-0006.wav", "ref": "CAN THESE THINGS BE RETURNED DAVID BREATHING MORE FREELY AS THE TRUTH BEGAN TO DAWN UPON HIM", "duration_sec": 5.655} +{"id": "1320-122617-0007", "wav": "/home/orin/Com/Dev/Futurehome/work/data/wav/1320-122617-0007.wav", "ref": "COME COME RETURNED HAWKEYE UNCASING HIS HONEST COUNTENANCE THE BETTER TO ASSURE THE WAVERING CONFIDENCE OF HIS COMPANION YOU MAY SEE A SKIN WHICH IF IT BE NOT AS WHITE AS ONE OF THE GENTLE ONES HAS NO TINGE OF RED TO IT THAT THE WINDS OF THE HEAVEN AND THE SUN HAVE NOT BESTOWED NOW LET US TO BUSINESS", "duration_sec": 18.525} diff --git a/deploy/parakeet-stt/edge-stt/data/manifest.sha256 b/deploy/parakeet-stt/edge-stt/data/manifest.sha256 new file mode 100644 index 0000000..b56e001 --- /dev/null +++ b/deploy/parakeet-stt/edge-stt/data/manifest.sha256 @@ -0,0 +1 @@ +4323d8dbf3f67121390ab3e004882110268c7bac8d75463d9082d76909804085 manifest.jsonl diff --git a/deploy/parakeet-stt/edge-stt/data_de/manifest_de.jsonl b/deploy/parakeet-stt/edge-stt/data_de/manifest_de.jsonl new file mode 100644 index 0000000..622ea55 --- /dev/null +++ b/deploy/parakeet-stt/edge-stt/data_de/manifest_de.jsonl @@ -0,0 +1,30 @@ +{"id": "10347138311808731867", "wav": "de_sample/wav/10347138311808731867.wav", "ref": "es gibt familienstrände die manchmal überlaufen sind mit einer schönen einkaufspromenade entlang der küste das schwimmen ist hier sicher", "duration_sec": 23.28} +{"id": "10504450071805589678", "wav": "de_sample/wav/10504450071805589678.wav", "ref": "während goma einigermaßen sicher ist sollte jeder aufenthalt außerhalb gomas sorgfältig geplant werden um den stand der in der provinz nord-kivu andauernden kämpfe zu erfahren", "duration_sec": 23.04} +{"id": "10555751885736126606", "wav": "de_sample/wav/10555751885736126606.wav", "ref": "löwenrudel agieren ähnlich wie wolfs- oder hunderudel tiere die den löwen aber nicht anderen großkatzen im verhalten überraschend ähneln und ebenso tödlich gegenüber ihrer beute sind", "duration_sec": 11.22} +{"id": "1144628591089987683", "wav": "de_sample/wav/1144628591089987683.wav", "ref": "frau kirchner kündigte ihre absicht als präsidentin zu kandidieren im argentinischen theater an dort begann sie 2005 auch ihre kampagne für den senat als mitglied der delegation der provinz buenos aires", "duration_sec": 18.12} +{"id": "11725654714821576978", "wav": "de_sample/wav/11725654714821576978.wav", "ref": "ziegen wurden anscheinend bereits vor ungefähr 10.000 jahren im zāgros-gebirge im iran domestiziert", "duration_sec": 11.22} +{"id": "1175248235018156351", "wav": "de_sample/wav/1175248235018156351.wav", "ref": "es gibt familienstrände die manchmal überlaufen sind mit einer schönen einkaufspromenade entlang der küste das schwimmen ist hier sicher", "duration_sec": 7.86} +{"id": "12482370299689904904", "wav": "de_sample/wav/12482370299689904904.wav", "ref": "leider fällt das studium von verkehrsflüssen schwer da man fahrerverhalten nicht mit hundertprozentiger sicherheit voraussagen kann", "duration_sec": 10.86} +{"id": "12843660496630565389", "wav": "de_sample/wav/12843660496630565389.wav", "ref": "sein ruhm als epizentrum des luxus begann ungefähr um 400 n chr. und dauerte bis ungefähr 1100 n chr. an", "duration_sec": 7.44} +{"id": "13327484359514762408", "wav": "de_sample/wav/13327484359514762408.wav", "ref": "es gibt keine allgemeingültige definition dafür welche hergestellten gegenstände als antiquitäten gelten manche steuerbehörden definieren über 100 jahre alte waren als antiquitäten", "duration_sec": 14.88} +{"id": "13734019592211926155", "wav": "de_sample/wav/13734019592211926155.wav", "ref": "löwenrudel agieren ähnlich wie wolfs- oder hunderudel tiere die den löwen aber nicht anderen großkatzen im verhalten überraschend ähneln und ebenso tödlich gegenüber ihrer beute sind", "duration_sec": 14.82} +{"id": "14743079206182242094", "wav": "de_sample/wav/14743079206182242094.wav", "ref": "es gibt keine allgemeingültige definition dafür welche hergestellten gegenstände als antiquitäten gelten manche steuerbehörden definieren über 100 jahre alte waren als antiquitäten", "duration_sec": 14.52} +{"id": "14772366518870892058", "wav": "de_sample/wav/14772366518870892058.wav", "ref": "während goma einigermaßen sicher ist sollte jeder aufenthalt außerhalb gomas sorgfältig geplant werden um den stand der in der provinz nord-kivu andauernden kämpfe zu erfahren", "duration_sec": 10.2} +{"id": "14996476656149482093", "wav": "de_sample/wav/14996476656149482093.wav", "ref": "es gibt familienstrände die manchmal überlaufen sind mit einer schönen einkaufspromenade entlang der küste das schwimmen ist hier sicher", "duration_sec": 12.18} +{"id": "16004810575340028273", "wav": "de_sample/wav/16004810575340028273.wav", "ref": "frau kirchner kündigte ihre absicht als präsidentin zu kandidieren im argentinischen theater an dort begann sie 2005 auch ihre kampagne für den senat als mitglied der delegation der provinz buenos aires", "duration_sec": 18.24} +{"id": "16512809721737584620", "wav": "de_sample/wav/16512809721737584620.wav", "ref": "in einigen gebieten genügt es wasser eine minute lang abzukochen in anderen müssen es mehrere minuten sein", "duration_sec": 12.06} +{"id": "17113436913741548046", "wav": "de_sample/wav/17113436913741548046.wav", "ref": "löwenrudel agieren ähnlich wie wolfs- oder hunderudel tiere die den löwen aber nicht anderen großkatzen im verhalten überraschend ähneln und ebenso tödlich gegenüber ihrer beute sind", "duration_sec": 25.86} +{"id": "17340904394278275929", "wav": "de_sample/wav/17340904394278275929.wav", "ref": "zwischen 22:00 und 11:00 uhr mdt wurde von den insassen im hof ein feuer gelegt", "duration_sec": 8.4} +{"id": "18026168807836015428", "wav": "de_sample/wav/18026168807836015428.wav", "ref": "da kometen vor langer zeit mit der erde zusammenprallten versprechen sich die wissenschaftler einblicke wie planeten insbesondere die erde entstehen", "duration_sec": 10.8} +{"id": "18208273162967463359", "wav": "de_sample/wav/18208273162967463359.wav", "ref": "die zwei verbindungen reagieren miteinander und formen kristalle die laut forschern der hochschule die nierentätigkeit behindern können", "duration_sec": 17.7} +{"id": "2561524221067958936", "wav": "de_sample/wav/2561524221067958936.wav", "ref": "leider fällt das studium von verkehrsflüssen schwer da man fahrerverhalten nicht mit hundertprozentiger sicherheit voraussagen kann", "duration_sec": 8.52} +{"id": "3653977734852118277", "wav": "de_sample/wav/3653977734852118277.wav", "ref": "ziegen wurden anscheinend bereits vor ungefähr 10.000 jahren im zāgros-gebirge im iran domestiziert", "duration_sec": 16.14} +{"id": "3812261423674718843", "wav": "de_sample/wav/3812261423674718843.wav", "ref": "sein ruhm als epizentrum des luxus begann ungefähr um 400 n chr. und dauerte bis ungefähr 1100 n chr. an", "duration_sec": 7.44} +{"id": "3886596361103225573", "wav": "de_sample/wav/3886596361103225573.wav", "ref": "zwischen 22:00 und 11:00 uhr mdt wurde von den insassen im hof ein feuer gelegt", "duration_sec": 6.18} +{"id": "4912300559226683422", "wav": "de_sample/wav/4912300559226683422.wav", "ref": "nur mutationen in keimbahnzellen können an kinder weitergegeben werden während mutationen anderswo zum zelltod oder zu krebs führen können", "duration_sec": 19.44} +{"id": "4963712857525084701", "wav": "de_sample/wav/4963712857525084701.wav", "ref": "ziegen wurden anscheinend bereits vor ungefähr 10.000 jahren im zāgros-gebirge im iran domestiziert", "duration_sec": 9.84} +{"id": "5206839124674557105", "wav": "de_sample/wav/5206839124674557105.wav", "ref": "in einigen gebieten genügt es wasser eine minute lang abzukochen in anderen müssen es mehrere minuten sein", "duration_sec": 5.46} +{"id": "6479202151955421212", "wav": "de_sample/wav/6479202151955421212.wav", "ref": "nur mutationen in keimbahnzellen können an kinder weitergegeben werden während mutationen anderswo zum zelltod oder zu krebs führen können", "duration_sec": 14.7} +{"id": "829120786432280030", "wav": "de_sample/wav/829120786432280030.wav", "ref": "die zwei verbindungen reagieren miteinander und formen kristalle die laut forschern der hochschule die nierentätigkeit behindern können", "duration_sec": 7.32} +{"id": "8570942209470725152", "wav": "de_sample/wav/8570942209470725152.wav", "ref": "in einigen gebieten genügt es wasser eine minute lang abzukochen in anderen müssen es mehrere minuten sein", "duration_sec": 6.18} +{"id": "9450525503727057365", "wav": "de_sample/wav/9450525503727057365.wav", "ref": "da kometen vor langer zeit mit der erde zusammenprallten versprechen sich die wissenschaftler einblicke wie planeten insbesondere die erde entstehen", "duration_sec": 12.84} diff --git a/deploy/parakeet-stt/edge-stt/docs/CONTRACT.md b/deploy/parakeet-stt/edge-stt/docs/CONTRACT.md new file mode 100644 index 0000000..73ce1de --- /dev/null +++ b/deploy/parakeet-stt/edge-stt/docs/CONTRACT.md @@ -0,0 +1,104 @@ +# CONTRACT — the frozen grader-facing interface + +> This interface is **frozen at M0**. Schemas do not change after this point; later milestones +> fill in implementations behind it. The README Deployment Guide **ends at `./transcribe`**; +> every step before it is a committed script under `scripts/`. + +## 1. The entrypoint + +A top-level executable shim **`./transcribe`** (thin wrapper, `chmod +x`): + +```sh +#!/usr/bin/env bash +exec "${PYTHON:-python3}" -m src.entrypoint.transcribe "$@" +``` + +### Frozen CLI signature + +``` +./transcribe --mode {A|B|C} --input --out hyps.jsonl \ + [--report report.json] [--limit N] [--device cuda] \ + [--replay {sequential|batched}] [--selfcheck] +``` + +| Flag | Required | Default | Meaning | +|---|---|---|---| +| `--mode` | yes | — | `A` offline-batched (RTF), `B` true-streaming, `C` multilingual/dynamic | +| `--input` | yes | — | a directory of `.wav`/`.flac`, or a `manifest.jsonl` (one obj/line, see §3) | +| `--out` | yes | — | path to write `hyps.jsonl` | +| `--report` | no | unset | when set, also emit a typed `report.json` (RTF/mem/WER) — first-class output, not a log scrape | +| `--limit N` | no | all | process only the first N manifest entries (M4 tag-smoke uses `--limit 5`) | +| `--device` | no | `cuda` | `cuda` or `cpu` | +| `--replay` | no | `sequential` | `sequential` (per-utterance, honest edge number) or `batched` (Mode-A throughput) | +| `--selfcheck` | no | — | run `scripts/preflight.sh` and exit (asserts CUDA/TRT/cuDNN versions — **no clock/MAXN assert**, shared device); M3-6 | + +**Two input modes** (ROADMAP M0-2): a **`manifest.jsonl`** with `ref` fields → emits hyps **and** scores WER; a **bare directory of wav/flac** (no refs) → emits hyps only (no WER). The harness detects which by input type. + +## 2. `hyps.jsonl` — transcripts (one JSON object per line) + +Keyed to the manifest `id` so the WER join is unambiguous. + +```json +{"id":"","text":"","audio_sec":,"infer_sec":} +``` + +| Field | Type | Notes | +|---|---|---| +| `id` | string | matches the manifest `id` | +| `text` | string | raw hypothesis (un-normalized; normalization happens at scoring) | +| `audio_sec` | float | decoded audio duration | +| `infer_sec` | float | model inference wall time for this utterance (decode excluded) | + +## 3. `manifest.jsonl` — the eval set (produced by `scripts/get-data.sh`) + +```json +{"id":"","wav":"","ref":"","duration_sec":} +``` + +(Exactly what `spike/prepare_data.py` already writes.) + +## 4. `report.json` — per-run RTF / memory / WER (identical schema from both producers) + +```json +{"mode":"A","n":300,"total_audio_sec":,"wall_sec":,"rtfx":,"rtf":, + "wer_pct":,"normalizer":"whisper", + "mem":{"idle_total_mb":,"peak_total_mb":,"proc_rss_mb":,"cuda_used_mb":}, + "replay":"sequential","precision":"int8","engine":"...","device":"orin-nano-super-8gb", + "limit":null} +``` + +All `mem.*` fields come from `src/common/memory_accountant.py` (the one accountant). `rtfx = total_audio_sec / wall_sec`; `rtf = 1/rtfx`. + +## 5. Scoring split (ONE model, two producers) + +- **`./transcribe --report`** — runs inference, emits `hyps.jsonl` **and** the per-run `report.json`. Inference-time RTF/mem come from here. +- **`scripts/score.sh`** — a thin wrapper: `python -m src.common.wer_rtf_report --report report.json`. Re-computes/joins **WER** over an existing `hyps.jsonl` **without re-running inference** (this is M4's `score.sh --report report.json`). + +WER may be (re)computed by either path; both emit the **identical** `report.json` schema. + +## 6. Audio decode contract + +Input `.wav`/`.flac` decoded via **libsndfile** (`soundfile`) to **16 kHz mono PCM16**; resample with **soxr** only if `sr != 16000` — matching `scripts/prepare_data.py`. The **harness owns decode**; **RTF is measured over model inference only**, wall-clock reported separately. + +## 7. CLI-only (no HTTP/WS twin) + +Per the committed plan (ROADMAP M0-2), the deliverable is **CLI-only** — there is **no HTTP/WS +service twin**. The grader drives `./transcribe` directly. `transcribe_core()` stays the single +internal function all modes route through, but it is exposed **only** via the CLI. + +## 8. Committed `scripts/` producers (README invokes these in order) + +| Script | Role | Final form | +|---|---|---| +| `scripts/get-data.sh` | materialize LibriSpeech wavs + manifests from scratch | committed | +| `scripts/get-models.sh` | fetch model artifacts (parakeet.cpp GGUF + sherpa-onnx dirs) | committed | +| `scripts/build-parakeet.sh` | build the PRIMARY engine parakeet.cpp (ggml CUDA, sm_87) from source | committed | +| `scripts/build-sherpa.sh` | build the sherpa-onnx GPU binary (Modes B/C + alternative) | committed | +| `pip install -r requirements.lock` | install the locked Python deps (scoring + data-prep) | committed | +| `scripts/preflight.sh` | assert CUDA/cuDNN versions (`--selfcheck` shells this; no clock assert) | committed | +| `scripts/score.sh` | WER-join over an existing `hyps.jsonl` | committed | + +**README rule:** the Deployment Guide ends at `./transcribe --mode ...`; every preceding step is one of the committed scripts above. Final wording delivered in M3-8. + +--- +*Frozen M0-T2. Device-target note: per the shared-device adaptation, the `device` field reports the actual on-device identity and the toolchain is used as-installed (see ASSUMPTIONS.md §Device).* diff --git a/deploy/parakeet-stt/edge-stt/docs/STAGE2-MEMO.md b/deploy/parakeet-stt/edge-stt/docs/STAGE2-MEMO.md new file mode 100644 index 0000000..553621d --- /dev/null +++ b/deploy/parakeet-stt/edge-stt/docs/STAGE2-MEMO.md @@ -0,0 +1,95 @@ +# Stage-2 memo — design reasoning & trade-offs + +Every number here is measured on the **Jetson Orin Nano Super 8 GB** (L4T 36.4.7, **25 W**, sm_87), +LibriSpeech test-clean **300** (Whisper-normalized WER), in isolation (background services stopped for a +clean baseline). The four prompts from the brief, answered in order. + +--- + +## 1. How did you reduce memory footprint without sacrificing accuracy? + +The naive starting point — **Parakeet-TDT-0.6 B INT8 on ONNX Runtime — peaked at 6.6 GB** and OOM-rebooted +the device. Decomposing that peak was the key move, because **almost none of it is the model**: + +| component | ~size | reducible? | +|---|---|---| +| OS / L4T floor | ~1.5 GB | no | +| GPU CUDA context (any CUDA model) | ~1 GB | drop on CPU | +| ORT activation arena (grows over a batch) | ~3 GB | drop with small batch / better engine | +| model weights | ~0.65 GB | use a smaller model | + +So the levers were (a) **smaller model**, (b) **leaner engine**, (c) **bounded batching**. The endpoint — +**parakeet.cpp `tdt_ctc-110m` (q5_k, the tdt default) — runs at +450 MB active-inference with WER 1.808 %** +(vs the 0.6 B's 1.331 %). A ~0.48-point WER cost for a **~14× smaller footprint** and (below) **8× the speed**. +"Without sacrificing accuracy" is literal here: 1.81 % is far inside the 3 % budget, so the footprint win is free of +any *gate*-relevant accuracy loss. (≤ 1 GB *total* is infeasible — the OS floor alone is ~1.5 GB — so we +report total + floor + the +450 MB increment, and lead with that honesty.) + +## 2. Why did you select your inference engine over alternatives? + +We measured three engines on the same model class + hardware + INT8: + +| engine | RTF (LibriSpeech-300) | note | +|---|---|---| +| ONNX Runtime CUDA EP (sherpa-onnx), 0.6 B | **7.4×** | compute-bound; batching gave *no* gain (4.2→4.8× at batch-16) | +| ONNX Runtime CUDA EP, small Zipformer | **25×** | encoder-light, but ORT caps it | +| **parakeet.cpp (ggml CUDA), 110 M** | **61× (tdt) / 107× (ctc)** | **chosen** | + +**parakeet.cpp's ggml CUDA backend is ~4–14× faster than ONNX Runtime on identical hardware.** That is the +decisive fact: the engine, not just the model, was leaving most of the GPU on the table. ggml (the runtime +behind the fast on-device LLMs) reaches **near-TensorRT throughput** here. We chose it over: +- **TensorRT** — it *could* be faster still, but it requires a bespoke, device-keyed, non-portable engine + + a hand-written batched decode (the #1 Stage-1 blind-replication hazard) and more memory (batching). parakeet.cpp + gets ~107× on a **reproducible from-source build** (`scripts/build-parakeet.sh`, pinned v0.1.1 / sm_87) — the + *only* concern that originally disqualified parakeet.cpp was its **prebuilt** binaries, which a clean native + build removes. +- **sherpa-onnx / ORT** — kept as the **reproducible fallback** (`STT_ENGINE=sherpa`) and as the **streaming + (Mode B)** and **multilingual (Mode C)** engines, where its model zoo is the pragmatic choice. + +## 3. What trade-offs did you navigate around quantization, precision loss, or model size? + +- **Quantization (measured on-GPU, not assumed):** we ran a full **dtype sweep** of the 110 M model on + the Orin GPU — q4_k / q5_k / q8_0 / f16 × both decoders, full LibriSpeech-300 (`results/dtype/`). The + decisive result: **RTFx is dtype-invariant** (ctc ~107×, tdt ~61× for *every* dtype — q4_k @ 126 MB is no + faster than f16 @ 256 MB). At batch=1 the engine is **kernel-launch/latency-bound, not bandwidth-bound**, + so **quantization is a memory lever, not a speed one**. That handed us a free win: the accuracy (tdt) path + drops **q8_0 → q5_k** (1.808 % WER @ 137 MB — *matches* q8_0's 1.836 % at 23 % smaller, identical speed); + the speed (ctc) path keeps q8_0. **q4_k** (126 MB, 2.018 %/2.467 %, still < 3 %) is the next rung down + (answer 4). Upstream only benched dtypes on a host *CPU*; this is the on-device GPU truth. +- **Model size:** the **110 M vs 0.6 B** decision is the crux. 0.6 B = 1.33 % WER but 7.4×/6.6 GB; 110 M = + 1.81 % WER but **61–107×/+450 MB**. Since both clear 3 %, the assessment's *memory + RTF* emphasis makes the + small model strictly better. We keep the 0.6 B documented as an accuracy *showcase*, not the deployable STT. +- **Decoder (a parakeet-specific lever):** the `tdt_ctc-110m` model exposes two decode heads — **tdt** + (q5_k, **1.808 % @ 61×**) vs **ctc** (q8_0, **2.383 % @ 107×**). A clean ~0.57-point WER ⇄ ~1.75× RTF dial, + both < 3 %. The gap is *structural*: **ctc** is one parallel matmul over all frames (no token context) → + fast; **tdt** is an autoregressive transducer (the per-(t,u) joint graph is rebuilt every step — "the bulk + of the cost" in the source) whose prediction net conditions each token on prior tokens (an implicit LM) → + more accurate but sequential/latency-bound. tdt is the accuracy default; ctc is the speed default. +- **The 250× RTF gate is an honest miss** (best 107×). It is a datacenter-batched figure; on a 25 W Orin the + A100→Orin gap is ~18–20× before the no-large-batch and power caveats. We report best-achieved + the gap, and + never present a batched number as streaming. Closing the rest needs TensorRT **and** large GPU batches — + which directly oppose the memory budget. **That opposition is the core tension the brief is built on**, and + we resolve it toward memory + reproducibility, not a number that still misses. + +## 4. How would the architecture adapt if memory constraints tightened further post-deployment? + +A ladder of measured/known levers, cheapest first: +1. **Switch decoder tdt → ctc** — already supported; trims decode-side memory + ~1.8× faster, +0.55 WER. +2. **Lower quant → q4_k** — the tdt path *already* defaults to q5_k (137 MB). The next rung, **q4_k** + (126 MB), is **measured** (`results/dtype/`): 2.018 % (tdt) / 2.467 % (ctc), both still < 3 %. (Quant + buys memory, not speed here — RTFx is dtype-invariant on this GPU.) +3. **Smaller / CPU path** — the sherpa-onnx Zipformer fallback runs at **204 MB resident on CPU** (no CUDA + context at all), 1.6 % WER, 21.6× — when GPU memory must go to another tenant. +4. **One-resident model manager** — `src/modes/c_multilingual/residency.py` (registry + LID router + TTL/LRU, + evict-before-load) guarantees only one heavy model is resident at a time; the multilingual mode already + proves the invariant. The same manager bounds memory if more languages/models are added. +5. **Streaming (Mode B)** processes audio in chunks with bounded state — fixed memory regardless of utterance + length, for the always-on path. + +The design is engine- and model-pluggable (`STT_ENGINE`, `PK_MODEL`, `PK_DECODER`, `MODE_A_MODEL_DIR`), so each +rung above is a config change, not a rebuild — which is the production-minded posture the brief asks for. + +--- + +*Pointers: headline eval `results/parakeet/RESULTS.md`; engine/RTF/memory study `results/feasibility.md`; +machine-readable gates `results/decisions.json`; the three-tension framing `docs/TRADE-OFFS.md`.* diff --git a/deploy/parakeet-stt/edge-stt/docs/TRADE-OFFS.md b/deploy/parakeet-stt/edge-stt/docs/TRADE-OFFS.md new file mode 100644 index 0000000..6749a35 --- /dev/null +++ b/deploy/parakeet-stt/edge-stt/docs/TRADE-OFFS.md @@ -0,0 +1,66 @@ +# TRADE-OFFS — the three tensions, and why Mode A ships on parakeet.cpp (not TensorRT) + +The brief asks for one engine that meets **five** constraints at once: WER ≤3% · RTF ≤0.004 (250×) · ≤1 GB *total* RAM · multilingual + dynamic model load · true streaming. **No single configuration meets all five** — they are in direct tension. This repo ships a **3-mode architecture behind one entrypoint** (`./transcribe --mode A|B|C`) and wins on **honest, measured trade-offs** rather than a single number that can't exist. + +This document maps the three structural tensions to the Stage-2 architecture questions, and records the one consequential engineering decision that follows from them: **Mode A runs on `parakeet.cpp` (ggml CUDA), not a bespoke TensorRT engine** — with `sherpa-onnx` kept as the reproducible alternative and the Mode B/C engines. + +--- + +## The three tensions + +### Tension 1 — RTF (250×) vs. everything else +250× real-time is a **batched, offline, datacenter-class** number. It pulls toward aggressive batching + INT8 + a hand-tuned decode loop. Three forces pull the other way: +- **Streaming (Mode B) is batch=1 by definition** — it can never be batched, so its RTF lives in a separate table. +- **The device is a shared Orin Nano at 25 W** (no MAXN, no clock lock) — ~18–20× slower than the A100 the 250× figure implies. +- **Accuracy and memory** want the full-size model resident, not a shrunk one. + +**Verdict:** 250× is **not reachable on this device in any honest configuration.** parakeet.cpp's ggml CUDA backend reaches **107× (ctc) / 61× (tdt)** — the project best, and near the low end of what a bespoke TRT engine was ever expected to reach — but still short of 250×. We report best-achieved RTFx + the A100→Orin gap analysis + the 25 W / shared caveat, and never present a batched offline number as a streaming one. (The dtype/thread sweeps showed the engine is launch-bound at batch=1, so the remaining gap is a *batching* gap — see `../results/dtype/RESULTS.md`.) + +### Tension 2 — ≤1 GB *total* RAM vs. a ~1.1–1.4 GB floor +"Must accommodate OS overhead" reads literally as **total system RAM**. But the measured floor — OS + CUDA context + one loaded model — is already **~1.1–1.4 GB before the first frame of audio**, and on a *shared* box (other tenants resident) the as-observed floor is higher still. + +**Verdict:** ≤1 GB *total* is **infeasible as worded.** We report **total + measured floor + incremental RSS**, lead with that honesty, and pick the lowest-footprint *accurate* engine — **parakeet.cpp `tdt_ctc-110m` (q5_k, +450 MB active-inference)**. Mode C keeps exactly **one** heavy model resident via TTL/LRU so resident RAM never sums two models. + +### Tension 3 — true streaming vs. WER ≤3% +A cache-aware streaming Zipformer at **low look-ahead** trades accuracy for latency: test-clean WER drifts to **3.6–3.9%**, which **breaches 3%**. Raising look-ahead recovers WER but raises latency. + +**Verdict:** we pick the look-ahead that best holds ≤3%, **disclose the breach per latency config** (with a bootstrap CI), and report streaming RTF separately. We do not hide a low-latency number behind an offline one. + +--- + +## The decision that falls out of Tension 1 — defer TensorRT, ship parakeet.cpp for Mode A + +The original plan built Mode A as a **TensorRT 10.3 INT8 engine with a bespoke host-side eager-batched label-looping TDT decode** — the encoder (and optionally the per-step joiner) through TRT, the token loop + TDT duration-skip hand-written in host code. It was scoped as the **single highest-risk, multi-day (~3–4 day) task** in the build, with no drop-in runtime. + +**We evaluated it and deferred it.** Mode A now runs on **`parakeet.cpp`** (ggml CUDA backend, `tdt_ctc-110m`, built from source) — which reaches **107× RTF without any bespoke engine**. `sherpa-onnx-offline` remains the **reproducible alternative** (`STT_ENGINE=sherpa`) and the spine for Modes B and C. + +### Why defer TRT — three reasons, in order of weight + +1. **The RTF gate is unreachable either way (Tension 1).** TRT eager-batched was only ever expected to reach **~100–180×** vs the **250×** target — a documented miss. **parakeet.cpp's ggml CUDA backend already reaches ~107× on a reproducible from-source build** — at the low end of that TRT range, *without* the bespoke engine. A hand-tuned TRT decode would buy a *marginally smaller miss of an already-missed gate* at the cost of the riskiest task in the plan. That is a bad trade. + +2. **The TRT path is the #1 Stage-1 blind-replication hazard.** The grader clones the repo onto *their* Orin and reproduces from the README alone. A TRT engine is **non-portable** — keyed to device-UUID + TRT version + model hash, rebuilt on-device from a shipped calibration cache — and the bespoke batched-TDT decode is brittle across TRT minor versions. parakeet.cpp instead builds from **pinned source** (v0.1.1, sm_87) and sherpa-onnx covers B/C — portable model dirs, documented aarch64 CUDA builds, stable CLIs, permissive licenses. The most reproducible story available. + +3. **Accuracy — the gate that actually passes — is unaffected.** parakeet.cpp `tdt_ctc-110m` stays at **1.81–2.38% WER** (≤3% met) on either decoder. We give up nothing on the one headline gate we can win. + +### What we give up, stated honestly +- A possibly **higher offline RTFx**. A bespoke TRT engine *might* reach ~180×; parakeet.cpp measures 107×. Both miss 250×, and the gap between them is now small — we report the real, reproducible number with its caveats. +- The chance to demonstrate a **hand-tuned TRT decode**. We keep that as a **Stage-2 discussion artifact**: we can speak to exactly how the eager-batched label-looping decode would work, why it reaches ~100–180×, and why the A100→Orin gap is ~18–20× — without shipping a fragile artifact the grader can't reproduce. + +### Net effect on the build +- Removes the highest-risk long-pole (bespoke batched-TDT decode), the on-device TRT engine build, the custom GPU log-mel front-end, the custom batcher, the FP16-TRT dry-run, and the batched-vs-single **WER-parity** gate. +- Mode A is a clean `parakeet.cpp bench` driver (model-load excluded from RTF); Modes B/C are sherpa-onnx wrappers. The only Mode-A-specific check left is a sequential-vs-batched RTF comparison (throughput only — no accuracy divergence to defend). + +--- + +## Tensions → Stage-2 questions + +| Stage-2 question (architecture interview) | Which tension | Our answer | +|---|---|---| +| **How do you approach the RTF target?** | Tension 1 | 250× is a datacenter-batched number; on a 25 W shared Orin it is unreachable. parakeet.cpp's ggml CUDA backend reaches **107× (ctc)** — the project best, near the low end of TRT's expected ~100–180× — reported with the ~18–20× A100→Orin gap + the power/contention caveat. The remaining gap is a *batching* gap (the engine is launch-bound at batch=1). TRT eager-batched was evaluated and deferred — still a miss, at the cost of the riskiest, least-reproducible task. | +| **How do you fit the memory budget?** | Tension 2 | ≤1 GB *total* is infeasible as worded (a ~1.1–1.4 GB floor before weights). We report total + floor + incremental RSS, pick the lowest-footprint accurate engine (**parakeet.cpp 110 M q5_k, +450 MB**), and keep exactly one heavy model resident in Mode C (TTL/LRU). | +| **How do you do streaming and multilingual together?** | Tension 3 | Separate modes behind one entrypoint: Mode B = cache-aware streaming Zipformer (batch=1, look-ahead chosen to hold ≤3%, breach disclosed per config); Mode C = LID router (Whisper-tiny) → one resident recognizer (Parakeet-v3, 25 lang) under a programmatic single-resident cap. | +| **How do you make it reproducible?** | the decision above | parakeet.cpp from **pinned source** for Mode A + sherpa-onnx for B/C; portable model dirs; **locked deps** (`requirements.lock`); idempotent preflight hard-asserting the CUDA runtime (CUDA 12.6 / cuDNN 9.3) and recording TensorRT warn-only; no non-portable engines committed or built; a clean-clone reproduction rehearsal. Deferring TRT is the largest single reduction in replication risk. | + +--- + +*Numbers cited here are stamped with the `L4T 36.4.7 / 25 W / shared` device caveat. The authoritative measured values live in [`../results/decisions.json`](../results/decisions.json), [`../results/feasibility.md`](../results/feasibility.md), [`../results/parakeet/RESULTS.md`](../results/parakeet/RESULTS.md), and [`../results/dtype/RESULTS.md`](../results/dtype/RESULTS.md). See [`../ASSUMPTIONS.md`](../ASSUMPTIONS.md) §ENG for the engine decision.* diff --git a/deploy/parakeet-stt/edge-stt/requirements.in b/deploy/parakeet-stt/edge-stt/requirements.in new file mode 100644 index 0000000..6767ad0 --- /dev/null +++ b/deploy/parakeet-stt/edge-stt/requirements.in @@ -0,0 +1,16 @@ +# Edge-STT — top-level runtime deps (the SINGLE authoritative source; M3-6 extends, never replaces). +# Pinned versions + the offline wheelhouse are produced on the Jetson (M0-T6); this file is the +# human-edited input. Host-side authoring needs only the audio + scoring deps. + +# audio decode / resample (libsndfile + soxr) — matches spike/prepare_data.py decode contract +soundfile +soxr +numpy + +# scoring +jiwer +whisper-normalizer + +# on-device GPU inference spine (installed on the Jetson, not the x86 host) +# onnxruntime-gpu # aarch64+CUDA12 wheel, pinned & vendored on-device in M0-T6 +# sherpa-onnx # python binding optional; primary use is the built C++ binary diff --git a/deploy/parakeet-stt/edge-stt/requirements.lock b/deploy/parakeet-stt/edge-stt/requirements.lock new file mode 100644 index 0000000..b14ee8b --- /dev/null +++ b/deploy/parakeet-stt/edge-stt/requirements.lock @@ -0,0 +1,28 @@ +# requirements.lock — pinned runtime deps for the Jetson Orin Nano Super 8 GB +# (aarch64 / CPython 3.10 / L4T 36.4.7 / CUDA 12.6). This is the LOCKED dependency file the +# README's Deployment Guide installs; requirements.in is the human-edited source. +# +# Provenance: versions are the on-device known-good set (the scoring + numpy stack is exactly what +# is validated on the Jetson; soundfile/soxr are the data-materialization deps used by +# scripts/prepare_data.py, pinned to the latest numpy-1.26-compatible aarch64 wheels). +# +# pip install --break-system-packages -r requirements.lock +# +# NOTE: the GPU inference engines are NOT pip deps — parakeet.cpp and sherpa-onnx are built from +# source on-device (scripts/build-parakeet.sh, scripts/build-sherpa.sh); see the README. + +# --- scoring --- +jiwer==4.0.0 +rapidfuzz==3.14.5 # jiwer dependency (alignment) +click==8.4.1 # jiwer dependency (CLI) +whisper-normalizer==0.1.12 +regex==2026.5.9 # whisper-normalizer dependency (English text normalizer) + +# --- numerics --- +numpy==1.26.4 + +# --- audio decode / resample (data materialization only: scripts/prepare_data.py) --- +soundfile==0.13.1 +cffi==2.0.0 # soundfile dependency (libsndfile ctypes binding) +pycparser==3.0 # cffi dependency +soxr==0.5.0.post1 diff --git a/deploy/parakeet-stt/edge-stt/results/decisions.json b/deploy/parakeet-stt/edge-stt/results/decisions.json new file mode 100644 index 0000000..19a6f64 --- /dev/null +++ b/deploy/parakeet-stt/edge-stt/results/decisions.json @@ -0,0 +1,156 @@ +{ + "milestone": "M1", + "date": "2026-06-10", + "primary_engine": { + "name": "parakeet.cpp (ggml CUDA backend), tdt_ctc-110m GGUF, built from source (build-parakeet.sh). Per-decoder dtype default (results/dtype/): tdt->q5_k (137MB), ctc->q8_0 (177MB); PK_MODEL overrides.", + "why": "Fastest + smallest + accurate, measured on LibriSpeech-300: WER 1.808% @ 61x (tdt, q5_k) / 2.383% @ 107x (ctc, q8_0), +450MB, ~126ms/call. The ggml CUDA backend is ~4-14x ONNX Runtime on the same 25W Orin (sherpa-onnx capped at 25x; the 0.6b on ORT was compute-bound at 7.4x). Near-TensorRT throughput WITHOUT a bespoke TRT engine, on a reproducible from-source build.", + "results": "results/parakeet/RESULTS.md", + "entrypoint": "./transcribe --mode A (default); PK_DECODER=tdt|ctc (picks the q5_k|q8_0 default); STT_ENGINE=sherpa for the alternative", + "vs_targets": "WER 1.81-2.38% PASS (<=3%); RTF 61-107x (best 107x) MISS 250x but project-best; mem +450MB (<=1GB total infeasible: OS floor ~1.5GB)" + }, + "dtype_sweep": { + "name": "On-GPU GGUF dtype sweep for tdt_ctc-110m (results/dtype/RESULTS.md)", + "method": "Each dtype x decoder run through the official harness on full LibriSpeech-300, 25W, clean box (GeniePod stopped). True f32-derived GGUFs from HF mudler/parakeet-cpp-gguf. Upstream only benched dtypes on a 20-core host CPU; this is the on-device GPU truth.", + "table": { + "ctc": {"q4_k": {"wer_pct": 2.467, "rtfx": 107.1, "peak_mb": 2232, "size_mb": 126}, "q5_k": {"wer_pct": 2.411, "rtfx": 106.1, "peak_mb": 2245, "size_mb": 137}, "q8_0": {"wer_pct": 2.383, "rtfx": 107.3, "peak_mb": 2279, "size_mb": 177}, "f16": {"wer_pct": 2.369, "rtfx": 107.2, "peak_mb": 2418, "size_mb": 256}}, + "tdt": {"q4_k": {"wer_pct": 2.018, "rtfx": 61.9, "peak_mb": 2256, "size_mb": 126}, "q5_k": {"wer_pct": 1.808, "rtfx": 61.4, "peak_mb": 2279, "size_mb": 137}, "q8_0": {"wer_pct": 1.836, "rtfx": 61.7, "peak_mb": 2319, "size_mb": 177}, "f16": {"wer_pct": 1.808, "rtfx": 60.9, "peak_mb": 2448, "size_mb": 256}} + }, + "finding_1_speed": "RTFx is DTYPE-INVARIANT (ctc ~107x, tdt ~61x across all dtypes; q4_k 126MB no faster than f16 256MB). With the thread sweep also flat, the engine is kernel-launch/small-matmul-latency bound at batch=1 -> quant is a MEMORY lever, not a speed lever. Batching is the ONLY remaining RTFx lever (the 250x gap).", + "finding_2_q5k": "q5_k/tdt = 1.808% @ 61x @ 137MB matches q8_0 accuracy (1.836%) at 23% smaller and identical speed -> tdt default moved q8_0->q5_k for free. ctc keeps q8_0. q4_k (126MB, 2.018/2.467%) is the if-memory-tightens fallback, still <3%.", + "audit_note": "parakeet.cpp source audit (memory: parakeet-cpp-perf-audit): engine already optimized (fused encoder graph, persistent gallocr, GPU mel). ctc 107x vs tdt 61x is structural: ctc = one parallel matmul (no token context); tdt = autoregressive transducer (per-(t,u) joint graph rebuilt per step = the bulk of the cost) -> more accurate (implicit LM) but sequential/latency-bound." + }, + "engine_decision": "PRIMARY = parakeet.cpp (ggml CUDA) for offline Mode A. Modes B/C + the reproducible alternative stay sherpa-onnx (TensorRT deferred — see docs/TRADE-OFFS.md + docs/STAGE2-MEMO.md). parakeet.cpp pivot 2026-06-10 after it measured 107x vs sherpa-onnx 25x.", + "device_caveats": { + "l4t": "36.4.7", + "jetpack": "6.2.x", + "cuda": "12.6", + "tensorrt": "10.3.0.30", + "cudnn": "9.3.0.75", + "power_mode": "25W", + "shared_device": true, + "geniepod_resident": "normally yes (LLM + whisper + parakeet STT, ~2-3GB); PAUSED for the clean M1 GPU run with user authorization, then restarted" + }, + "engine_lock": { + "mode_A": { + "engine": "parakeet.cpp (ggml CUDA backend) — PRIMARY (2026-06-10 pivot)", + "model": "tdt_ctc-110m GGUF; per-decoder default tdt=q5_k (137MB) / ctc=q8_0 (177MB) (results/dtype/); PK_MODEL overrides", + "provider": "cuda (ggml CUDA, sm_87), built from source (scripts/build-parakeet.sh)", + "decode": "parakeet.cpp builtin tdt (autoregressive, accurate) or ctc (one-shot, fast) greedy", + "measured": "tdt 1.808% @ 61x / ctc 2.383% @ 107x, +450MB", + "alternative": "sherpa-onnx-offline INT8 (STT_ENGINE=sherpa): nemo-parakeet-tdt-0.6b-v2 (1.331% accuracy showcase, 7.4x, peaks 6.6GB) or the deployable zipformer zip70 (1.598%/24x/204MB CPU). TRT eager-batched deferred.", + "status": "MEASURED" + }, + "mode_B": { + "engine": "sherpa-onnx-online (streaming zipformer int8, chunk-16-left-128)", + "provider": "cpu (GPU is ~3x SLOWER for tiny streaming chunks — per-chunk kernel-launch overhead dominates)", + "status": "MEASURED" + }, + "mode_C": { + "engine": "sherpa-onnx-offline whisper-tiny (LID + multilingual recognizer)", + "production_recognizer": "Parakeet-TDT-0.6b-v3 (25-lang) int8 — STAGED + MEASURED (German 7.41%, English 1.71%). Staged via VM parallel-HF (throttle workaround) + local hop; needs a GeniePod GPU pause.", + "residency": "TTL/LRU one-resident manager built + validated (src/modes/c_multilingual/residency.py): registry + Whisper-tiny LID router + evict-before-load single-resident invariant.", + "status": "MEASURED (whisper-tiny LID + v3 accurate multilingual; residency invariant validated)" + } + }, + "gate_c_wer": { + "name": "INT8 WER baseline on the pinned 300", + "wer_pct": 1.331, + "threshold_pct": 3.0, + "pass": true, + "normalizer": "whisper", + "n": 300, + "n_scored": 300, + "n_oom_skipped": 0, + "precision": "int8", + "note": "Whisper-normalized WER over all 300 LibriSpeech test-clean (first-300-by-id). Beats the ~1.69% leaderboard prior on this subset; comfortably under the 3% gate. Every clip transcribed (oom=0)." + }, + "gate_b_rtf": { + "name": "naive on-device RTFx", + "rtfx": 7.406, + "rtf": 0.135026, + "target_rtfx": 250, + "pass": false, + "gap_x": 33.8, + "replay": "sequential", + "total_audio_sec": 2641.085, + "infer_sec": 356.616, + "note": "Model-load-EXCLUDED inference RTFx (sum of sherpa 'Elapsed seconds' per chunk). Naive: no batching, batch=1, sequential, sherpa-onnx-offline CUDA EP, 25W shared box. Misses 250x by ~34x. Honest gap = A100->Orin ~18-20x + no-batching + 25W power; TensorRT eager-batched (deferred) was only ever ~100-180x (still a miss). RTF reported best-achieved + gap analysis, never as streaming." + }, + "gate_a_memory": { + "name": "total-RAM feasibility (as-observed)", + "threshold_total_mb": 1024, + "pass": false, + "idle_total_mb_genie_paused": 1650, + "peak_total_mb": 6597, + "incremental_mb": 4947, + "cuda_used_mb": 6714, + "proc_rss_mb": 96.8, + "finding": "Parakeet-TDT-0.6b int8 on GPU peaks at ~6.6GB total (ORT CUDA BFC arena grows greedily for long clips). ≤1GB-total is WILDLY infeasible. On the AS-OBSERVED shared box with GeniePod resident (~2-3GB), the model's ~6.6GB peak exceeds 8GB -> it OOM-REBOOTED the device once, then OOM-SIGKILLed. The clean number (6.6GB peak / ~4.9GB incremental over a 1.65GB genie-paused floor) was obtained only after pausing GeniePod. Headline: report total + floor + incremental; the model does not coexist with the other 8GB-box workload.", + "footprint_decomposition": "The 6.6GB = 0.6B weights (~650MB) + GPU CUDA context (~1GB, fixed for any CUDA model) + ORT CUDA arena grown over the 300-clip batch (~3GB). 0.6B at chunk=1 (min arena) = ~1.76GB; tiny Zipformer on GPU = ~1GB (all CUDA context). Most of the 6.6GB is reducible runtime, not model.", + "deployable_footprint_per_command_cpu": { + "note": "Per-process peak RSS (/proc VmHWM), ONE ~3s clip, resident model, CPU — the realistic LyraT voice-command footprint (vs a 300-clip LibriSpeech sweep).", + "zipformer_small_en_27mb": {"rss_mb": 115, "wer_pct": 2.036, "rtfx": 28}, + "zipformer_en_68mb": {"rss_mb": 204, "wer_pct": 1.867, "rtfx": 23}, + "parakeet_0.6b_631mb": {"rss_mb": 1247, "wer_pct": 1.331, "rtfx": 5}, + "verdict": "A small Zipformer hits ~115-204 MB/command at <3% WER and 20-30x realtime on CPU — UNDER the 300-400MB target, fits alongside the LLM, faster than 0.6B-on-GPU. Runtime memory scales with clip-length x clips-per-invocation, not model size (91-short-clip batch balloons to ~3GB for EVERY model; a single command does not).", + "recommendation": "Deployable on-device STT = zip70 (68MB -> 204MB/command, 1.867%, 23x) or zip28 (115MB, 2.036%). Keep 0.6B as the offline accuracy showcase (1.331%), not the voice STT." + }, + "recommended_deployable_config": { + "model": "sherpa-onnx-zipformer-en-2023-06-26 (68MB int8 transducer)", + "provider": "cpu (4 threads)", + "full_300_wer_pct": 1.598, + "full_300_rtfx": 21.6, + "resident_mb_per_command": 204, + "vs_0.6b_showcase": "0.6B GPU = 1.331% / 7.4x / 1247MB; zip70 CPU is 2.9x faster + ~6x smaller at <3% WER", + "rtf_ceiling_note": "~21-25x is the ORT-path ceiling for an accurate small model; 250x needs TensorRT (engine, deferred) + large GPU batches (memory) — opposing the memory budget. Decision (user-confirmed): stay sherpa-onnx, report the honest gap, do NOT pursue TensorRT.", + "if_memory_tightens": "drop to zip28 (27MB -> 115MB/command, 2.036%) — still <3%" + } + }, + "gate_b_streaming": { + "name": "Mode B — true streaming WER + look-ahead", + "wer_pct": 1.976, + "wer_pct_n100": 2.249, + "threshold_pct": 3.0, + "breaches_3pct": false, + "n": 300, + "normalizer": "whisper", + "lookahead": "chunk-16-left-128", + "engine": "sherpa-onnx-online streaming Zipformer INT8", + "provider": "cpu", + "rtf_isolated_cpu": 0.6, + "rtf_gpu": "1.5-2.7 (overhead-bound; GPU NOT used for streaming)", + "rtf_contended_cpu": 3.34, + "peak_total_mb": 4598, + "note": "Cache-aware streaming Zipformer at chunk-16-left-128 holds 2.249% on the first-100 subset (no >3% breach at this look-ahead; full test-clean low-latency configs may approach the disclosed 3.3-3.9%). RTF is CPU (GPU is ~3x slower for tiny streaming chunks). Streaming RTF is HIGHLY contention-sensitive on the shared box: ~0.6 isolated (1.6x faster than realtime) vs ~3.3 under full GeniePod CPU load — reported separately from offline RTF, never conflated." + }, + "gate_c_multilingual": { + "name": "Mode C — multilingual + dynamic (LID + non-English WER)", + "lid_accuracy_pct": 96.7, + "lid_detail": "29/30 German clips detected 'de' (1 empty) via whisper-tiny auto-LID", + "non_english_lang": "de (German)", + "non_english_eval": "FLEURS de_de, first-30, BasicTextNormalizer", + "non_english_wer_pct_v3": 7.41, + "non_english_wer_pct_whisper_tiny": 54.2, + "v3_english_wer_pct": 1.71, + "v3_english_eval": "LibriSpeech test-clean 300, Whisper-norm (vs v2's 1.331% English-specialist; v3 is the 25-lang multilingual)", + "recognizers": "whisper-tiny (LID) + Parakeet-TDT-0.6b-v3 int8 (accurate 25-lang) — BOTH measured on-device", + "v3_peak_mb": 6552, + "v3_note": "v3 needed a GeniePod GPU pause (same ~6.6 GB peak as v2). Staged via VM parallel-HF download (HF per-connection throttle workaround) + local hop.", + "note": "Multilingual architecture proven on-device AND accurate: whisper-tiny auto-LID routes 97% correct; Parakeet-v3 transcribes German at 7.41% WER (vs whisper-tiny's 54.2% — a 7x improvement) and English at 1.71%. The Whisper-tiny LID -> Parakeet-v3 router + TTL/LRU one-resident manager (src/modes/c_multilingual/residency.py, invariant validated) is the production path." + }, + "gate_f_modes_split": { + "name": "3 documented modes behind one entrypoint", + "modes": ["A", "B", "C"], + "mode_A_real": true, + "mode_B_real": true, + "mode_C_real": true, + "entrypoint": "./transcribe --mode A|B|C", + "pass": "ALL THREE modes real + measured behind one entrypoint (A offline, B streaming, C multilingual+LID). Mode C's accurate v3 recognizer is the only carry-over (HF-throttled)." + }, + "deploy_mode": "bare-metal", + "harness": { + "runner": "src/modes/a_offline/runner.py (chunked, sort-short-first, split-to-single OOM fallback)", + "reporter": "src/common/wer_rtf_report.py (whisper normalizer + jiwer)", + "manifest": "data/manifest.jsonl (300, sha256-pinned, portable wav paths)" + } +} diff --git a/deploy/parakeet-stt/edge-stt/results/dtype/RESULTS.md b/deploy/parakeet-stt/edge-stt/results/dtype/RESULTS.md new file mode 100644 index 0000000..8e8619b --- /dev/null +++ b/deploy/parakeet-stt/edge-stt/results/dtype/RESULTS.md @@ -0,0 +1,47 @@ +# GPU dtype sweep — tdt_ctc-110m on the Jetson Orin Nano Super 8 GB + +**Question:** does the GGUF quantization dtype change speed/accuracy/memory on the *GPU*? Upstream +parakeet.cpp only benched dtypes on a 20-core host **CPU** (BENCHMARK.md), where f16 was fastest and +the K-quants were *slower*. The Orin GPU has a different compute/bandwidth profile, so this is the +on-device truth. + +**Method.** Every config run through the official harness (`PK_MODEL= PK_DECODER=tdt|ctc +./transcribe --mode A`) → WER (Whisper-normalized) + RTFx (model-load-excluded) + peak memory +(`MemorySampler`), full LibriSpeech test-clean **300**, 25 W, **clean box** (GeniePod stopped), sm_87. +GGUFs are the true f32-derived variants from HF `mudler/parakeet-cpp-gguf`. Per-config reports: +`results/dtype/_.json`. + +| dtype | GGUF size | decoder | WER % | RTFx | peak total MB | +|---|---|---|---|---|---| +| q4_k | 126 MB | ctc | 2.467 | 107.1 | 2232 | +| q5_k | 137 MB | ctc | 2.411 | 106.1 | 2245 | +| **q8_0** | 177 MB | ctc | **2.383** | **107.3** | 2279 | +| f16 | 256 MB | ctc | 2.369 | 107.2 | 2418 | +| q4_k | 126 MB | tdt | 2.018 | 61.9 | 2256 | +| **q5_k** | 137 MB | tdt | **1.808** | **61.4** | 2279 | +| q8_0 | 177 MB | tdt | 1.836 | 61.7 | 2319 | +| f16 | 256 MB | tdt | 1.808 | 60.9 | 2448 | + +## Finding 1 — speed is **dtype-invariant** (quant is a memory lever, not a speed lever) + +ctc sits at **~107×** and tdt at **~61×** across *every* dtype: q4_k (126 MB) is no faster than f16 +(256 MB). Combined with the earlier thread sweep (also flat — `results`/the audit), this is a firm +diagnosis: at **batch=1 the engine is kernel-launch / small-matmul-latency bound**, not weight- +bandwidth or CPU bound. Shrinking weights frees **memory** (q4_k peak 2232 MB vs f16 2418 MB, a +~190 MB spread tracking the weight size) but never speeds anything up. **The only remaining lever for +higher RTFx is batching** — exactly the datacenter-throughput gap behind the 250× target. + +## Finding 2 — q5_k is a free win for the accuracy (tdt) path + +q5_k/tdt = **1.808 % WER @ 61× @ 137 MB** — it *matches* q8_0's accuracy (1.836 %, the delta is +within noise and nominally better), at **23 % smaller** and **identical speed**. f16 ties the WER but +is 256 MB. So the tdt default moves **q8_0 → q5_k** at zero speed/accuracy cost. The ctc (speed) path +keeps **q8_0** (f16 is 0.014 pt better but +86 MB; q4_k is smallest but slightly worse). If memory +tightens, **q4_k** (126 MB, +580 MB over idle) holds 2.018 %/2.467 % — still under the 3 % gate. + +## Decision (folded into the submission) + +- **tdt → `tdt_ctc-110m-q5_k.gguf`** (new default), **ctc → `tdt_ctc-110m-q8_0.gguf`** — per-decoder + default in `src/modes/a_offline/parakeet_runner.py` (`_DECODER_GGUF`); override with `PK_MODEL`. +- `scripts/get-models.sh` fetches q8_0 + q5_k + q4_k. +- Memory ladder for "if constraints tighten" (Stage-2 Q4) gains a measured rung: **q5_k → q4_k**. diff --git a/deploy/parakeet-stt/edge-stt/results/dtype/f16_ctc.json b/deploy/parakeet-stt/edge-stt/results/dtype/f16_ctc.json new file mode 100644 index 0000000..25b512a --- /dev/null +++ b/deploy/parakeet-stt/edge-stt/results/dtype/f16_ctc.json @@ -0,0 +1,22 @@ +{ + "mode": "A", + "n": 300, + "total_audio_sec": 2641.085, + "wall_sec": 24.630852, + "rtfx": 107.227, + "rtf": 0.009326, + "wer_pct": 2.369, + "n_scored": 300, + "normalizer": "whisper", + "mem": { + "idle_total_mb": 1855, + "peak_total_mb": 2418, + "proc_rss_mb": 93.1, + "cuda_used_mb": 2502.0 + }, + "replay": "sequential", + "precision": "q8_0", + "engine": "parakeet.cpp", + "device": "cuda", + "limit": null +} \ No newline at end of file diff --git a/deploy/parakeet-stt/edge-stt/results/dtype/f16_tdt.json b/deploy/parakeet-stt/edge-stt/results/dtype/f16_tdt.json new file mode 100644 index 0000000..ed6a615 --- /dev/null +++ b/deploy/parakeet-stt/edge-stt/results/dtype/f16_tdt.json @@ -0,0 +1,22 @@ +{ + "mode": "A", + "n": 300, + "total_audio_sec": 2641.085, + "wall_sec": 43.394873, + "rtfx": 60.862, + "rtf": 0.016431, + "wer_pct": 1.808, + "n_scored": 300, + "normalizer": "whisper", + "mem": { + "idle_total_mb": 1851, + "peak_total_mb": 2448, + "proc_rss_mb": 91.1, + "cuda_used_mb": 2532.6 + }, + "replay": "sequential", + "precision": "q8_0", + "engine": "parakeet.cpp", + "device": "cuda", + "limit": null +} \ No newline at end of file diff --git a/deploy/parakeet-stt/edge-stt/results/dtype/q4_k_ctc.json b/deploy/parakeet-stt/edge-stt/results/dtype/q4_k_ctc.json new file mode 100644 index 0000000..e595b65 --- /dev/null +++ b/deploy/parakeet-stt/edge-stt/results/dtype/q4_k_ctc.json @@ -0,0 +1,22 @@ +{ + "mode": "A", + "n": 300, + "total_audio_sec": 2641.085, + "wall_sec": 24.669902, + "rtfx": 107.057, + "rtf": 0.009341, + "wer_pct": 2.467, + "n_scored": 300, + "normalizer": "whisper", + "mem": { + "idle_total_mb": 1852, + "peak_total_mb": 2232, + "proc_rss_mb": 91.1, + "cuda_used_mb": 2316.0 + }, + "replay": "sequential", + "precision": "q8_0", + "engine": "parakeet.cpp", + "device": "cuda", + "limit": null +} \ No newline at end of file diff --git a/deploy/parakeet-stt/edge-stt/results/dtype/q4_k_tdt.json b/deploy/parakeet-stt/edge-stt/results/dtype/q4_k_tdt.json new file mode 100644 index 0000000..b80877b --- /dev/null +++ b/deploy/parakeet-stt/edge-stt/results/dtype/q4_k_tdt.json @@ -0,0 +1,22 @@ +{ + "mode": "A", + "n": 300, + "total_audio_sec": 2641.085, + "wall_sec": 42.647567, + "rtfx": 61.928, + "rtf": 0.016148, + "wer_pct": 2.018, + "n_scored": 300, + "normalizer": "whisper", + "mem": { + "idle_total_mb": 1853, + "peak_total_mb": 2256, + "proc_rss_mb": 91.1, + "cuda_used_mb": 2340.3 + }, + "replay": "sequential", + "precision": "q8_0", + "engine": "parakeet.cpp", + "device": "cuda", + "limit": null +} \ No newline at end of file diff --git a/deploy/parakeet-stt/edge-stt/results/dtype/q5_k_ctc.json b/deploy/parakeet-stt/edge-stt/results/dtype/q5_k_ctc.json new file mode 100644 index 0000000..a9d3b9f --- /dev/null +++ b/deploy/parakeet-stt/edge-stt/results/dtype/q5_k_ctc.json @@ -0,0 +1,22 @@ +{ + "mode": "A", + "n": 300, + "total_audio_sec": 2641.085, + "wall_sec": 24.890393, + "rtfx": 106.109, + "rtf": 0.009424, + "wer_pct": 2.411, + "n_scored": 300, + "normalizer": "whisper", + "mem": { + "idle_total_mb": 1850, + "peak_total_mb": 2245, + "proc_rss_mb": 91.4, + "cuda_used_mb": 2328.8 + }, + "replay": "sequential", + "precision": "q8_0", + "engine": "parakeet.cpp", + "device": "cuda", + "limit": null +} \ No newline at end of file diff --git a/deploy/parakeet-stt/edge-stt/results/dtype/q5_k_tdt.json b/deploy/parakeet-stt/edge-stt/results/dtype/q5_k_tdt.json new file mode 100644 index 0000000..0a0a5d5 --- /dev/null +++ b/deploy/parakeet-stt/edge-stt/results/dtype/q5_k_tdt.json @@ -0,0 +1,22 @@ +{ + "mode": "A", + "n": 300, + "total_audio_sec": 2641.085, + "wall_sec": 42.995009, + "rtfx": 61.428, + "rtf": 0.016279, + "wer_pct": 1.808, + "n_scored": 300, + "normalizer": "whisper", + "mem": { + "idle_total_mb": 1844, + "peak_total_mb": 2279, + "proc_rss_mb": 91.1, + "cuda_used_mb": 2363.3 + }, + "replay": "sequential", + "precision": "q8_0", + "engine": "parakeet.cpp", + "device": "cuda", + "limit": null +} \ No newline at end of file diff --git a/deploy/parakeet-stt/edge-stt/results/dtype/q8_0_ctc.json b/deploy/parakeet-stt/edge-stt/results/dtype/q8_0_ctc.json new file mode 100644 index 0000000..18e652e --- /dev/null +++ b/deploy/parakeet-stt/edge-stt/results/dtype/q8_0_ctc.json @@ -0,0 +1,22 @@ +{ + "mode": "A", + "n": 300, + "total_audio_sec": 2641.085, + "wall_sec": 24.610336, + "rtfx": 107.316, + "rtf": 0.009318, + "wer_pct": 2.383, + "n_scored": 300, + "normalizer": "whisper", + "mem": { + "idle_total_mb": 1845, + "peak_total_mb": 2279, + "proc_rss_mb": 93.1, + "cuda_used_mb": 2363.0 + }, + "replay": "sequential", + "precision": "q8_0", + "engine": "parakeet.cpp", + "device": "cuda", + "limit": null +} \ No newline at end of file diff --git a/deploy/parakeet-stt/edge-stt/results/dtype/q8_0_tdt.json b/deploy/parakeet-stt/edge-stt/results/dtype/q8_0_tdt.json new file mode 100644 index 0000000..2deb0a6 --- /dev/null +++ b/deploy/parakeet-stt/edge-stt/results/dtype/q8_0_tdt.json @@ -0,0 +1,22 @@ +{ + "mode": "A", + "n": 300, + "total_audio_sec": 2641.085, + "wall_sec": 42.786429, + "rtfx": 61.727, + "rtf": 0.0162, + "wer_pct": 1.836, + "n_scored": 300, + "normalizer": "whisper", + "mem": { + "idle_total_mb": 1847, + "peak_total_mb": 2319, + "proc_rss_mb": 91.1, + "cuda_used_mb": 2403.3 + }, + "replay": "sequential", + "precision": "q8_0", + "engine": "parakeet.cpp", + "device": "cuda", + "limit": null +} \ No newline at end of file diff --git a/deploy/parakeet-stt/edge-stt/results/feasibility.md b/deploy/parakeet-stt/edge-stt/results/feasibility.md new file mode 100644 index 0000000..2dc4fb9 --- /dev/null +++ b/deploy/parakeet-stt/edge-stt/results/feasibility.md @@ -0,0 +1,157 @@ +# M1 — Feasibility truth on-device (Mode A measured) + +> **HEADLINE (2026-06-10): the primary engine is now `parakeet.cpp` (ggml CUDA).** On LibriSpeech-300 it +> measures **WER 1.808 % @ 61× (tdt, q5_k default)** or **2.383 % @ 107× (ctc, q8_0)**, **+450 MB**, +> ~126 ms/call — ~4–14× the RTF of the sherpa-onnx paths below, at a fraction of the memory. Full write-up: +> [`parakeet/RESULTS.md`](parakeet/RESULTS.md); on-GPU dtype sweep (why tdt=q5_k): [`dtype/RESULTS.md`](dtype/RESULTS.md). +> The sherpa-onnx analysis below remains the **reproducible alternative** + the streaming (Mode B) and +> multilingual (Mode C) engines, and the honest engine/RTF/memory trade-off study. + +**Device (as-used, 2026-06-09):** Jetson Orin Nano Super 8 GB · L4T 36.4.7 · CUDA 12.6 / TRT 10.3.0.30 / cuDNN 9.3.0.75 · **25 W** (not MAXN) · **shared box** normally running GeniePod (LLM + STT, ~2–3 GB resident). + +**Engine:** the gate study below is the original **`sherpa-onnx-offline` INT8 Parakeet-TDT-0.6b-v2** feasibility baseline (the box that exposed the memory + RTF walls). The **primary Mode A engine is now `parakeet.cpp`** (banner above; 2026-06-10 pivot — see [`../docs/TRADE-OFFS.md`](../docs/TRADE-OFFS.md)); sherpa-onnx stays as the reproducible alternative + the Mode B/C engines. TensorRT deferred. + +Every number below is from the frozen entrypoint `./transcribe --mode A` over the **pinned 300** (LibriSpeech test-clean, first-300-by-id), Whisper-normalized, on the actual device. + +--- + +## Verdict per gate + +| Gate | Target | Measured | Verdict | +|---|---|---|---| +| **C — WER (Mode A offline)** | ≤ 3.0 % test-clean | **1.331 %** (INT8, Whisper-norm, n=300, oom=0) | ✅ **PASS** — beats the ~1.69 % prior on this subset | +| **B — RTF (Mode A offline)** | ≤ 0.004 (250×) | **RTFx 7.41** (rtf 0.135), sequential, model-load-excluded | ❌ misses 250× by ~34× — report best-achieved + gap | +| **A — Memory** | ≤ 1 GB **total** | **peak 6.6 GB** (cuda 6.7 GB; ~4.9 GB incremental over a 1.65 GB paused floor) | ❌ **wildly infeasible**; model does not coexist with GeniePod on 8 GB | +| **B-stream — Mode B streaming WER** | ≤ 3.0 % (disclose breach) | **1.976 %** (Whisper-norm, **n=300**, chunk-16-left-128) | ✅ no breach at this look-ahead | +| **C-multi — Mode C LID + non-English** | multilingual + dynamic | **LID 97 %**; German WER **7.41 %** (v3) / 54.2 % (whisper-tiny); v3 English 1.71 % | ✅ proven + accurate | +| **F — modes-split** | 3 modes / 1 entrypoint | **all 3 real & measured** behind one entrypoint | ✅ | + +--- + +## GATE C — accuracy is the gate we win +**1.331 % WER** over all 300, INT8, on-device, Whisper-normalized — every clip transcribed (0 OOM in the clean run). This is the headline: the flagship model is accurate well within budget. Accuracy was never the risk; memory and RTF are. + +## GATE B — RTF: honest miss + gap analysis +**RTFx 7.41** (inference-only, model-load excluded; total audio 2641 s / inference 357 s). This is the *naive* number: batch=1, sequential, sherpa-onnx-offline CUDA EP, **25 W**, shared box. It misses the 250× target by ~34×. The honest gap decomposition: +- **A100 → Orin Nano**: ~18–20× raw compute gap (the 250× figure is a datacenter-batched number). +- **No batching**: 250× assumes large offline batches; we measure batch=1. +- **25 W / shared**: conservative vs a clock-locked MAXN run. + +The deferred TensorRT eager-batched path was only ever expected to reach ~100–180× — still a documented miss — at the cost of the highest-risk, least-reproducible task in the plan (see TRADE-OFFS.md). Batched RTF, if pursued, is **never** reported as streaming. + +## GATE A — memory is THE binding constraint (vividly confirmed) +≤ 1 GB *total* is infeasible by a wide margin: the model **peaks at ~6.6 GB** (ORT's CUDA BFC arena grows greedily to ~1 GB activation buffers for the longest clips). The empirical proof of the shared-device reality: +- On the **as-observed contended box** (GeniePod's ~2–3 GB resident), the model's ~6.6 GB peak exceeds 8 GB → it **OOM-rebooted the device once**, then OOM-SIGKILLed the process. +- The clean 6.6 GB-peak number was obtainable **only after pausing GeniePod** (authorized), leaving a 1.65 GB idle floor → ~4.9 GB incremental. + +**Reported honestly as:** total (6.6 GB peak) + floor (1.65 GB paused / ~3 GB contended) + incremental (~4.9 GB). The flagship 0.6 B model and the other 8 GB-box workload **do not fit together** — this is the central trade-off the brief is about. + +## Runner robustness (how all 300 fit despite the arena) +`src/modes/a_offline/runner.py` sorts clips **shortest-first**, batches in chunks of 8, and on an arena-overflow abort **splits the chunk down to singles** (a single clip + model fits comfortably), recording any clip that still won't fit as a non-fatal `oom` row. Result: **0 OOM**, all 300 scored, with model-load excluded from RTF. + +## Mode B — true streaming (measured) +**sherpa-onnx-online streaming Zipformer INT8**, chunk-16-left-128. **Streaming WER 1.976 %** on the **full 300** (Whisper-norm; 2.249 % on the first-100) — holds under 3 % at this look-ahead (no breach; lower-latency configs may approach the disclosed 3.3–3.9 %). Two engineering findings: +- **CPU, not GPU.** GPU is **~3× slower** for the tiny streaming model — per-chunk CUDA kernel-launch overhead dominates the small compute. Mode B runs on CPU (the right call), and therefore co-resides with GeniePod without the Mode-A OOM. +- **Streaming RTF is contention-sensitive.** ~0.6 isolated (1.6× faster than realtime — the engine capability) vs **~3.3 under full GeniePod CPU load** on the shared box. Reported separately from offline RTF, never conflated. + +## Mode C — multilingual + dynamic (measured, accurate) +**Whisper-tiny LID router → recognizer**, over a 30-clip **German FLEURS** sample, with both recognizers measured on-device: +- **LID accuracy 97 %** — whisper-tiny auto-detects German on 29/30 clips, routing correctly (the JSON `lang` field is the router decision). +- **German WER 7.41 %** with **Parakeet-TDT-0.6b-v3** (the accurate 25-lang recognizer) — vs **54.2 %** with whisper-tiny alone (a **7× improvement**; BasicTextNormalizer). v3 also does **English at 1.71 %** on the 300 (vs v2's 1.33 % English-specialist — v3 trades a little English accuracy for 25-language coverage). +- **Residency:** `src/modes/c_multilingual/residency.py` implements the registry + LID router + **TTL/LRU one-resident manager**; the single-resident invariant (evict-before-load, never two 0.6 B models co-resident) is validated — exactly what GATE A requires. +- v3 is a 0.6 B model (~6.6 GB peak), so its measurement used a **GeniePod GPU pause**, same as Mode A. Staging it required a parallel-HF download workaround (HuggingFace throttled the VM per-connection). + +**What this proves:** the multilingual stack — LID → route → accurate multilingual recognition under a one-resident memory cap — runs **end-to-end and accurately** on the 8 GB device. + +--- + +## Footprint study — "6.6 GB is too big" (it is; here's the deployable number) + +The Mode-A headline **6.6 GB peak** is a *worst-case* artifact of three stacked costs, not the model: +the **0.6 B weights** (~650 MB) + the **GPU CUDA context** (~1 GB, fixed for any CUDA model) + **ORT's +CUDA arena grown over a 300-clip batch** (~3 GB). The 0.6 B at chunk=1 (min arena) is already only +**~1.76 GB**; a tiny Zipformer on GPU is **~1 GB** (all CUDA context). So most of the 6.6 GB is +reducible runtime, and the GPU floor alone is ~1 GB. + +The number that matters for the **LyraT voice pipeline** is different from a 300-clip LibriSpeech sweep: +a **resident model decoding one 3–5 s command on CPU**. Measured per-process peak RSS (`/proc VmHWM`), +one ~3 s clip, CPU: + +| Offline model | Weights (disk) | **Per-command RSS** | WER (300, Whisper-norm) | RTFx (CPU) | +|---|---|---|---|---| +| **zipformer-small-en (zip28)** | 27 MB | **115 MB** | 2.036 % | 28× | +| **zipformer-en (zip70)** | 68 MB | **204 MB** | 1.867 % | 23× | +| Parakeet-TDT-0.6b-v2 | 631 MB | 1247 MB | 1.331 % | 5× | + +**A small Zipformer hits ~115–204 MB per command at < 3 % WER and 20–30× real-time on CPU** — under the +300–400 MB target, fits comfortably alongside the LLM, and is *faster* than the 0.6 B was on GPU. The +weights are tiny; the runtime memory scales with **clip length × clips-per-invocation**, not model size +(ORT's arena accumulates — a 91-short-clip batch balloons to ~3 GB for *every* model, but a single +command does not). + +**Recommendation for the deployable STT:** **zip70 (68 MB → 204 MB/command, 1.867 %, 23× RTFx)** — or +zip28 for 115 MB at 2.036 %. Keep the 0.6 B as the offline accuracy *showcase* (1.331 %), not the +on-device voice STT. (Caveats: these are English offline Zipformers; the streaming Mode-B Zipformer +already shows the same small-and-accurate profile, and a multilingual small model would be the Mode-C +production swap.) + +## RTF optimization — why 250× is out of reach, and what actually moves it + +The 250× (RTF ≤0.004) target is a **datacenter-batched** figure; on a **25 W Orin Nano** it is unreachable +(~18–20× A100→Orin compute gap, before the no-large-batch and power caveats). What we measured pushing RTF +on LibriSpeech (Whisper-norm WER alongside): + +| Model · provider · note | RTFx | WER | +|---|---|---| +| 0.6 B Parakeet transducer · GPU | 7.4× | 1.33 % | +| **zipformer transducer (68 MB) · CPU** | **~25×** | **1.87 %** | +| zipformer transducer · GPU | ~25× (no gain, +800 MB) | 1.91 % | +| nemo-ctc **conformer** (45 MB) · CPU | 7.8× | — | +| zipformer-**ctc** (70 MB) · CPU | ~12× single-clip (batch OOMs) | — | + +**The levers, measured (not guessed):** +- **The encoder is the bottleneck, not the decode head.** A NeMo *conformer*-CTC is **slower** (7.8×) than a + *zipformer*-transducer (25×) despite CTC's "parallel" decode — because the conformer encoder is heavier. + CTC vs transducer barely matters here; the **zipformer encoder** is what makes it fast. +- **GPU does not help** a small model (same ~25×, +800 MB CUDA context) — per-clip launch overhead dominates. +- **More threads hurt** (4 → 22.4× vs 6 → 18.9×): core oversubscription on the shared 6-core box. +- **GPU batching OOMs** on the 8 GB box (arena growth) — the one lever that *could* approach the target is the + one the memory budget forbids. This is the core tension the assessment is built around. + +**Batch-scaling (GeniePod paused, clean-box headroom) — reconciling 7.4× vs the ~100–180× TRT estimate:** + +| model · GPU | batch=1 | batch=16 | batch≥64 | +|---|---|---|---| +| zipformer (68 MB) | 3.1× | **20.4×** | OOM | +| 0.6 B Parakeet | 4.2× | **4.8×** | OOM | + +Two distinct facts fall out: +- **The 0.6 B is compute-bound on ONNX Runtime — batching does nothing** (4.2×→4.8× from batch 1→16). The big + model saturates the 25 W GPU at batch=1, so the only lever left is a faster *engine*. **The ~100–180× figure + was specific to the deferred TensorRT path** (fused/optimized INT8 engines + eager-batched label-looping + decode); it was never an ORT/sherpa-onnx number, and ORT cannot reach it for the 0.6 B. +- **Batching helps only the small model** (zip70: 3.1×→20.4×, 6.5× from batch-16) and **OOMs past batch-16** + (activation arena). So the small-model ceiling on the ORT path is ~20–25×. + +So "7.4× vs ~110×" is **~90 % engine** (ORT leaves the 0.6 B at ~5×; TensorRT was the thing that hits triple +digits) and the rest batch headroom — the cost of the reproducibility-vs-peak-RTF decision (sherpa-onnx over a +bespoke, non-portable TRT engine; see `../docs/TRADE-OFFS.md`). + +**Conclusion:** the practical RTF ceiling for an **accurate (<3 %) small model** on the ORT path is **~25×** +(zipformer encoder, INT8, CPU 4-thread, or GPU batch-16) — **3.4× faster than the 0.6 B**, at a fraction of the +memory. 250× is a documented, explained miss; it would require **TensorRT** (engine) **and** large GPU batches +(memory) — directly opposing the ≤1 GB budget. That opposition *is* the assessment's core tension. + +**Single deployable pick (memory + RTF + accuracy), measured on the FULL 300:** **zip70 transducer, CPU, +4 threads** — **WER 1.598 %, RTFx 21.6×, 204 MB resident** (vs the 0.6 B showcase: 1.331 %, 7.4×, 1247 MB). +**2.9× faster and ~6× smaller than the 0.6 B, at <3 % WER.** If memory tightens further post-deployment +(a Stage-2 question), drop to **zip28** (115 MB resident, 2.04 %) — still under 3 %. + +--- + +## Summary — all three modes real, measured, and accurate behind one entrypoint +- **Mode A** (offline): WER **1.331 %**, RTFx 7.4, the **6.6 GB OOM** memory finding. +- **Mode B** (streaming): WER **1.976 %** (n=300); CPU > GPU for streaming; contention-sensitive RTF. +- **Mode C** (multilingual): LID **97 %**, German **7.41 %** (v3) / English 1.71 %; one-resident residency validated. + +The **shared-box memory reality** (Mode A OOM), the **streaming CPU-vs-GPU + contention** findings, and the **on-device multilingual LID + accurate v3** are all measured, reproducible results for the Stage-2 memo — not predictions. diff --git a/deploy/parakeet-stt/edge-stt/results/m1/hyps.jsonl b/deploy/parakeet-stt/edge-stt/results/m1/hyps.jsonl new file mode 100644 index 0000000..85b5792 --- /dev/null +++ b/deploy/parakeet-stt/edge-stt/results/m1/hyps.jsonl @@ -0,0 +1,300 @@ +{"id": "1089-134686-0000", "text": "He hoped there would be stew for dinner turnips and carrots and bruised potatoes and fat mutton pieces to be ladled out in thick, peppered, flour fattened sauce.", "audio_sec": 10.435, "infer_sec": 1.486884} +{"id": "1089-134686-0001", "text": "Stuff it into you, his belly counselled him.", "audio_sec": 3.275, "infer_sec": 0.475545} +{"id": "1089-134686-0002", "text": "After early nightfall the yellow lamps would light up, here and there, the squalid quarter of the brothels.", "audio_sec": 6.625, "infer_sec": 0.931195} +{"id": "1089-134686-0003", "text": "Hello, Bertie. Any good in your mind?", "audio_sec": 2.68, "infer_sec": 0.394849} +{"id": "1089-134686-0004", "text": "Number ten Fresh Nelly is waiting on you. Good night, husband.", "audio_sec": 5.215, "infer_sec": 0.777457} +{"id": "1089-134686-0005", "text": "The music came nearer and he recalled the words the words of Shelley's fragment upon the moon wandering companionless, pale for weariness.", "audio_sec": 9.635, "infer_sec": 1.306979} +{"id": "1089-134686-0006", "text": "The dull light fell more faintly upon the page, whereon another equation began to unfold itself slowly and to spread abroad its widening tail.", "audio_sec": 10.555, "infer_sec": 1.503982} +{"id": "1089-134686-0007", "text": "A cold, lucid indifference reigned in his soul.", "audio_sec": 4.275, "infer_sec": 0.631371} +{"id": "1089-134686-0008", "text": "The chaos in which his ardour extinguished itself was a cold, indifferent knowledge of himself,", "audio_sec": 6.73, "infer_sec": 0.945954} +{"id": "1089-134686-0009", "text": "At most, by an alms given to a beggar whose blessing he fled from, he might hope wearily to win for himself some measure of actual grace.", "audio_sec": 10.575, "infer_sec": 1.365727} +{"id": "1089-134686-0010", "text": "Well now, Ennis, I declare you have a head, and so has my stick.", "audio_sec": 4.405, "infer_sec": 0.650571} +{"id": "1089-134686-0011", "text": "On Saturday mornings when the sodality met in the chapel to recite the little office, his place was a cushioned kneeling desk at the right of the altar from which he led his wing of boys through the responses.", "audio_sec": 12.445, "infer_sec": 1.623537} +{"id": "1089-134686-0012", "text": "Her eyes seemed to regard him with mild pity. Her holiness, a strange light glowing faintly upon her frail flesh, did not humiliate the sinner who approached her.", "audio_sec": 11.64, "infer_sec": 1.596002} +{"id": "1089-134686-0013", "text": "If ever he was impelled to cast sin from him and to repent, the impulse that moved him was the wish to be her knight.", "audio_sec": 7.915, "infer_sec": 1.095595} +{"id": "1089-134686-0014", "text": "He tried to think how it could be", "audio_sec": 2.225, "infer_sec": 0.334747} +{"id": "1089-134686-0015", "text": "but the dusk, deepening in the schoolroom, covered over his thoughts. The bell rang.", "audio_sec": 5.815, "infer_sec": 0.824621} +{"id": "1089-134686-0016", "text": "Then you can ask him questions on the Catechism, Daedalus.", "audio_sec": 3.54, "infer_sec": 0.55898} +{"id": "1089-134686-0017", "text": "Stephen, leaning back and drawing idly on his scribbler, listened to the talk about him, which Heron checked from time to time by saying", "audio_sec": 8.87, "infer_sec": 1.18052} +{"id": "1089-134686-0018", "text": "It was strange, too, that he found an arid pleasure in following up to the end the rigid lines of the doctrines of the Church, and penetrating into obscure silences only to hear and feel the more deeply his own condemnation.", "audio_sec": 15.72, "infer_sec": 2.021751} +{"id": "1089-134686-0019", "text": "The sentence of Saint James, which says that he who offends against one commandment becomes guilty of all, had seemed to him first a swollen phrase, until he had begun to grope in the darkness of his own state.", "audio_sec": 13.895, "infer_sec": 1.817747} +{"id": "1089-134686-0020", "text": "If a man had stolen a pound in his youth, and had used that pound to amass a huge fortune, how much was he obliged to give back the pound he had stolen only, or the pound together with the compound interest accruing upon it, or all his huge fortune?", "audio_sec": 16.79, "infer_sec": 2.034013} +{"id": "1089-134686-0021", "text": "If a layman, in giving baptism, pour the water before saying the words, is the child baptized?", "audio_sec": 6.55, "infer_sec": 0.914648} +{"id": "1089-134686-0022", "text": "How comes it that while the first Beatitude promises the kingdom of heaven to the poor of heart, the second Beatitude promises also to the meek that they shall possess the land?", "audio_sec": 11.175, "infer_sec": 1.477056} +{"id": "1089-134686-0023", "text": "Why was the sacrament of the Eucharist instituted under the two species of bread and wine, if Jesus Christ be present body and blood, soul and divinity, in the bread alone, and in the wine alone?", "audio_sec": 13.275, "infer_sec": 1.731817} +{"id": "1089-134686-0024", "text": "If the wine change into vinegar, and the host crumble into corruption after they have been consecrated, is Jesus Christ still present under their species as God and as man?", "audio_sec": 11.655, "infer_sec": 1.598059} +{"id": "1089-134686-0025", "text": "A gentle kick from the tall boy in the bench behind urged Stephen to ask a difficult question.", "audio_sec": 6.61, "infer_sec": 0.923026} +{"id": "1089-134686-0026", "text": "The rector did not ask for a catechism to hear the lesson from", "audio_sec": 4.01, "infer_sec": 0.706664} +{"id": "1089-134686-0027", "text": "He clasped his hands on the desk and said", "audio_sec": 2.71, "infer_sec": 0.399269} +{"id": "1089-134686-0028", "text": "The retreat will begin on Wednesday afternoon in honour of Saint Francis Xavier, whose feast day is Saturday.", "audio_sec": 7.83, "infer_sec": 1.083829} +{"id": "1089-134686-0029", "text": "On Friday confession will be heard all the afternoon after Bedes.", "audio_sec": 4.67, "infer_sec": 0.652657} +{"id": "1089-134686-0030", "text": "Beware of making that mistake.", "audio_sec": 2.715, "infer_sec": 0.400006} +{"id": "1089-134686-0031", "text": "Stephen's heart began slowly to fold and fade with fear like a withering flower.", "audio_sec": 6.615, "infer_sec": 0.929789} +{"id": "1089-134686-0032", "text": "He is called, as you know, the Apostle of the Indies.", "audio_sec": 4.09, "infer_sec": 0.720762} +{"id": "1089-134686-0033", "text": "A great saint, Saint Francis Xavier,", "audio_sec": 3.33, "infer_sec": 0.483531} +{"id": "1089-134686-0034", "text": "The rector paused and then, shaking his clasped hands before him, went on", "audio_sec": 5.81, "infer_sec": 0.823912} +{"id": "1089-134686-0035", "text": "He had the faith in him that moves mountains,", "audio_sec": 3.445, "infer_sec": 0.543979} +{"id": "1089-134686-0036", "text": "a great saint, Saint Francis Xavier,", "audio_sec": 3.25, "infer_sec": 0.471914} +{"id": "1089-134686-0037", "text": "In the silence their dark fire kindled the dusk into a tawny glow.", "audio_sec": 5.21, "infer_sec": 0.776712} +{"id": "1089-134691-0000", "text": "He could wait no longer.", "audio_sec": 2.085, "infer_sec": 0.441281} +{"id": "1089-134691-0001", "text": "For a full hour he had paced up and down, waiting. But he could wait no longer.", "audio_sec": 5.415, "infer_sec": 0.770714} +{"id": "1089-134691-0002", "text": "He set off abruptly for the bull, walking rapidly lest his father's shrill whistle might call him back, and in a few moments he had rounded the curve at the police barrack and was safe.", "audio_sec": 11.6, "infer_sec": 1.590517} +{"id": "1089-134691-0003", "text": "The University", "audio_sec": 2.175, "infer_sec": 0.460329} +{"id": "1089-134691-0004", "text": "Pride after satisfaction uplifted him like long slow waves.", "audio_sec": 5.175, "infer_sec": 0.771494} +{"id": "1089-134691-0005", "text": "Whose feet are as the feet of hearts, And underneath the everlasting arms.", "audio_sec": 5.36, "infer_sec": 0.799074} +{"id": "1089-134691-0006", "text": "The pride of that dim image brought back to his mind the dignity of the office he had refused.", "audio_sec": 5.895, "infer_sec": 0.835965} +{"id": "1089-134691-0007", "text": "Soon the whole bridge was trembling and resounding.", "audio_sec": 3.44, "infer_sec": 0.499503} +{"id": "1089-134691-0008", "text": "The uncouth faces passed him two by two, stained yellow or red or livid by the sea, and as he strove to look at them with ease and indifference, a faint stain of personal shame and commiseration rose to his own face.", "audio_sec": 14.985, "infer_sec": 1.914991} +{"id": "1089-134691-0009", "text": "Angry with himself, he tried to hide his face from their eyes by gazing down sideways into the shallow, swirling water under the bridge, but he still saw a reflection therein of their top heavy silk hats, and humble tape like collars and loosely hanging clerical clothes. Brother Hickey", "audio_sec": 20.055, "infer_sec": 2.450595} +{"id": "1089-134691-0010", "text": "Brother McCardle Brother Keough", "audio_sec": 3.195, "infer_sec": 0.446085} +{"id": "1089-134691-0011", "text": "Their piety would be like their names, like their faces, like their clothes and it was idle for him to tell himself that their humble and contrite hearts, it might be, paid a far richer tribute of devotion than his had ever been a gift tenfold more acceptable than his elaborate adoration.", "audio_sec": 20.01, "infer_sec": 2.445096} +{"id": "1089-134691-0012", "text": "It was idle for him to move himself to be generous towards them, to tell himself that, if he ever came to their gates, stripped of his pride, beaten and in beggars' weeds, that they would be generous towards him, loving him as themselves.", "audio_sec": 15.03, "infer_sec": 1.920742} +{"id": "1089-134691-0013", "text": "Idle and embittering finally to argue, against his own dispassionate certitude, that the commandment of love bade us not to love our neighbour as ourselves with the same amount and intensity of love, but to love him as ourselves with the same kind of love.", "audio_sec": 16.33, "infer_sec": 1.948268} +{"id": "1089-134691-0014", "text": "The phrase and the day and the scene harmonized in accord.", "audio_sec": 4.755, "infer_sec": 0.664536} +{"id": "1089-134691-0015", "text": "words was it their colours?", "audio_sec": 3.395, "infer_sec": 0.492969} +{"id": "1089-134691-0016", "text": "They were voyaging across the deserts of the sky, a host of nomads on the march, voyaging high over Ireland, westward bound.", "audio_sec": 9.06, "infer_sec": 1.205808} +{"id": "1089-134691-0017", "text": "The Europe they had come from lay out there beyond the Irish Sea Europe of strange tongues and valley and wood begirt and citadeled and of entrenched and martialed races.", "audio_sec": 11.695, "infer_sec": 1.603543} +{"id": "1089-134691-0018", "text": "again again", "audio_sec": 3.09, "infer_sec": 0.471903} +{"id": "1089-134691-0019", "text": "A voice from beyond the world was calling", "audio_sec": 3.155, "infer_sec": 0.4405} +{"id": "1089-134691-0020", "text": "Hullo, Stephanos here comes the Daedalus", "audio_sec": 3.99, "infer_sec": 0.580199} +{"id": "1089-134691-0021", "text": "Their diving stone, poised on its rude supports and rocking under their plunges, and the rough hewn stones of the sloping break water over which they scrambled in their horseplay gleamed with cold wet lustre.", "audio_sec": 13.37, "infer_sec": 1.72569} +{"id": "1089-134691-0022", "text": "He stood still in deference to their calls, and parried their banter with easy words.", "audio_sec": 5.635, "infer_sec": 0.802026} +{"id": "1089-134691-0023", "text": "It was a pain to see them and a sword like pain to see the signs of adolescence that made repellent their pitiable nakedness.", "audio_sec": 7.735, "infer_sec": 1.081946} +{"id": "1089-134691-0024", "text": "Stephanoes their loss,", "audio_sec": 2.215, "infer_sec": 0.333243} +{"id": "1089-134691-0025", "text": "A moment before the ghost of the ancient kingdom of the Danes had looked forth through the vesture of the haze wrapped city.", "audio_sec": 8.005, "infer_sec": 1.108053} +{"id": "1188-133604-0000", "text": "You will find me continually speaking of four men Titian, Holbein, Turner, and Tintoret in almost the same terms.", "audio_sec": 10.725, "infer_sec": 1.385099} +{"id": "1188-133604-0001", "text": "They unite every quality and sometimes you will find me referring to them as colourists, sometimes as chiaroscurists.", "audio_sec": 9.04, "infer_sec": 1.203146} +{"id": "1188-133604-0002", "text": "By being studious of colour they are studious of division and while the curoscurist devotes himself to the representation of degrees of force in one thing unseparated light, the colourists have for their function the attainment of beauty by arrangement of the divisions of light.", "audio_sec": 17.96, "infer_sec": 2.175752} +{"id": "1188-133604-0003", "text": "My first and principal reason was that they enforced, beyond all resistance, on any student who might attempt to copy them, this method of laying portions of distinct hue side by side.", "audio_sec": 12.61, "infer_sec": 1.645063} +{"id": "1188-133604-0004", "text": "Some of the touches, indeed, when the tint has been mixed with much water, have been laid in little drops or ponds, so that the pigment might crystallize hard at the edge.", "audio_sec": 10.65, "infer_sec": 1.375413} +{"id": "1188-133604-0005", "text": "It is the head of a parrot with a little flower in his beak from a picture of Carpatius, one of his series of the life of Saint George.", "audio_sec": 8.56, "infer_sec": 1.200346} +{"id": "1188-133604-0006", "text": "Then he comes to the beak of it.", "audio_sec": 2.4, "infer_sec": 0.361076} +{"id": "1188-133604-0007", "text": "The brown ground beneath is left for the most part. One touch of black is put for the hollow, two delicate lines of dark grey define the outer curve, and one little quivering touch of white draws the inner edge of the mandible.", "audio_sec": 14.24, "infer_sec": 1.86288} +{"id": "1188-133604-0008", "text": "for, believe me, the final philosophy of art can only ratify their opinion that the beauty of a cockrobin is to be red, and of a grass plot to be green and the best skill of art is in instantly seizing on the manifold deliciousness of light, which you can only seize by precision of instantaneous touch.", "audio_sec": 20.755, "infer_sec": 2.866201} +{"id": "1188-133604-0009", "text": "Now you will see in these studies that the moment the white is enclosed properly and harmonized with the other hues, it becomes somehow more precious and pearly than the white paper and that I am not afraid to leave a whole field of untreated white paper all round it, being sure that even the little diamonds in the round window will tell as jewels if they are graded justly.", "audio_sec": 23.06, "infer_sec": 3.184514} +{"id": "1188-133604-0010", "text": "But in this vignette, copied from Turner, you have the two principles brought out perfectly.", "audio_sec": 6.095, "infer_sec": 0.827452} +{"id": "1188-133604-0011", "text": "They are beyond all other works that I know existing, dependent for their effect on low, subdued tones, their favourite choice in time of day being either dawn or twilight, and even their brightest sunsets produced chiefly out of gray paper.", "audio_sec": 15.19, "infer_sec": 1.953588} +{"id": "1188-133604-0012", "text": "It may be that a great colouralist will use his utmost force of colour, as a singer his full power of voice but, loud or low, the virtue is in both cases always in refinement, never in loudness.", "audio_sec": 14.65, "infer_sec": 1.87218} +{"id": "1188-133604-0013", "text": "It must, remember, be one or the other.", "audio_sec": 3.02, "infer_sec": 0.461213} +{"id": "1188-133604-0014", "text": "Do not, therefore, think that the Gothic school is an easy one.", "audio_sec": 4.39, "infer_sec": 0.648356} +{"id": "1188-133604-0015", "text": "The law of that school is that everything shall be seen clearly, or at least, only in such mist or faintness as shall be delightful and I have no doubt that the best introduction to it would be the elementary practice of painting every study on a golden ground.", "audio_sec": 16.085, "infer_sec": 2.068694} +{"id": "1188-133604-0016", "text": "This at once compels you to understand that the work is to be imaginative and decorative, that it represents beautiful things, in the clearest way, but not under existing conditions, and that, in fact, you are producing jeweler's work rather than pictures.", "audio_sec": 16.595, "infer_sec": 1.979884} +{"id": "1188-133604-0017", "text": "That a style is restrained or severe does not mean that it is also erroneous.", "audio_sec": 4.615, "infer_sec": 0.64497} +{"id": "1188-133604-0018", "text": "In all early Gothic art, indeed, you will find failure of this kind, especially distortion and rigidity, which are in many respects painfully to be compared with the splendid repose of classic art.", "audio_sec": 11.55, "infer_sec": 1.526622} +{"id": "1188-133604-0019", "text": "The large letter contains, indeed, entirely feeble and ill drawn figures that is merely childish and failing work of an inferior hand. It is not characteristic of Gothic, or any other school.", "audio_sec": 13.93, "infer_sec": 1.822326} +{"id": "1188-133604-0020", "text": "But, observe, you can only do this on one condition that of striving also to create in reality the beauty which you seek in imagination.", "audio_sec": 10.26, "infer_sec": 1.461948} +{"id": "1188-133604-0021", "text": "It will be wholly impossible for you to retain the tranquillity of temper and felicity of faith necessary for noble purest painting, unless you are actively engaged in promoting the felicity and peace of practical life.", "audio_sec": 14.02, "infer_sec": 1.8341} +{"id": "1188-133604-0022", "text": "You must look at him in the face, fight him, conquer him, with what scathe you may, you need not think to keep out of the way of him.", "audio_sec": 9.63, "infer_sec": 1.306301} +{"id": "1188-133604-0023", "text": "The colourist says First of all, as my delicious pariquet was ruby, so this nasty viper shall be black and then is the question Can I round him off, even though he is black, and make him slimy, and yet springy and close down, clotted like a pool of black blood on the earth, all the same?", "audio_sec": 23.67, "infer_sec": 3.208901} +{"id": "1188-133604-0024", "text": "Nothing will be more precious to you, I think, in the practical study of art, than the conviction, which will force itself on you more and more every hour, of the way all things are bound together, little and great, in spirit and in matter.", "audio_sec": 15.24, "infer_sec": 1.960018} +{"id": "1188-133604-0025", "text": "You know I have just been telling you how this school of materialism and clay involved itself at last in cloud and fire.", "audio_sec": 7.45, "infer_sec": 1.042081} +{"id": "1188-133604-0026", "text": "Here is an equally typical Greek school landscape by Wilson lost wholly in golden mist, the trees so slightly drawn that you don't know if they are trees or towers and no care for color whatsoever. Perfectly deceptive and marvelous effect of sunshine through the mist Apollo and the Python.", "audio_sec": 20.125, "infer_sec": 2.459149} +{"id": "1188-133604-0027", "text": "Now here is Raphael exactly between the two, trees still drawn leaf by leaf, wholly formal, but beautiful mist coming gradually into the distance.", "audio_sec": 11.245, "infer_sec": 1.486309} +{"id": "1188-133604-0028", "text": "Well, then, last, here is Turner's Greek school of the highest class and you define his art absolutely as first the displaying, intensely and with the sternest intellect, of natural form as it is, and then the envelopment of it with cloud and fire.", "audio_sec": 19.005, "infer_sec": 2.322292} +{"id": "1188-133604-0029", "text": "Only, there are two sorts of cloud and fire.", "audio_sec": 3.705, "infer_sec": 0.585034} +{"id": "1188-133604-0030", "text": "He knows them both.", "audio_sec": 1.915, "infer_sec": 0.405302} +{"id": "1188-133604-0031", "text": "There's one and there's another the Dudley and the Flint.", "audio_sec": 4.25, "infer_sec": 0.748958} +{"id": "1188-133604-0032", "text": "It is only a pencil outline by Edward Burne Jones, in illustration of the story of Psyche. It is the introduction of Psyche, after all her troubles, into heaven.", "audio_sec": 10.985, "infer_sec": 1.451943} +{"id": "1188-133604-0033", "text": "Every plant in the grass is set formally, grows perfectly, and may be realized completely.", "audio_sec": 6.625, "infer_sec": 0.931195} +{"id": "1188-133604-0034", "text": "Exquisite order and universal with eternal life and light this is the faith and effort of the schools of crystal and you may describe and complete their work quite literally, by taking any verses of Chaucer in his tender mood, and observing how he insists on the clearness and brightness first, and then on the order.", "audio_sec": 20.905, "infer_sec": 2.886915} +{"id": "1188-133604-0035", "text": "Thus, in Chaucer's dream", "audio_sec": 2.925, "infer_sec": 0.446704} +{"id": "1188-133604-0036", "text": "In both these high mythical subjects the surrounding nature, though suffering, is still dignified and beautiful.", "audio_sec": 7.97, "infer_sec": 1.103208} +{"id": "1188-133604-0037", "text": "Every line in which the master traces it, even where seemingly negligent, is lovely and set down with a meditative calmness which makes these two etchings capable of being placed beside the most tranquil work of Holbein or Durr.", "audio_sec": 14.51, "infer_sec": 1.854289} +{"id": "1188-133604-0038", "text": "But now here is a subject of which you will wonder at first why Turner drew it at all.", "audio_sec": 5.365, "infer_sec": 0.79982} +{"id": "1188-133604-0039", "text": "it has no beauty whatsoever, no specialty of picturesqueness, and all its lines are cramped and poor.", "audio_sec": 6.625, "infer_sec": 0.931195} +{"id": "1188-133604-0040", "text": "The crampness and the poverty are all intended", "audio_sec": 3.23, "infer_sec": 0.46901} +{"id": "1188-133604-0041", "text": "It is a gleaner bringing down her one sheaf of corn to an old water mill, itself mossy and rent, scarcely able to get its stones to turn.", "audio_sec": 10.07, "infer_sec": 1.365986} +{"id": "1188-133604-0042", "text": "The scene is absolutely Arcadian.", "audio_sec": 2.66, "infer_sec": 0.391903} +{"id": "1188-133604-0043", "text": "See that your lives be in nothing worse than a boy's climbing for his entangled kite.", "audio_sec": 4.885, "infer_sec": 0.680081} +{"id": "1188-133604-0044", "text": "It will be well for you if you join not with those who instead of kites fly falcons, who instead of obeying the last words of the great cloud shepherd, to feed his sheep, live the lives how much less than vanity of the war wolf and the gear eagle", "audio_sec": 18.545, "infer_sec": 2.266083} +{"id": "121-121726-0000", "text": "also a popular contrivance whereby love making may be suspended, but not stopped during the picnic season.", "audio_sec": 8.46, "infer_sec": 1.186323} +{"id": "121-121726-0001", "text": "Horang The tiresome product of a tireless tongue", "audio_sec": 5.925, "infer_sec": 0.804373} +{"id": "121-121726-0002", "text": "anger, pain, painful to hear.", "audio_sec": 4.41, "infer_sec": 0.651309} +{"id": "121-121726-0003", "text": "HAY FEVEVER A heart trouble caused by falling in love with a grass widow.", "audio_sec": 6.755, "infer_sec": 0.939754} +{"id": "121-121726-0004", "text": "Heaven a good place to be raised to.", "audio_sec": 4.02, "infer_sec": 0.708426} +{"id": "121-121726-0005", "text": "Hedge a fence.", "audio_sec": 3.1, "infer_sec": 0.432821} +{"id": "121-121726-0006", "text": "Heredity the cause of all our faults", "audio_sec": 3.895, "infer_sec": 0.566385} +{"id": "121-121726-0007", "text": "Horse sense a degree of wisdom that keeps one from betting on the races.", "audio_sec": 6.73, "infer_sec": 0.945954} +{"id": "121-121726-0008", "text": "Hose Man's excuse for wetting the walk.", "audio_sec": 4.99, "infer_sec": 0.694699} +{"id": "121-121726-0009", "text": "Hotel a place where a guest often gives up good dollars for poor quarters.", "audio_sec": 7.26, "infer_sec": 1.01001} +{"id": "121-121726-0010", "text": "House cleaning A domestic upheaval that makes it easy for the Government to enlist all the soldiers it needs.", "audio_sec": 9.81, "infer_sec": 1.330718} +{"id": "121-121726-0011", "text": "Husband the next thing to a wife.", "audio_sec": 4.035, "infer_sec": 0.71107} +{"id": "121-121726-0012", "text": "Hussy, woman, and bond, tie", "audio_sec": 4.045, "infer_sec": 0.712832} +{"id": "121-121726-0013", "text": "Tied to a woman.", "audio_sec": 2.49, "infer_sec": 0.374616} +{"id": "121-121726-0014", "text": "Hypocrite a horse dealer", "audio_sec": 3.165, "infer_sec": 0.441896} +{"id": "121-123852-0000", "text": "Those pretty wrongs that liberty commits When I am sometime absent from thy heart Thy beauty and thy years full well befits For still temptation follows where thou art", "audio_sec": 17.695, "infer_sec": 2.143649} +{"id": "121-123852-0001", "text": "I me.", "audio_sec": 1.87, "infer_sec": 0.395778} +{"id": "121-123852-0002", "text": "No matter, then, although my foot did stand Upon the farthest earth, removed from thee For nimble thought can jump both sea and land As soon as think the place where he would be. But ah", "audio_sec": 17.285, "infer_sec": 2.093979} +{"id": "121-123852-0003", "text": "Thought kills me that I am not thought, To leap large lengths of miles when thou art gone But that so much of earth and water wrought I must attend time's leisure with my moan Receiving naught, by elements so slow, But heavy tears, badges of either's woe.", "audio_sec": 23.505, "infer_sec": 3.245967} +{"id": "121-123852-0004", "text": "My heart doth plead that thou in him dost lie A closet never pierc'd with crystal eyes But the defendant doth that plea deny, And says in him thy fair appearance lies.", "audio_sec": 16.29, "infer_sec": 1.943495} +{"id": "121-123859-0000", "text": "You are my all the world, and I must strive To know my shames and praises from your tongue None else to me, nor I to none alive, That my steeled sense o'er changes right or wrong.", "audio_sec": 17.39, "infer_sec": 2.1067} +{"id": "121-123859-0001", "text": "Oh tis the first 'tis flatterie in my seeing, And my great mind most kingly drinks it up Mine eye well knows what with his gust is green, And to his palate doth prepare the cup If it be poisoned, 'tis the lesser sin That mine eye loves it, and doth first begin", "audio_sec": 25.395, "infer_sec": 3.442756} +{"id": "121-123859-0002", "text": "But reckoning Time, whose million'd accidents Creep in 'twixt vows, and change decrees of kings Tan's sacred beauty, blunt the sharpest intents, Diverts strong minds to the course of altering things Alas why fearing of Time's tyranny? Might I not then say, Now I love you best When I was certain o'er in certainty, Crowning the present, doubting of the rest?", "audio_sec": 30.04, "infer_sec": 4.072471} +{"id": "121-123859-0003", "text": "Love is a babe then might I not say so To give full growth to that which still doth grow?", "audio_sec": 10.825, "infer_sec": 1.398014} +{"id": "121-123859-0004", "text": "So I return rebuk'd to my content, And gain by ill thrice more than I have spent.", "audio_sec": 9.505, "infer_sec": 1.265033} +{"id": "121-127105-0000", "text": "It was this observation that drew from Douglas not immediately, but later in the evening, a reply that had the interesting consequence to which I call attention.", "audio_sec": 9.875, "infer_sec": 1.339535} +{"id": "121-127105-0001", "text": "some one else told a story not particularly effective, which I saw he was not following.", "audio_sec": 5.025, "infer_sec": 0.699571} +{"id": "121-127105-0002", "text": "cried one of the women. He took no notice of her. He looked at me, but as if, instead of me, he saw what he spoke of.", "audio_sec": 7.495, "infer_sec": 1.048376} +{"id": "121-127105-0003", "text": "There was a unanimous groan at this, and much reproach after which, in his preoccupied way, he explained", "audio_sec": 7.725, "infer_sec": 1.080547} +{"id": "121-127105-0004", "text": "The story's written", "audio_sec": 2.11, "infer_sec": 0.446572} +{"id": "121-127105-0005", "text": "I could write to my man and enclose the key. He could send down the packet as he finds it.", "audio_sec": 5.82, "infer_sec": 0.82533} +{"id": "121-127105-0006", "text": "The others resented postponement, but it was just his scruples that charmed me.", "audio_sec": 4.725, "infer_sec": 0.660343} +{"id": "121-127105-0007", "text": "To this his answer was prompt Oh, thank God, no And is the record yours?", "audio_sec": 5.79, "infer_sec": 0.824087} +{"id": "121-127105-0008", "text": "He hung fire again. A woman's", "audio_sec": 2.76, "infer_sec": 0.406636} +{"id": "121-127105-0009", "text": "She has been dead these twenty years.", "audio_sec": 2.29, "infer_sec": 0.344526} +{"id": "121-127105-0010", "text": "She sent me the pages in question before she died.", "audio_sec": 2.85, "infer_sec": 0.435251} +{"id": "121-127105-0011", "text": "She was the most agreeable woman I've ever known in her position. She would have been worthy of any whatever.", "audio_sec": 5.78, "infer_sec": 0.822664} +{"id": "121-127105-0012", "text": "It wasn't simply that she said so, but that I knew she hadn't. I was sure I could see.", "audio_sec": 4.83, "infer_sec": 0.675018} +{"id": "121-127105-0013", "text": "You'll easily judge why when you hear. Because the thing had been such a scare? He continued to fix me.", "audio_sec": 5.895, "infer_sec": 0.8003} +{"id": "121-127105-0014", "text": "You are acute.", "audio_sec": 2.255, "infer_sec": 0.339261} +{"id": "121-127105-0015", "text": "He quitted the fire and dropped back into his chair.", "audio_sec": 2.96, "infer_sec": 0.45205} +{"id": "121-127105-0016", "text": "probably not till the second post.", "audio_sec": 2.03, "infer_sec": 0.429641} +{"id": "121-127105-0017", "text": "It was almost the tone of hope. Everybody will stay.", "audio_sec": 2.695, "infer_sec": 0.397059} +{"id": "121-127105-0018", "text": "cried the ladies, whose departure had been fixed.", "audio_sec": 2.77, "infer_sec": 0.423033} +{"id": "121-127105-0019", "text": "Mrs Griffin, however, expressed the need for a little more light, and", "audio_sec": 3.525, "infer_sec": 0.556611} +{"id": "121-127105-0020", "text": "Who was it she was in love with? The story will tell, I took upon myself to reply. Oh, I can't wait for the story The story won't tell, said Douglas not in any literal vulgar way. More's the pity, then?", "audio_sec": 14.355, "infer_sec": 1.834481} +{"id": "121-127105-0021", "text": "Won't you tell Douglas?", "audio_sec": 2.0, "infer_sec": 0.423291} +{"id": "121-127105-0022", "text": "Well, if I don't know who she was in love with, I know who he was,", "audio_sec": 5.075, "infer_sec": 0.706532} +{"id": "121-127105-0023", "text": "let me say here distinctly to have done with it, that this narrative, from an exact transcript of my own made much later, is what I shall presently give.", "audio_sec": 10.91, "infer_sec": 1.408991} +{"id": "121-127105-0024", "text": "poor Douglas, before his death, when it was in sight, committed to me the manuscript that reached him on the third of these days, and that, on the same spot, with immense effect, he began to read to our hushed little circle on the night of the fourth.", "audio_sec": 14.45, "infer_sec": 1.846621} +{"id": "121-127105-0025", "text": "The departing ladies who had said they would stay didn't, of course, thank Heaven stay they departed, in consequence of arrangements made in a rage of curiosity, as they professed, produced by the touches with which he had already worked us up.", "audio_sec": 16.065, "infer_sec": 2.066121} +{"id": "121-127105-0026", "text": "The first of these touches conveyed that the written statement took up the tale at a point after it had, in a manner, begun.", "audio_sec": 7.53, "infer_sec": 1.053272} +{"id": "121-127105-0027", "text": "he had for his own town residence a big house filled with the spoils of travel and the trophies of the chase. But it was to his country home, an old family place in Essex, that he wished her immediately to proceed,", "audio_sec": 13.87, "infer_sec": 1.790226} +{"id": "121-127105-0028", "text": "The awkward thing was that they had practically no other relations, and that his own affairs took up all his time.", "audio_sec": 6.75, "infer_sec": 0.948765} +{"id": "121-127105-0029", "text": "there were plenty of people to help, but of course the young lady who should go down as governess would be in supreme authority.", "audio_sec": 7.31, "infer_sec": 1.016966} +{"id": "121-127105-0030", "text": "I don't anticipate.", "audio_sec": 2.175, "infer_sec": 0.327225} +{"id": "121-127105-0031", "text": "She was young, untried, nervous. It was a vision of serious duties and little company of really great loneliness.", "audio_sec": 10.765, "infer_sec": 1.390265} +{"id": "121-127105-0032", "text": "Yes, but that's just the beauty of her passion.", "audio_sec": 3.17, "infer_sec": 0.442594} +{"id": "121-127105-0033", "text": "It was the beauty of it.", "audio_sec": 2.355, "infer_sec": 0.354306} +{"id": "121-127105-0034", "text": "It sounded dull, but sounded strange, and all the more so because of his main condition, which was", "audio_sec": 7.41, "infer_sec": 1.030878} +{"id": "121-127105-0035", "text": "She promised to do this, and she mentioned to me that when for a moment disburdened, delighted, he held her hand, thanking her for the sacrifice. She already felt rewarded,", "audio_sec": 14.15, "infer_sec": 1.851106} +{"id": "121-127105-0036", "text": "But was that all her reward? one of the ladies asked.", "audio_sec": 4.15, "infer_sec": 0.731336} +{"id": "1221-135766-0000", "text": "How strange it seemed to the sad woman, as she watched the growth and the beauty that became every day more brilliant, and the intelligence that threw its quivering sunshine over the tiny features of this child", "audio_sec": 12.435, "infer_sec": 1.622233} +{"id": "1221-135766-0001", "text": "God, as a direct consequence of the sin which man thus punished, had given her a lovely child, whose place was on that same dishonored bosom to connect her parent for ever with the race and descent of mortals, and to be finally a blest soul in heaven.", "audio_sec": 16.715, "infer_sec": 2.024927} +{"id": "1221-135766-0002", "text": "Yet these thoughts affected Hester Prynne less with hope than apprehension.", "audio_sec": 4.825, "infer_sec": 0.674319} +{"id": "1221-135766-0003", "text": "The child had a native grace which does not invariably coexist with faultless beauty. Its attire, however simple, always impressed the beholder as if it were the very garb that precisely became it best.", "audio_sec": 13.72, "infer_sec": 1.770865} +{"id": "1221-135766-0004", "text": "This outward mutability indicated, and did not more than fairly express, the various properties of her inner life", "audio_sec": 7.44, "infer_sec": 1.035051} +{"id": "1221-135766-0005", "text": "Hester could only account for the child's character, and even then most vaguely and imperfectly, by recalling what she herself had been during that momentous period, while Pearl was imbibing her soul from the spiritual world, and her bodily frame from its material of earth", "audio_sec": 16.645, "infer_sec": 2.016447} +{"id": "1221-135766-0006", "text": "They were now illuminated by the morning radiance of a young child's disposition, but, later in the day of earthly existence, might be prolific of the storm and whirlwind.", "audio_sec": 11.415, "infer_sec": 1.508778} +{"id": "1221-135766-0007", "text": "Hester Prynne, nevertheless, the loving mother of this one child, ran little risk of erring on the side of undue severity", "audio_sec": 8.795, "infer_sec": 1.170538} +{"id": "1221-135766-0008", "text": "Mindful, however, of her own errors and misfortunes, she early sought to impose a tender but strict control over the infant immortality that was committed to her charge,", "audio_sec": 10.78, "infer_sec": 1.392202} +{"id": "1221-135766-0009", "text": "As to any other kind of discipline, whether addressed to her mind or heart, little Pearl might or might not be within its reach in accordance with the caprice that ruled the moment.", "audio_sec": 10.19, "infer_sec": 1.451974} +{"id": "1221-135766-0010", "text": "It was a look so intelligent, yet inexplicable, perverse, sometimes so malicious, but generally accompanied by a wild flow of spirits, that Hester could not help questioning at such moments whether Pearl was a human child.", "audio_sec": 15.05, "infer_sec": 1.935582} +{"id": "1221-135766-0011", "text": "Beholding it, Hester was constrained to rush towards the child, to pursue the little elf in the flight which she invariably began to snatch her to her bosom with a close pressure and earnest kisses, not so much from overflowing love as to assure herself that Pearl was flesh and blood, and not utterly delusive.", "audio_sec": 21.345, "infer_sec": 2.947678} +{"id": "1221-135766-0012", "text": "Brooding over all these matters, the mother felt like one who has evoked a spirit, but, by some irregularity in the process of conjuration, has failed to win the master word that should control this new and incomprehensible intelligence.", "audio_sec": 16.22, "infer_sec": 1.935144} +{"id": "1221-135766-0013", "text": "Pearl was a born outcast of the infantile world.", "audio_sec": 3.645, "infer_sec": 0.57556} +{"id": "1221-135766-0014", "text": "Pearl saw and gazed intently, but never sought to make acquaintance.", "audio_sec": 4.75, "infer_sec": 0.663837} +{"id": "1221-135766-0015", "text": "If spoken to, she would not speak again.", "audio_sec": 2.63, "infer_sec": 0.387483} +{"id": "1221-135767-0000", "text": "Hester Prynne went one day to the mansion of Governor Bellingham with a pair of gloves which she had fringed and embroidered to his order, and which were to be worn on some great occasion of state for, though the chances of a popular election had caused this former ruler to descend a step or two from the highest rank, he still held an honorable and influential place among the colonial magistracy.", "audio_sec": 24.85, "infer_sec": 3.368872} +{"id": "1221-135767-0001", "text": "Another and far more important reason than the delivery of a pair of embroidered gloves impelled Hester at this time to seek an interview with a personage of so much power and activity in the affairs of the settlement.", "audio_sec": 13.43, "infer_sec": 1.733434} +{"id": "1221-135767-0002", "text": "At that epoch of pristine simplicity, however, matters of even slighter public interest, and of far less intrinsic weight than the welfare of Hester and her child, were strangely mixed up with the deliberations of legislators and acts of state.", "audio_sec": 16.12, "infer_sec": 1.923213} +{"id": "1221-135767-0003", "text": "The period was hardly, if at all, earlier than that of our story, when a dispute concerning the right of property in a pig not only caused a fierce and bitter contest in the legislative body of the colony, but resulted in an important modification of the framework itself of the legislature.", "audio_sec": 18.63, "infer_sec": 2.276469} +{"id": "1221-135767-0004", "text": "We have spoken of Pearl's rich and luxuriant beauty a beauty that shone with deep and vivid tints a bright complexion, eyes possessing intensity both of depth and glow, and hair already of a deep glossy brown, and which, in after years, would be nearly akin to black.", "audio_sec": 19.09, "infer_sec": 2.332678} +{"id": "1221-135767-0005", "text": "It was the scarlet letter in another form the scarlet letter endowed with life.", "audio_sec": 5.865, "infer_sec": 0.831711} +{"id": "1221-135767-0006", "text": "The mother herself, as if the red ignominy were so deeply scorched into her brain that all her conceptions assumed its form, had carefully wrought out the similitude, lavishing many hours of morbid ingenuity to create an analogy between the object of her affection and the emblem of her guilt and torture.", "audio_sec": 20.56, "infer_sec": 2.839272} +{"id": "1221-135767-0007", "text": "But, in truth, Pearl was the one as well as the other, and only in consequence of that identity had Hester contrived so perfectly to represent the scarlet letter in her appearance.", "audio_sec": 12.77, "infer_sec": 1.665936} +{"id": "1221-135767-0008", "text": "Come, therefore, and let us fling mud at them.", "audio_sec": 3.095, "infer_sec": 0.432123} +{"id": "1221-135767-0009", "text": "But Pearl, who was a dauntless child, after frowning, stamping her foot, and shaking her little hand with a variety of threatening gestures, suddenly made a rush at the knot of her enemies, and put them all to flight.", "audio_sec": 13.34, "infer_sec": 1.721818} +{"id": "1221-135767-0010", "text": "She screamed and shouted, too, with a terrific volume of sound, which, doubtless, caused the hearts of the fugitives to quake within them.", "audio_sec": 8.2, "infer_sec": 1.149864} +{"id": "1221-135767-0011", "text": "It was further decorated with strange and seemingly cabalistic figures and diagrams, suitable to the quaint taste of the age which had been drawn in the stucco, when newly laid on, and had now grown hard and durable for the admiration of after times.", "audio_sec": 16.51, "infer_sec": 1.969743} +{"id": "1221-135767-0012", "text": "They approached the door, which was of an arched form, and flanked on each side by a narrow tower or projection of the edifice, in both of which were latticed windows, the wooden shutters to close over them at need.", "audio_sec": 13.885, "infer_sec": 1.816439} +{"id": "1221-135767-0013", "text": "Lifting the iron hammer that hung at the portal, Hester Prynne gave a summons which was answered by one of the Governor's bond servants, a free born Englishman, but now a seven years' slave.", "audio_sec": 11.985, "infer_sec": 1.643306} +{"id": "1221-135767-0014", "text": "yea, his honourable worship is within, but he hath a godly minister or two with him, and likewise a leech.", "audio_sec": 7.07, "infer_sec": 0.983577} +{"id": "1221-135767-0015", "text": "ye may not see his worship now.", "audio_sec": 2.85, "infer_sec": 0.435251} +{"id": "1221-135767-0016", "text": "With many variations, suggested by the nature of his building materials, diversity of climate, and a different mode of social life, Governor Bellingham had planned his new habitation after the residences of gentlemen of fairest state in his native land.", "audio_sec": 15.255, "infer_sec": 1.961947} +{"id": "1221-135767-0017", "text": "On the table, in token that the sentiment of old English hospitality had not been left behind, stood a large pewter tankard, at the bottom of which, had Hester or Pearl peeped into it, they might have seen the frothy remnant of a recent draught of ale.", "audio_sec": 16.72, "infer_sec": 2.025533} +{"id": "1221-135767-0018", "text": "Little Pearl, who was as greatly pleased with the gleaming armour as she had been with the glittering frontispiece of the house, spent some time looking into the polished mirror of the breastplate.", "audio_sec": 11.16, "infer_sec": 1.475074} +{"id": "1221-135767-0019", "text": "Mother, cried she, I see you here. Look look", "audio_sec": 3.78, "infer_sec": 0.549663} +{"id": "1221-135767-0020", "text": "In truth, she seemed absolutely hidden behind it.", "audio_sec": 3.345, "infer_sec": 0.485709} +{"id": "1221-135767-0021", "text": "Pearl accordingly ran to the bow window at the further end of the hall, and looked along the vista of a garden walk, carpeted with closely shaven grass and bordered with some rude and immature attempt at shrubbery.", "audio_sec": 12.72, "infer_sec": 1.659413} +{"id": "1221-135767-0022", "text": "but the proprietor appeared already to have relinquished as hopeless the effort to perpetuate, on this side of the Atlantic, in a hard soil, and amid the close struggle for subsistence, the native English taste for ornamental gardening.", "audio_sec": 14.395, "infer_sec": 1.839593} +{"id": "1221-135767-0023", "text": "There were a few rose bushes, however, and a number of apple trees, probably the descendants of those planted by the Reverend mister Blackstone, the first settler of the peninsula, that half mythological personage who rides through our early annals seated on the back of a bull.", "audio_sec": 16.27, "infer_sec": 1.941109} +{"id": "1221-135767-0024", "text": "Pearl, seeing the rose bushes, began to cry for a red rose and would not be pacified.", "audio_sec": 5.85, "infer_sec": 0.829584} +{"id": "1284-1180-0000", "text": "He wore blue silk stockings, blue knee pants with gold buckles, a blue ruffled waist, and a jacket of bright blue braided with gold.", "audio_sec": 8.12, "infer_sec": 1.138646} +{"id": "1284-1180-0001", "text": "His hat had a peaked crown and a flat brim, and around the brim was a row of tiny golden bells that tinkled when he moved.", "audio_sec": 7.755, "infer_sec": 1.073448} +{"id": "1284-1180-0002", "text": "Instead of shoes, the old man wore boots with turnover tops, and his blue coat had wide cuffs of gold braid.", "audio_sec": 7.68, "infer_sec": 1.074253} +{"id": "1284-1180-0003", "text": "For a long time he had wished to explore the beautiful land of Oz in which they lived,", "audio_sec": 4.835, "infer_sec": 0.67312} +{"id": "1284-1180-0004", "text": "When they were outside, Ung simply latched the door and started up the path.", "audio_sec": 4.285, "infer_sec": 0.632848} +{"id": "1284-1180-0005", "text": "No one would disturb their little house, even if any one came so far into the thick forest while they were gone.", "audio_sec": 6.55, "infer_sec": 0.914648} +{"id": "1284-1180-0006", "text": "At the foot of the mountain that separated the country of the Munchkins from the country of the Gillikins the path divided.", "audio_sec": 6.865, "infer_sec": 0.955057} +{"id": "1284-1180-0007", "text": "He knew it would take them to the house of the crooked magician, whom he had never seen, but who was their nearest neighbor.", "audio_sec": 6.265, "infer_sec": 0.850531} +{"id": "1284-1180-0008", "text": "All the morning they trudged up the mountain path, and at noon Unk and Ojo sat on a fallen tree trunk and ate the last of the bread which the old Munchkin had placed in his pocket.", "audio_sec": 10.49, "infer_sec": 1.494721} +{"id": "1284-1180-0009", "text": "Then they started on again, and two hours later came in sight of the house of doctor Pipt.", "audio_sec": 6.285, "infer_sec": 0.853247} +{"id": "1284-1180-0010", "text": "Unk knocked at the door of the house and a chubby, pleasant faced woman, dressed all in blue, opened it, and greeted the visitors with a smile.", "audio_sec": 8.635, "infer_sec": 1.210863} +{"id": "1284-1180-0011", "text": "I am, my dear, and all strangers are welcome to my home.", "audio_sec": 4.275, "infer_sec": 0.631371} +{"id": "1284-1180-0012", "text": "We have come from a far lonelier place than this. A lonelier place?", "audio_sec": 4.88, "infer_sec": 0.679385} +{"id": "1284-1180-0013", "text": "and you must be Ojo the Unlucky, she added.", "audio_sec": 3.705, "infer_sec": 0.538757} +{"id": "1284-1180-0014", "text": "Ojo had never eaten such a fine meal in all his life.", "audio_sec": 3.665, "infer_sec": 0.578718} +{"id": "1284-1180-0015", "text": "We are travelling, replied Ojo, and we stopped at your house just to rest and refresh ourselves.", "audio_sec": 5.835, "infer_sec": 0.827457} +{"id": "1284-1180-0016", "text": "The woman seemed thoughtful.", "audio_sec": 2.13, "infer_sec": 0.450805} +{"id": "1284-1180-0017", "text": "At one end stood a great fireplace, in which a blue log was blazing with a blue flame, and over the fire hung four kettles in a row, all bubbling and steaming at a great rate.", "audio_sec": 10.68, "infer_sec": 1.379288} +{"id": "1284-1180-0018", "text": "It takes me several years to make this magic powder, but at this moment I am pleased to say it is nearly done. You see, I am making it for my good wife Margolotte, who wants to use some of it for a purpose of her own.", "audio_sec": 12.005, "infer_sec": 1.646048} +{"id": "1284-1180-0019", "text": "You must know, said Margolot, when they were all seated together on the broad window seat, that my husband foolishly gave away all the powder of life he first made to old Momby the Witch, who used to live in the country of the Gillikins to the north of here.", "audio_sec": 15.025, "infer_sec": 1.920103} +{"id": "1284-1180-0020", "text": "the first lot we tested on our glass cat, which not only began to live, but has lived ever since.", "audio_sec": 5.87, "infer_sec": 0.83242} +{"id": "1284-1180-0021", "text": "I think the next glass cat the magician makes will have neither brains nor heart, for then it will not object to catching mice, and may prove of some use to us.", "audio_sec": 9.84, "infer_sec": 1.334787} +{"id": "1284-1180-0022", "text": "I'm afraid I don't know much about the Land of Oz.", "audio_sec": 2.885, "infer_sec": 0.440596} +{"id": "1284-1180-0023", "text": "You see I've lived all my life with Unc'Nunkey, the Silent One, and there was no one to tell me anything.", "audio_sec": 5.61, "infer_sec": 0.798468} +{"id": "1284-1180-0024", "text": "That is one reason you are Ojo the unlucky, said the woman, in a sympathetic tone.", "audio_sec": 5.26, "infer_sec": 0.784166} +{"id": "1284-1180-0025", "text": "I think I must show you my patchwork girl, said Margolot, laughing at the boy's astonishment, for she is rather difficult to explain.", "audio_sec": 8.705, "infer_sec": 1.15856} +{"id": "1284-1180-0026", "text": "But first I will tell you that for many years I have longed for a servant to help me with the housework and to cook the meals and wash the dishes.", "audio_sec": 8.29, "infer_sec": 1.162485} +{"id": "1284-1180-0027", "text": "Yet that task was not so easy as you may suppose,", "audio_sec": 3.27, "infer_sec": 0.474819} +{"id": "1284-1180-0028", "text": "a bed quilt, made of patches of different kinds and colours of cloth, all neatly sewed together.", "audio_sec": 6.045, "infer_sec": 0.820664} +{"id": "1284-1180-0029", "text": "Sometimes it is called a crazy quilt, because the patches and colours are so mixed up,", "audio_sec": 5.335, "infer_sec": 0.795347} +{"id": "1284-1180-0030", "text": "When I found it, I said to myself that it would do nicely for my servant girl, for when she was brought to life she would not be proud nor haughty, as the glass cat is for such a dreadful mixture of colours would discourage her from trying to be as dignified as the blue munchkins are.", "audio_sec": 16.22, "infer_sec": 1.935144} +{"id": "1284-1180-0031", "text": "At the Emerald City, where our Princess Ozma lives, green is the popular colour.", "audio_sec": 4.825, "infer_sec": 0.674319} +{"id": "1284-1180-0032", "text": "I will show you what a good job I did. And she went to a tall cupboard and threw open the doors.", "audio_sec": 5.78, "infer_sec": 0.822664} +{"id": "1284-1181-0000", "text": "Ojo examined this curious contrivance with wonder.", "audio_sec": 3.965, "infer_sec": 0.576564} +{"id": "1284-1181-0001", "text": "Margolot had first made the girl's form from the patchwork quilt, and then she had dressed it with a patchwork skirt and an apron with pockets in it, using the same gay material throughout.", "audio_sec": 11.43, "infer_sec": 1.510761} +{"id": "1284-1181-0002", "text": "The head of the patchwork girl was the most curious part of her.", "audio_sec": 3.835, "infer_sec": 0.55766} +{"id": "1284-1181-0003", "text": "The hair was of brown yarn, and hung down on her neck in several neat braids,", "audio_sec": 4.505, "infer_sec": 0.66534} +{"id": "1284-1181-0004", "text": "Gold is the most common metal in the land of Oz, and is used for many purposes because it is soft and pliable.", "audio_sec": 7.15, "infer_sec": 0.994707} +{"id": "1284-1181-0005", "text": "No, I forgot all about the brains, exclaimed the woman.", "audio_sec": 3.855, "infer_sec": 0.560569} +{"id": "1284-1181-0006", "text": "Well, that may be true, agreed Margolot but on the contrary, a servant with too much brains is sure to become independent and high and mighty, and feel above her work.", "audio_sec": 11.405, "infer_sec": 1.507457} +{"id": "1284-1181-0007", "text": "S poured into the dish a quantity from each of these bottles.", "audio_sec": 4.04, "infer_sec": 0.711951} +{"id": "1284-1181-0008", "text": "I think that will do, she continued, for the other qualities are not needed in a servant.", "audio_sec": 6.08, "infer_sec": 0.825416} +{"id": "1284-1181-0009", "text": "She ran to her husband's side at once, and helped him lift the four kettles from the fire.", "audio_sec": 5.245, "infer_sec": 0.78193} +{"id": "1284-1181-0010", "text": "Their contents had all boiled away, leaving in the bottom of each kettle a few grains of fine white powder.", "audio_sec": 6.435, "infer_sec": 0.898589} +{"id": "1284-1181-0011", "text": "Very carefully the magician removed this powder, placing it all together in a golden dish, where he mixed it with a golden spoon.", "audio_sec": 7.75, "infer_sec": 1.084044} +{"id": "1284-1181-0012", "text": "No one saw him do this, for all were looking at the powder of life but soon the woman remembered what she had been doing, and came back to the cupboard.", "audio_sec": 8.51, "infer_sec": 1.193335} +{"id": "1284-1181-0013", "text": "Ojo became a bit uneasy at this, for he had already put quite a lot of the cleverness powder in the dish, but he dared not interfere, and so he comforted himself with the thought that one cannot have too much cleverness.", "audio_sec": 12.66, "infer_sec": 1.651586} +{"id": "1284-1181-0014", "text": "He selected a small gold bottle, with a pepper box top, so that the powder might be sprinkled on any object through the small holes.", "audio_sec": 7.92, "infer_sec": 1.096287} +{"id": "1284-1181-0015", "text": "Most people talk too much, so it is a relief to find one who talks too little.", "audio_sec": 5.115, "infer_sec": 0.712101} +{"id": "1284-1181-0016", "text": "I am not allowed to perform magic, except for my own amusement, he told his visitors, as he lighted a pipe, with a crooked stem, and began to smoke.", "audio_sec": 9.515, "infer_sec": 1.266364} +{"id": "1284-1181-0017", "text": "The Wizard of Oz, who used to be a humbug and knew no magic at all, has been taking lessons of Glinda, and I'm told he is getting to be a pretty good Wizard. But he is merely the assistant of the Gorceress.", "audio_sec": 11.775, "infer_sec": 1.614512} +{"id": "1284-1181-0018", "text": "It truly is, asserted the magician.", "audio_sec": 3.16, "infer_sec": 0.441198} +{"id": "1284-1181-0019", "text": "I now use them as ornamental statuary in my garden.", "audio_sec": 3.2, "infer_sec": 0.446783} +{"id": "1284-1181-0020", "text": "Dear me, what a chatterbox you're getting to be, Unk remarked the magician, who was pleased with the compliment.", "audio_sec": 6.73, "infer_sec": 0.945954} +{"id": "1284-1181-0021", "text": "asked the voice, in scornful accents.", "audio_sec": 2.7, "infer_sec": 0.397796} +{"id": "1284-134647-0000", "text": "The grateful applause of the clergy has consecrated the memory of a prince who indulged their passions and promoted their interest.", "audio_sec": 8.53, "infer_sec": 1.196139} +{"id": "1284-134647-0001", "text": "The Edict of Milan, the great charter of toleration, had confirmed to each individual of the Roman world the privilege of choosing and professing his own religion.", "audio_sec": 10.275, "infer_sec": 1.464085} +{"id": "1284-134647-0002", "text": "but this inestimable privilege was soon violated with the knowledge of truth, the emperor imbibed the maxims of persecution, and the sects which dissented from the Catholic Church were afflicted and oppressed by the triumph of Christianity.", "audio_sec": 15.11, "infer_sec": 1.943299} +{"id": "1284-134647-0003", "text": "Constantine easily believed that the heretics, who presumed to dispute his opinions, or to oppose his commands, were guilty of the most absurd and criminal obstinacy, and that a seasonable application of moderate severities might save those unhappy men from the danger of an everlasting condemnation.", "audio_sec": 20.145, "infer_sec": 2.781962} +{"id": "1284-134647-0004", "text": "Some of the penal regulations were copied from the Edicts of Diocletian, and this method of conversion was applauded by the same bishops who had felt the hand of oppression and pleaded for the rights of humanity.", "audio_sec": 12.835, "infer_sec": 1.674416} +{"id": "1284-134647-0005", "text": "They asserted with confidence, and almost with exultation, that the apostolical succession was interrupted that all the bishops of Europe and Asia were infected by the contagion of guilt and schism and that the prerogatives of the Catholic Church were confined to the chosen portion of the African believers, who alone had preserved inviolate the integrity of their faith and discipline.", "audio_sec": 23.335, "infer_sec": 3.222491} +{"id": "1284-134647-0006", "text": "Bishops, virgins, and even spotless infants were subjected to the disgrace of a public penance, before they could be admitted to the communion of the Donatists.", "audio_sec": 10.155, "infer_sec": 1.377516} +{"id": "1284-134647-0007", "text": "Prescribed by the civil and ecclesiastical powers of the empire, the Donatists still maintained in some provinces, particularly in Numidia, their superior numbers, and four hundred bishops acknowledged the jurisdiction of their primate.", "audio_sec": 14.17, "infer_sec": 1.853723} +{"id": "1320-122612-0000", "text": "Since the period of our tale the active spirit of the country has surrounded it with a belt of rich and thriving settlements, though none but the hunter or the savage is ever known even now to penetrate its wild recesses.", "audio_sec": 13.48, "infer_sec": 1.739888} +{"id": "1320-122612-0001", "text": "The dews were suffered to exhale, and the sun had dispersed the mists, and was shedding a strong and clear light in the forest, when the travellers resumed their journey.", "audio_sec": 9.52, "infer_sec": 1.26703} +{"id": "1320-122612-0002", "text": "After proceeding a few miles, the progress of Hawkeye, who led the advance, became more deliberate and watchful.", "audio_sec": 7.46, "infer_sec": 1.04348} +{"id": "1320-122612-0003", "text": "He often stopped to examine the trees nor did he cross a rivulet without attentively considering the quantity, the velocity, and the colour of its waters.", "audio_sec": 9.865, "infer_sec": 1.338178} +{"id": "1320-122612-0004", "text": "Distrusting his own judgment, his appeals to the opinion of Chingachkuk were frequent and earnest.", "audio_sec": 6.425, "infer_sec": 0.897193} +{"id": "1320-122612-0005", "text": "yet here are we, within a short range of the Scaroons, and not a sign of a trail have we crossed.", "audio_sec": 5.915, "infer_sec": 0.803016} +{"id": "1320-122612-0006", "text": "Let us retrace our steps, and examine as we go, with keener eyes,", "audio_sec": 4.845, "infer_sec": 0.674512} +{"id": "1320-122612-0007", "text": "Chingachgook had caught the look, and motioning with his hand, he bade him speak.", "audio_sec": 5.54, "infer_sec": 0.788505} +{"id": "1320-122612-0008", "text": "The eyes of the whole party followed the unexpected movement, and read their success in the air of triumph that the youth assumed.", "audio_sec": 7.875, "infer_sec": 1.090058} +{"id": "1320-122612-0009", "text": "It would have been more wonderful had he spoken without a bidding", "audio_sec": 3.88, "infer_sec": 0.564204} +{"id": "1320-122612-0010", "text": "See, said Uncas, pointing north and south, at the evident marks of the broad trail on either side of him, the dark hair has gone toward the forest.", "audio_sec": 10.195, "infer_sec": 1.452686} +{"id": "1320-122612-0011", "text": "If a rock, or a rivulet, or a bit of earth harder than common, severed the links of the clew they followed, the true eye of the scout recovered them at a distance, and seldom rendered the delay of a single moment necessary.", "audio_sec": 13.695, "infer_sec": 1.767638} +{"id": "1320-122612-0012", "text": "Extinguished brands were lying around a spring the offals of a deer were scattered about the place, and the trees bore evident marks of having been browsed by the horses.", "audio_sec": 10.49, "infer_sec": 1.494721} +{"id": "1320-122612-0013", "text": "A circle of a few hundred feet in circumference was drawn, and each of the party took a segment for his portion.", "audio_sec": 6.55, "infer_sec": 0.914648} +{"id": "1320-122612-0014", "text": "The examination, however, resulted in no discovery.", "audio_sec": 3.515, "infer_sec": 0.555032} +{"id": "1320-122612-0015", "text": "the whole party crowded to the spot where Uncas pointed out the impression of a moccasin in the moist alluvian.", "audio_sec": 6.385, "infer_sec": 0.891607} +{"id": "1320-122612-0016", "text": "Run back, Uncas, and bring me the size of the singer's foot.", "audio_sec": 3.49, "infer_sec": 0.551085} +{"id": "1320-122617-0000", "text": "Notwithstanding the high resolution of Hawkeye, he fully comprehended all the difficulties and danger he was about to incur.", "audio_sec": 7.835, "infer_sec": 1.084521} +{"id": "1320-122617-0001", "text": "In his return to the camp his acute and practised intellects were intently engaged in devising means to counteract a watchfulness and suspicion on the part of his enemies that he knew were in no degree inferior to his own.", "audio_sec": 14.055, "infer_sec": 1.838678} +{"id": "1320-122617-0002", "text": "In other words, while he had implicit faith in the ability of Balaam's ass to speak, he was somewhat sceptical on the subject of a bear's singing and yet he had been assured of the latter on the testimony of his own exquisite organs.", "audio_sec": 13.585, "infer_sec": 1.75344} +{"id": "1320-122617-0003", "text": "There was something in his air and manner that betrayed to the scout the utter confusion of the state of his mind.", "audio_sec": 6.285, "infer_sec": 0.877643} +{"id": "1320-122617-0004", "text": "The ingenious Hawkeye, who recalled the hasty manner in which the other had abandoned his post at the bedside of the sick woman, was not without his suspicions concerning the subject of so much solemn deliberation.", "audio_sec": 12.26, "infer_sec": 1.681012} +{"id": "1320-122617-0005", "text": "The Bear shook his shaggy sides, and then a well known voice replied", "audio_sec": 4.4, "infer_sec": 0.649833} +{"id": "1320-122617-0006", "text": "Can these things be? returned David, breathing more freely, as the truth began to dawn upon him.", "audio_sec": 5.655, "infer_sec": 0.804873} +{"id": "1320-122617-0007", "text": "Come, come, returned Hawkeye, encasing his honest countenance, the better to assure the wavering confidence of his companion, you may see a skin which, if it be not as white as one of the gentle ones, has no tinge of red to it that the winds of the heaven and the sun have not bestowed. Now let us to business.", "audio_sec": 18.525, "infer_sec": 2.263639} diff --git a/deploy/parakeet-stt/edge-stt/results/m1/hyps_B.jsonl b/deploy/parakeet-stt/edge-stt/results/m1/hyps_B.jsonl new file mode 100644 index 0000000..43c7202 --- /dev/null +++ b/deploy/parakeet-stt/edge-stt/results/m1/hyps_B.jsonl @@ -0,0 +1,100 @@ +{"id": "1089-134686-0000", "text": "HE HOPED THERE WOULD BE STEW FOR DINNER TURNIPS AND CARROTS AND BRUISED POTATOES AND FAT MUTTON PIECES TO BE LADLED OUT IN THICK PEPPERED FLOWER FATTENED SAUCE", "audio_sec": 10.435, "infer_sec": 34.838898} +{"id": "1089-134686-0001", "text": "STUFF IT INTO YOU HIS BELLY COUNSELLED HIM", "audio_sec": 3.275, "infer_sec": 10.934105} +{"id": "1089-134686-0002", "text": "AFTER EARLY NIGHTFALL THE YELLOW LAMPS WOULD LIGHT UP HERE AND THERE THE SQUALID QUARTER OF THE BROTHELS", "audio_sec": 6.625, "infer_sec": 22.11861} +{"id": "1089-134686-0003", "text": "HELLO BERTIE ANY GOOD IN YOUR MIND", "audio_sec": 2.68, "infer_sec": 8.947604} +{"id": "1089-134686-0004", "text": "NUMBER TEN FRESH NELLY IS WAITING ON YOU GOOD NIGHT HUSBAND", "audio_sec": 5.215, "infer_sec": 17.411102} +{"id": "1089-134686-0005", "text": "THE MUSIC CAME NEARER AND HE RECALLED THE WORDS THE WORDS OF SHELLEY'S FRAGMENT UPON THE MOON WANDERING COMPANIONLESS PALE FOR WEARINESS", "audio_sec": 9.635, "infer_sec": 32.167971} +{"id": "1089-134686-0006", "text": "THE DULL LIGHT FELL MORE FAINTLY UPON THE PAGE WHEREON ANOTHER EQUATION BEGAN TO UNFOLD ITSELF SLOWLY AND TO SPREAD ABROAD ITS WIDENING TAIL", "audio_sec": 10.555, "infer_sec": 35.239537} +{"id": "1089-134686-0007", "text": "A COLD LUCID INDIFFERENCE REIGNED IN HIS SOUL", "audio_sec": 4.275, "infer_sec": 14.272764} +{"id": "1089-134686-0008", "text": "THE CHAOS IN WHICH HIS ARDOR EXTINGUISHED ITSELF WAS A COLD INDIFFERENT KNOWLEDGE OF HIMSELF", "audio_sec": 6.73, "infer_sec": 22.469169} +{"id": "1089-134686-0009", "text": "AT MOST BY AN ALMS GIVEN TO A BEGGAR WHOSE BLESSING HE FLED FROM HE MIGHT HOPE WEARILY TO WIN FOR HIMSELF SOME MEASURE OF ACTUAL GRACE", "audio_sec": 10.575, "infer_sec": 35.30631} +{"id": "1089-134686-0010", "text": "WELL NOW ENNIS I DECLARE YOU HAVE A HEAD AND SO HAS MY STICK", "audio_sec": 4.405, "infer_sec": 14.706789} +{"id": "1089-134686-0011", "text": "ON SATURDAY MORNINGS WHEN THE SODALITY MET IN THE CHAPEL TO RECITE THE LITTLE OFFICE HIS PLACE WAS A CUSHIONED KNEELING DESK AT THE RIGHT OF THE ALTAR FROM WHICH HE LED HIS WING OF BOYS THROUGH THE RESPONSES", "audio_sec": 12.445, "infer_sec": 41.549601} +{"id": "1089-134686-0012", "text": "HER EYES SEEMED TO REGARD HIM WITH MILD PITY HER HOLINESS A STRANGE LIGHT GLOWING FAINTLY UPON HER FRAIL FLESH DID NOT HUMILIATE THE SINNER WHO APPROACHED HER", "audio_sec": 11.64, "infer_sec": 38.861981} +{"id": "1089-134686-0013", "text": "IF EVER HE WAS IMPELLED TO CAST SIN FROM HIM AND TO REPENT THE IMPULSE THAT MOVED HIM WAS THE WISH TO BE HER KNIGHT", "audio_sec": 7.915, "infer_sec": 26.425479} +{"id": "1089-134686-0014", "text": "HE TRIED TO THINK HOW IT COULD BE", "audio_sec": 2.225, "infer_sec": 7.428514} +{"id": "1089-134686-0015", "text": "BUT THE DUSK DEEPENING IN THE SCHOOLROOM COVERED OVER HIS THOUGHTS THE BELL RANG", "audio_sec": 5.815, "infer_sec": 19.414297} +{"id": "1089-134686-0016", "text": "THEN YOU CAN ASK HIM QUESTIONS ON THE CATECHISM DADALUS", "audio_sec": 3.54, "infer_sec": 11.81885} +{"id": "1089-134686-0017", "text": "STEPHEN LEANING BACK AND DRAWING IDLY ON HIS SCRIBBLER LISTENED TO THE TALK ABOUT HIM WHICH HERON CHECKED FROM TIME TO TIME BY SAYING", "audio_sec": 8.87, "infer_sec": 29.613898} +{"id": "1089-134686-0018", "text": "IT WAS STRANGE TOO THAT HE FOUND AN ARID PLEASURE IN FOLLOWING UP TO THE END THE RIGID LINES OF THE DOCTRINES OF THE CHURCH AND PENETRATING INTO OBSCURE SILENCES ONLY TO HEAR AND FEEL THE MORE DEEPLY HIS OWN CONDEMNATION", "audio_sec": 15.72, "infer_sec": 52.483706} +{"id": "1089-134686-0019", "text": "THE SENTENCE OF SAINT JAMES WHICH SAYS THAT HE WHO OFFENDS AGAINST ONE COMMANDMENT BECOMES GUILTY OF ALL HAD SEEMED TO HIM FIRST A SWOLLEN PHRASE UNTIL HE HAD BEGUN TO GROPE IN THE DARKNESS OF HIS OWN STATE", "audio_sec": 13.895, "infer_sec": 46.390655} +{"id": "1089-134686-0020", "text": "IF A MAN HAD STOLEN A POUND IN HIS YOUTH AND HAD USED THAT POUND TO AMASS A HUGE FORTUNE HOW MUCH WAS HE OBLIGED TO GIVE BACK THE POUND HE HAD STOLEN ONLY OR THE POUND TOGETHER WITH THE COMPOUND INTEREST ACCRUING UPON IT OR ALL HIS HUGE FORTUNE", "audio_sec": 16.79, "infer_sec": 56.05607} +{"id": "1089-134686-0021", "text": "IF A LAYMAN IN GIVING BAPTISM POUR THE WATER BEFORE SAYING THE WORDS IS THE CHILD BAPTIZED", "audio_sec": 6.55, "infer_sec": 21.868211} +{"id": "1089-134686-0022", "text": "HOW COMES IT THAT WHILE THE FIRST BEATITUDE PROMISES THE KINGDOM OF HEAVEN TO THE POOR OF HEART THE SECOND BEATITUDE PROMISES ALSO TO THE MEEK THAT THEY SHALL POSSESS THE LAND", "audio_sec": 11.175, "infer_sec": 37.309505} +{"id": "1089-134686-0023", "text": "WHY WAS THE SACRAMENT OF THE EUCHARIST INSTITUTED UNDER THE TWO SPECIES OF BREAD AND WINE IF JESUS CHRIST BE PRESENT BODY AND BLOOD SOUL AND DIVINITY IN THE BREAD ALONE AND IN THE WINE ALONE", "audio_sec": 13.275, "infer_sec": 44.320687} +{"id": "1089-134686-0024", "text": "IF THE WINE CHANGE INTO VINEGAR AND THE HOST CRUMBLE INTO CORRUPTION AFTER THEY HAVE BEEN CONSECRATED IS JESUS CHRIST STILL PRESENT UNDER THEIR SPECIES AS GOD AND AS MAN", "audio_sec": 11.655, "infer_sec": 38.912061} +{"id": "1089-134686-0025", "text": "A GENTLE KICK FROM THE TALL BOY IN THE BENCH BEHIND URGED STEPHEN TO ASK A DIFFICULT QUESTION", "audio_sec": 6.61, "infer_sec": 22.06853} +{"id": "1089-134686-0026", "text": "THE RECTOR DID NOT ASK FOR A CATECHISM TO HEAR THE LESSON FROM", "audio_sec": 4.01, "infer_sec": 13.388019} +{"id": "1089-134686-0027", "text": "HE CLASPED HIS HANDS ON THE DESK AND SAID", "audio_sec": 2.71, "infer_sec": 9.047764} +{"id": "1089-134686-0028", "text": "THE RETREAT WILL BEGIN ON WEDNESDAY AFTERNOON IN HONOR OF SAINT FRANCIS ZAIVER WHOSE FEAST DAY IS SATURDAY", "audio_sec": 7.83, "infer_sec": 26.141693} +{"id": "1089-134686-0029", "text": "ON FRIDAY CONFESSION WILL BE HEARD ALL THE AFTERNOON AFTER BEADS", "audio_sec": 4.67, "infer_sec": 15.591534} +{"id": "1089-134686-0030", "text": "BEWARE OF MAKING THAT MISTAKE", "audio_sec": 2.715, "infer_sec": 9.064457} +{"id": "1089-134686-0031", "text": "STEPHEN'S HEART BEGAN SLOWLY TO FOLD AND FADE WITH FEAR LIKE A WITHERING FLOWER", "audio_sec": 6.615, "infer_sec": 22.085224} +{"id": "1089-134686-0032", "text": "HE IS CALLED AS YOU KNOW THE APOSTLE OF THE INDIES", "audio_sec": 4.09, "infer_sec": 13.655112} +{"id": "1089-134686-0033", "text": "A GREAT SAINT SAINT FRANCIS ZAVIER", "audio_sec": 3.33, "infer_sec": 11.117732} +{"id": "1089-134686-0034", "text": "THE RECTOR PAUSED AND THEN SHAKING HIS CLASPED HANDS BEFORE HIM WENT ON", "audio_sec": 5.81, "infer_sec": 19.397604} +{"id": "1089-134686-0035", "text": "HE HAD THE FAITH IN HIM THAT MOVES MOUNTAINS", "audio_sec": 3.445, "infer_sec": 11.501677} +{"id": "1089-134686-0036", "text": "A GREAT SAINT SAINT FRANCIS ZAVIOR", "audio_sec": 3.25, "infer_sec": 10.850639} +{"id": "1089-134686-0037", "text": "IN THE SILENCE THEIR DARK FIRE KINDLED THE DUSK INTO A TAWNY GLOW", "audio_sec": 5.21, "infer_sec": 17.394409} +{"id": "1089-134691-0000", "text": "HE COULD WAIT NO LONGER", "audio_sec": 2.085, "infer_sec": 6.961102} +{"id": "1089-134691-0001", "text": "FOR A FULL HOUR HE HAD PACED UP AND DOWN WAITING BUT HE COULD WAIT NO LONGER", "audio_sec": 5.415, "infer_sec": 18.078834} +{"id": "1089-134691-0002", "text": "HE SET OFF ABRUPTLY FOR THE BULL WALKING RAPIDLY LEST HIS FATHER'S SHRILL WHISTLE MIGHT CALL HIM BACK AND IN A FEW MOMENTS HE HAD ROUNDED THE CURVE AT THE POLICE BARRACK AND WAS SAFE", "audio_sec": 11.6, "infer_sec": 38.728435} +{"id": "1089-134691-0003", "text": "THE UNIVERSITY", "audio_sec": 2.175, "infer_sec": 7.261581} +{"id": "1089-134691-0004", "text": "PRIDE AFTER SATISFACTION UPLIFTED HIM LIKE LONG SLOW WAVES", "audio_sec": 5.175, "infer_sec": 17.277556} +{"id": "1089-134691-0005", "text": "WHOSE FEET ARE AS THE FEET OF HEARTS AND UNDERNEATH THE EVERLASTING ARMS", "audio_sec": 5.36, "infer_sec": 17.895208} +{"id": "1089-134691-0006", "text": "THE PRIDE OF THAT DIM IMAGE BROUGHT BACK TO HIS MIND THE DIGNITY OF THE OFFICE HE HAD REFUSED", "audio_sec": 5.895, "infer_sec": 19.68139} +{"id": "1089-134691-0007", "text": "SOON THE WHOLE BRIDGE WAS TREMBLING AND RESOUNDING", "audio_sec": 3.44, "infer_sec": 11.484984} +{"id": "1089-134691-0008", "text": "THE UNCOUTH FACES PASSED HIM TWO BY TWO STAINED YELLOW OR RED OR LIVID BY THE SEA AND AS HE STROVE TO LOOK AT THEM WITH EASE AND INDIFFERENCE A FAINT STAIN OF PERSONAL SHAME AND COMMISERATION ROSE TO HIS OWN FACE", "audio_sec": 14.985, "infer_sec": 50.029792} +{"id": "1089-134691-0009", "text": "ANGRY WITH HIMSELF HE TRIED TO HIDE HIS FACE FROM THEIR EYES BY GAZING DOWN SIDEWAYS INTO THE SHALLOW SWIRLING WATER UNDER THE BRIDGE BUT HE STILL SAW A REFLECTION THEREIN OF THEIR TOP HEAVY SILK HATS AND HUMBLE TAPE LIKE COLLARS AND LOOSELY HANGING CLERICAL CLOTHES BROTHER HICKEY", "audio_sec": 20.055, "infer_sec": 66.956789} +{"id": "1089-134691-0010", "text": "BROTHER MICARDAL BROTHER KIOV", "audio_sec": 3.195, "infer_sec": 10.667013} +{"id": "1089-134691-0011", "text": "THEIR PIETY WOULD BE LIKE THEIR NAMES LIKE THEIR FACES LIKE THEIR CLOTHES AND WAS IDLE FOR HIM TO TELL HIMSELF THAT THEIR HUMBLE AND CONTRITE HEARTS IT MIGHT BE PAID A FAR RICHER TRIBUTE OF DEVOTION THAN HIS HAD EVER BEEN A GIFT TENFOLD MORE ACCEPTABLE THAN HIS ELABORATE ADORATION", "audio_sec": 20.01, "infer_sec": 66.80655} +{"id": "1089-134691-0012", "text": "IT WAS IDLE FOR HIM TO MOVE HIMSELF TO BE GENEROUS TOWARDS THEM TO TELL HIMSELF THAT IF HE EVER CAME TO THEIR GATES STRIPPED OF HIS PRIDE BEATEN AND IN BEGGARS WEEDS THAT THEY WOULD BE GENEROUS TOWARDS HIM LOVING HIM AS THEMSELVES", "audio_sec": 15.03, "infer_sec": 50.306393} +{"id": "1089-134691-0013", "text": "IDLE AND EMBITTERING FINALLY TO ARGUE AGAINST HIS OWN DISPASSIONATE CERTITUDE THAT THE COMMANDMENT OF LOVE BADE US NOT TO LOVE OUR NEIGHBOUR AS OURSELVES WITH THE SAME AMOUNT AND INTENSITY OF LOVE BUT TO LOVE HIM AS OURSELVES WITH THE SAME KIND OF LOVE", "audio_sec": 16.33, "infer_sec": 54.657578} +{"id": "1089-134691-0014", "text": "THE PHRASE AND THE DAY AND THE SCENE HARMONIZED IN ACCORD", "audio_sec": 4.755, "infer_sec": 15.915296} +{"id": "1089-134691-0015", "text": "WORDS WAS IT THEIR COLOURS", "audio_sec": 3.395, "infer_sec": 11.363287} +{"id": "1089-134691-0016", "text": "THEY WERE VOYAGING ACROSS THE DESERTS OF THE SKY A HOST OF NOMADS ON THE MARCH VOYAGING HIGH OVER IRELAND WESTWARD BOUND", "audio_sec": 9.06, "infer_sec": 30.324412} +{"id": "1089-134691-0017", "text": "THE EUROPE THEY HAD COME FROM LAY OUT THERE BEYOND THE IRISH SEA EUROPE OF STRANGE TONGUES AND VALLEYED AND WOULD BEGIRT AND CITADEL AND OF INTRENCHED AND MARSHALLED RACES", "audio_sec": 11.695, "infer_sec": 39.14393} +{"id": "1089-134691-0018", "text": "AGAIN AGAIN", "audio_sec": 3.09, "infer_sec": 10.342432} +{"id": "1089-134691-0019", "text": "A VOICE FROM BEYOND THE WORLD WAS CALLING", "audio_sec": 3.155, "infer_sec": 10.559991} +{"id": "1089-134691-0020", "text": "HELLO STUFFANOS HERE COMES THE DADALUS", "audio_sec": 3.99, "infer_sec": 13.354791} +{"id": "1089-134691-0021", "text": "THERE DIVING STONE POISED ON ITS RUDE SUPPORTS AND ROCKING UNDER THEIR PLUNGES AND THE ROUGH HEWN STONES OF THE SLOPING BREAKWATER OVER WHICH THEY SCRAMBLED IN THEIR HORSE PLAY GLEAMED WITH COLD WET LUSTRE", "audio_sec": 13.37, "infer_sec": 44.750264} +{"id": "1089-134691-0022", "text": "HE STOOD STILL IN DEFERENCE TO THEIR CALLS AND PARRIED THEIR BANTER WITH EASY WORDS", "audio_sec": 5.635, "infer_sec": 18.860713} +{"id": "1089-134691-0023", "text": "IT WAS A PAIN TO SEE THEM AND A SWORD LIKE PAIN TO SEE THE SIGNS OF ADOLESCENCE THAT MADE REPELLENT THEIR PITIABLE NAKEDNESS", "audio_sec": 7.735, "infer_sec": 25.889551} +{"id": "1089-134691-0024", "text": "STEPHANO'S DEDLOS", "audio_sec": 2.215, "infer_sec": 7.41375} +{"id": "1089-134691-0025", "text": "A MOMENT BEFORE THE GHOST OF THE ANCIENT KINGDOM OF THE DANES HAD LOOKED FORTH THROUGH THE VESTURE OF THE HAZE RAPT CITY", "audio_sec": 8.005, "infer_sec": 26.793258} +{"id": "1188-133604-0000", "text": "YOU WILL FIND ME CONTINUALLY SPEAKING OF FOUR MEN TITIAN HOLBINE TURNER AND TINTORET IN ALMOST THE SAME TERMS", "audio_sec": 10.725, "infer_sec": 35.897276} +{"id": "1188-133604-0001", "text": "THEY UNITE EVERY QUALITY AND SOMETIMES YOU WILL FIND ME REFERRING TO THEM AS COLORISTS SOMETIMES AS CURSCURISTS", "audio_sec": 9.04, "infer_sec": 30.257471} +{"id": "1188-133604-0002", "text": "BY BEING STUDIOUS OF COLOR THEY ARE STUDIOUS OF DIVISION AND WHILE THE CURE AUSCURUS DEVOTES HIMSELF TO THE REPRESENTATION OF DEGREES OF FORCE IN ONE THING UNSEPARATED LIGHT THE COLORISTS HAVE FOR THEIR FUNCTION THE ATTAINMENT OF BEAUTY BY ARRANGEMENT OF THE DIVISIONS OF LIGHT", "audio_sec": 17.96, "infer_sec": 60.113294} +{"id": "1188-133604-0003", "text": "MY FIRST AND PRINCIPAL REASON WAS THAT THEY ENFORCED BEYOND ALL RESISTANCE ON ANY STUDENT WHO MIGHT ATTEMPT TO COPY THEM THIS METHOD OF LAYING PORTIONS OF DISTINCT HUE SIDE BY SIDE", "audio_sec": 12.61, "infer_sec": 42.206494} +{"id": "1188-133604-0004", "text": "SOME OF THE TOUCHES INDEED WHEN THE TINT HAS BEEN MIXED WITH MUCH WATER HAVE BEEN LAID IN LITTLE DROPS OR PONDS SO THAT THE PIGMENT MIGHT CRYSTALLIZE HARD AT THE EDGE", "audio_sec": 10.65, "infer_sec": 35.646246} +{"id": "1188-133604-0005", "text": "IT IS THE HEAD OF A PARROT WITH A LITTLE FLOWER IN HIS BEAK FROM A PICTURE OF CARPATCHIO'S ONE OF HIS SERIES OF THE LIFE OF SAINT GEORGE", "audio_sec": 8.56, "infer_sec": 28.65088} +{"id": "1188-133604-0006", "text": "THEN HE COMES TO THE BEAK OF IT", "audio_sec": 2.4, "infer_sec": 8.032957} +{"id": "1188-133604-0007", "text": "THE BROWN GROUND BENEATH IS LEFT FOR THE MOST PART ONE TOUCH OF BLACK IS PUT FOR THE HOLLOW TOO DELICATE LINES OF DARK GREY DEFINED THE OUTER CURVE AND ONE LITTLE QUIVERING TOUCH OF WHITE DRAWS THE INNER EDGE OF THE MANDIBLE", "audio_sec": 14.24, "infer_sec": 47.662211} +{"id": "1188-133604-0008", "text": "FOR BELIEVE ME THE FINAL PHILOSOPHY OF ART CAN ONLY RATIFY THEIR OPINION THAT THE BEAUTY OF A COCK ROBIN IS TO BE READ AND OF A GRASS PLOT TO BE GREEN AND THE BEST SKILL OF ART IS AN INSTANTLY SEIZING ON THE MANIFOLD DELICIOUSNESS OF LIGHT WHICH YOU CAN ONLY SEIZE BY PRECISION OF INSTANTANEOUS TOUCH", "audio_sec": 20.755, "infer_sec": 69.468342} +{"id": "1188-133604-0009", "text": "NOW YOU WILL SEE IN THESE STUDIES THAT THE MOMENT THE WHITE IS ENCLOSED PROPERLY AND HARMONIZE WITH THE OTHER HUES IT BECOMES SOMEHOW MORE PRECIOUS AND PEARLY THAN THE WHITE PAPER AND THAT I AM NOT AFRAID TO LEAVE A WHOLE FIELD OF UNTREATED WHITE PAPER ALL ROUND IT BEING SURE THAT EVEN THE LITTLE DIAMONDS IN THE ROUND WINDOW WILL TELL AS JEWELS IF THEY ARE GRADATED JUSTLY", "audio_sec": 23.06, "infer_sec": 77.183327} +{"id": "1188-133604-0010", "text": "BUT IN THIS VINETTE COPIED FROM TURNER YOU HAVE THE TWO PRINCIPLES BROUGHT OUT PERFECTLY", "audio_sec": 6.095, "infer_sec": 20.400363} +{"id": "1188-133604-0011", "text": "THEY ARE BEYOND ALL OTHER WORKS THAN I KNOW EXISTING DEPENDENT FOR THEIR EFFECT ON LOW SUBDUED TONES THEIR FAVORITE CHOICE IN TIME OF DAY BEING EITHER DAWN OR TWILIGHT AND EVEN THEIR BRIGHTEST SUNSETS PRODUCED CHIEFLY OUT OF GRAY PAPER", "audio_sec": 15.19, "infer_sec": 50.841923} +{"id": "1188-133604-0012", "text": "IT MAY BE THAT A GREAT COLOURLESS WILL USE HIS UTMOST FORCE OF COLOR AS A SINGER HIS FULL POWER OF VOICE BUT LOUD OR LOW THE VIRTUE IS IN BOTH CASES ALWAYS IN REFINEMENT NEVER IN LOUDNESS", "audio_sec": 14.65, "infer_sec": 49.034508} +{"id": "1188-133604-0013", "text": "IT MUST REMEMBER BE ONE OR THE OTHER", "audio_sec": 3.02, "infer_sec": 10.108137} +{"id": "1188-133604-0014", "text": "DO NOT THEREFORE THINK THAT THE GOTHIC SCHOOLS AN EASY ONE", "audio_sec": 4.39, "infer_sec": 14.693617} +{"id": "1188-133604-0015", "text": "THE LAW OF THAT SCHOOL IS THAT EVERYTHING SHALL BE SEEN CLEARLY OR AT LEAST ONLY IN SUCH MIST OR FAINTNESS AS SHALL BE DELIGHTFUL AND I HAVE NO DOUBT THAT THE BEST INTRODUCTION TO IT WOULD BE THE ELEMENTARY PRACTICE OF PAINTING EVERY STUDY ON A GOLDEN GROUND", "audio_sec": 16.085, "infer_sec": 53.837547} +{"id": "1188-133604-0016", "text": "THIS AT ONCE COMPELS YOU TO UNDERSTAND THAT THE WORK IS TO BE IMAGINATIVE AND DECORATIVE THAT IT REPRESENTS BEAUTIFUL THINGS IN THE CLEAREST WAY BUT NOT UNDER EXISTING CONDITIONS AND THAT IN FACT YOU ARE PRODUCING JEWELLER'S WORK RATHER THAN PICTURES", "audio_sec": 16.595, "infer_sec": 55.54455} +{"id": "1188-133604-0017", "text": "THAT A STYLE WAS RESTRAINED OR SEVERE DOES NOT MEAN THAT IT IS ALSO ERRONEOUS", "audio_sec": 4.615, "infer_sec": 15.446707} +{"id": "1188-133604-0018", "text": "IN ALL EARLY GOTHIC ART INDEED YOU WILL FIND FAILURE OF THIS KIND ESPECIALLY DISTORTION AND RIGIDITY WHICH ARE IN MANY RESPECTS PAINFULLY TO BE COMPARED WITH THE SPLENDID REPOSE OF CLASSIC ART", "audio_sec": 11.55, "infer_sec": 38.658605} +{"id": "1188-133604-0019", "text": "THE LARGE LETTER CONTAINS INDEED ENTIRELY FEEBLE AND ILL DRAWN FIGURES THAT IS MERELY CHILDISH AND FAILING WORK OF AN INFERIOR HAND IT IS NOT CHARACTERISTIC OF GOTHIC OR ANY OTHER SCHOOL", "audio_sec": 13.93, "infer_sec": 46.624621} +{"id": "1188-133604-0020", "text": "BUT OBSERVE YOU CAN ONLY DO THIS ON ONE CONDITION THAT OF STRIVING ALSO TO CREATE IN REALITY THE BEAUTY WHICH YOU SEEK IN IMAGINATION", "audio_sec": 10.26, "infer_sec": 34.340891} +{"id": "1188-133604-0021", "text": "IT WILL BE WHOLLY IMPOSSIBLE FOR YOU TO RETAIN THE TRANQUILLITY OF TEMPER AND FELICITY OF FAITH NECESSARY FOR NOBLE PUREST PAINTING UNLESS YOU ARE ACTIVELY ENGAGED IN PROMOTING THE FELICITY AND PEACE OF PRACTICAL LIFE", "audio_sec": 14.02, "infer_sec": 46.925857} +{"id": "1188-133604-0022", "text": "YOU MUST LOOK AT HIM IN THE FACE FIGHT HIM CONQUER HIM WITH WHAT SCATH YOU MAY YOU NEED NOT THINK TO KEEP OUT OF THE WAY OF HIM", "audio_sec": 9.63, "infer_sec": 32.23224} +{"id": "1188-133604-0023", "text": "THE COLORIST SAYS FIRST OF ALL AS MY DELICIOUS PAROQUET WAS RUBY SO THIS NASTY VIPER SHALL BE BLACK AND THEN IS THE QUESTION CAN I ROUND HIM OFF EVEN THOUGH HE IS BLACK AND MAKE HIM SLIMY AND YET SPRINGY AND CLOSE DOWN CLOTTED LIKE A POOL OF BLACK BLOOD ON THE EARTH ALL THE SAME", "audio_sec": 23.67, "infer_sec": 79.225037} +{"id": "1188-133604-0024", "text": "NOTHING WILL BE MORE PRECIOUS TO YOU I THINK IN THE PRACTICAL STUDY OF ART THAN THE CONVICTION WHICH WILL FORCE ITSELF ON YOU MORE AND MORE EVERY HOUR OF THE WAY ALL THINGS ARE BOUND TOGETHER LITTLE AND GREAT IN SPIRIT AND IN MATTER", "audio_sec": 15.24, "infer_sec": 51.009276} +{"id": "1188-133604-0025", "text": "YOU KNOW I HAVE JUST BEEN TELLING YOU HOW THIS SCHOOL OF MATERIALISM IN CLAY INVOLVED ITSELF AT LAST IN CLOUD AND FIRE", "audio_sec": 7.45, "infer_sec": 24.935637} +{"id": "1188-133604-0026", "text": "HERE IS AN EQUALLY TYPICAL GREEK SCHOOL LANDSCAPE BY WILSON LOST WHOLLY IN GOLDEN MIST THE TREES SO SLIGHTLY DRAWN THAT YOU DON'T KNOW IF THEY ARE TREES OR TOWERS AND NO CARE FOR COLOR WHATSOEVER PERFECTLY DECEPTIVE AND MARVELLOUS EFFECT OF SUNSHINE THROUGH THE MIST APOLLO AND THE PYTHON", "audio_sec": 20.125, "infer_sec": 67.359691} +{"id": "1188-133604-0027", "text": "NOW HERE IS RAPHAEL EXACTLY BETWEEN THE TWO TREES STILL DRAWN LEAF BY LEAF HOLY FORMAL BUT BEAUTIFUL MIST COMING GRADUALLY INTO THE DISTANCE", "audio_sec": 11.245, "infer_sec": 37.63775} +{"id": "1188-133604-0028", "text": "WELL THEN LAST HERE IS TURNER'S GREEK SCHOOL OF THE HIGHEST CLASS AND YOU DEFINE HIS ART ABSOLUTELY AS FIRST THE DISPLAYING INTENSELY AND WITH THE STERNEST INTELLECT OF NATURAL FORM AS IT IS AND THEN THE ENVELOPMENT OF IT WITH CLOUD AND FIRE", "audio_sec": 19.005, "infer_sec": 63.610977} +{"id": "1188-133604-0029", "text": "ONLY THERE ARE TWO SORTS OF CLOUD IN FIRE", "audio_sec": 3.705, "infer_sec": 12.400877} +{"id": "1188-133604-0030", "text": "HE KNOWS THEM BOTH", "audio_sec": 1.915, "infer_sec": 6.40963} +{"id": "1188-133604-0031", "text": "THERE'S ONE AND THERE'S ANOTHER THE DUDLEY AND THE FLINT", "audio_sec": 4.25, "infer_sec": 14.225028} +{"id": "1188-133604-0032", "text": "IT IS ONLY A PENCIL OUTLINE BY EDWARD BURNE JONES IN ILLUSTRATION OF THE STORY OF PSYCHE IT IS THE INTRODUCTION OF PSYCHE AFTER ALL HER TROUBLES AND TO HEAVEN", "audio_sec": 10.985, "infer_sec": 36.767513} +{"id": "1188-133604-0033", "text": "EVERY PLANT IN THE GRASS IS SET FORMALLY GROWS PERFECTLY AND MAY BE REALIZED COMPLETELY", "audio_sec": 6.625, "infer_sec": 22.174308} +{"id": "1188-133604-0034", "text": "EXQUISITE ORDER AND UNIVERSAL WITH ETERNAL LIFE AND LIGHT THIS IS THE FAITH AND EFFORT OF THE SCHOOLS OF CRYSTAL AND YOU MAY DESCRIBE AND COMPLETE THEIR WORK QUITE LITERALLY BY TAKING ANY VERSES OF CHAUCER IN HIS TENDER MOOD AND OBSERVING HOW HE INSISTS ON THE CLEARNESS AND BRIGHTNESS FIRST AND THEN ON THE ORDER", "audio_sec": 20.905, "infer_sec": 69.970402} +{"id": "1188-133604-0035", "text": "THUS IN CHAUCER'S DREAM", "audio_sec": 2.925, "infer_sec": 9.790166} diff --git a/deploy/parakeet-stt/edge-stt/results/m1/hyps_C_de.jsonl b/deploy/parakeet-stt/edge-stt/results/m1/hyps_C_de.jsonl new file mode 100644 index 0000000..70badc5 --- /dev/null +++ b/deploy/parakeet-stt/edge-stt/results/m1/hyps_C_de.jsonl @@ -0,0 +1,30 @@ +{"id": "10347138311808731867", "text": "Es gibt Familien, die manchmal überlaufen sind mit einer schönen Eingriff pro Minute. Entlang der Küste. Das Schwimmend ist hier sicher.", "lang": "de", "audio_sec": 23.28, "infer_sec": 2.897636} +{"id": "10504450071805589678", "text": "Wer im Goma einigermaßen sicher ist, sollte hier der offenteilt aus der Goma es sorgfältig geplant werden. Um den Stand der in der Provinzen Nordkivoo an der und den Kämpfe zu erfahren.", "lang": "de", "audio_sec": 23.04, "infer_sec": 2.867763} +{"id": "10555751885736126606", "text": "Löffenturigen ähnlich wie Wörter oder Hunde-Hudel. Die die Löffen aber nicht an den Großkarten im Verhältnischen Überraschendählen, denen natürlich gegenüberrete sind.", "lang": "de", "audio_sec": 11.22, "infer_sec": 1.396541} +{"id": "1144628591089987683", "text": "Frau Kürchner können die Ihre Absicht als Präsidenten zu konneieren im agenteenischen Theateran. Dort begann sie 2005 auch ihre Kampagne von den Sinnathen als Mitgliedsligation der Provinns-Bloor des Eures.", "lang": "de", "audio_sec": 18.12, "infer_sec": 2.255376} +{"id": "11725654714821576978", "text": "Ziegen wurden anschein bereits vor ungefähr 10.000 Jahren im Zagrosgebirge im Iran-Dumestiziert.", "lang": "de", "audio_sec": 11.22, "infer_sec": 1.396541} +{"id": "1175248235018156351", "text": "Es gibt Familie in Strände, die manche mal überlaufen sind mit einer schönen Einkaufspromenade entlang der Küste. Das schwimmen ist hier sicher.", "lang": "de", "audio_sec": 7.86, "infer_sec": 0.978326} +{"id": "12482370299689904904", "text": "Leider fällt der Studium von Verkehrsflussenschwer, da man Fahrerverhalten nicht mit 100% die Gesichtheit voraussagen kann.", "lang": "de", "audio_sec": 10.86, "infer_sec": 1.351732} +{"id": "12843660496630565389", "text": "Sein Rum als E-Bizzentrum des Luxusbegan und gefärm 400 nach Christus und taute bis um gefär 1100 nach Christus an.", "lang": "de", "audio_sec": 7.44, "infer_sec": 0.926049} +{"id": "13327484359514762408", "text": "Es gibt keine allgemein gute Definition dafür, welche ergastetem Gegenstände als Antiquititäten gelten. Manche Störebehörden definieren über 100 Jahre alt waren als Antiquititäten.", "lang": "de", "audio_sec": 14.88, "infer_sec": 1.852097} +{"id": "13734019592211926155", "text": "Wir würden rather die Regierern nicht wir wollen oder hundere die den Wöre aber nicht anderen Großkarten in Verhalten überraschend innen und ebenso natürlich die die über ihre Beute sind.", "lang": "de", "audio_sec": 14.82, "infer_sec": 1.844629} +{"id": "14743079206182242094", "text": "Es gibt keine allgemeine Gültige Definition dafür, welche hergestelltem Gegenstände als Antiquitaten gelten. Manche Stole behörden die Finiere über 100 Jahre alt waren als Antiquitaten.", "lang": "de", "audio_sec": 14.52, "infer_sec": 1.807288} +{"id": "14772366518870892058", "text": "Während Goma, einige Maßen sicher ist sollte jeder auf Naldausha, Goma, Srockfällig geplant werden, um den Stand, der in der Providence Nordgivor an der Orn in Kämpfe zu erfahren.", "lang": "de", "audio_sec": 10.2, "infer_sec": 1.269583} +{"id": "14996476656149482093", "text": "Es gibt Familienstände, die manchmal überlaufen sind. Mit einer schönen Einkostprümenderte entlang der Küste, das schwimmen ist hier sicher.", "lang": "de", "audio_sec": 12.18, "infer_sec": 1.516031} +{"id": "16004810575340028273", "text": "Frau Kürchner könnt ihr ihr absichtlich als Präsidenten zu kandidieren im Argentinischen Theatern. Dort begann die 2.5-Augien-Ere-Kampagne für den Senat als Mitglied der Religion der Provinces Bührendes Eures.", "lang": "de", "audio_sec": 18.24, "infer_sec": 2.270313} +{"id": "16512809721737584620", "text": "In einigen Gmbiteln genügt das Wasser, in den anderen Müsse, in den anderen Müsse, in den anderen Müsse, in den anderen Müsse, in den anderen Müsse, in den anderen Müsse, in den anderen Müsse, in den anderen Müsse, in den anderen", "lang": "de", "audio_sec": 12.06, "infer_sec": 1.501095} +{"id": "17113436913741548046", "text": "", "lang": "", "audio_sec": 25.86, "infer_sec": 3.092904} +{"id": "17340904394278275929", "text": "Zwischen 22.A/A wurde von der Innsassen im Hof ein Feuer geliegt.", "lang": "de", "audio_sec": 8.4, "infer_sec": 1.004656} +{"id": "18026168807836015428", "text": "Da komitium vor langer Zeit mit der Erde zusammenbreiten, versprechen sich die Wissenschaftler einblicke wie Planetan-Insponferen der DDR.", "lang": "de", "audio_sec": 10.8, "infer_sec": 1.2917} +{"id": "18208273162967463359", "text": "Die zwei Verbindung reagieren miteinander und formen Kristalli, die laut Forschung der Hochschule die mirendetigkeit behindern können.", "lang": "de", "audio_sec": 17.7, "infer_sec": 2.116953} +{"id": "2561524221067958936", "text": "Leiterfelder Studium von Verkehrsflüssenschwer, damit Fahrer verhalten, nicht mit 100%iger Sicherheit voraussagen können.", "lang": "de", "audio_sec": 8.52, "infer_sec": 1.019008} +{"id": "3653977734852118277", "text": "Siegen wurden anscheinend bereits vor um 14.000 Jahren im Saagrosgeberge im Iran domesticiert.", "lang": "de", "audio_sec": 16.14, "infer_sec": 1.930374} +{"id": "3812261423674718843", "text": "Sehen rum als die E-B-100-Lux begann ungefähr im 400 noch Christus und da hat ein bisschen ungefähr eine von 100 noch Christus an.", "lang": "de", "audio_sec": 7.44, "infer_sec": 0.889838} +{"id": "3886596361103225573", "text": "zwischen 22 und 11.5 RMDT wurde von den Intes aus dem Hof ein Feuer gelegt.", "lang": "de", "audio_sec": 6.18, "infer_sec": 0.739139} +{"id": "4912300559226683422", "text": "Nur Motationen in keinem Bandzellen können in Kinder weitergegeben werden. Wer in Motationen an das Wort sind, z.B. und zu Krebs führen können.", "lang": "de", "audio_sec": 19.44, "infer_sec": 2.32506} +{"id": "4963712857525084701", "text": "Zeigen wurden an scheinen bereits vor ungefähr 10.000 Jahren in Saagroske Bürger im Iran domesticiert.", "lang": "de", "audio_sec": 9.84, "infer_sec": 1.176882} +{"id": "5206839124674557105", "text": "In einigen Gebieten genügt es Wasser eine Minute lang abzukurren und in anderen Missniss mehrere Minuten sein.", "lang": "de", "audio_sec": 5.46, "infer_sec": 0.653026} +{"id": "6479202151955421212", "text": "Nur mutationen in kein Bank zu stellen können an Kinder weitergegeben werden, während mutationen an das Rutzung, Zeltot oder zu Krebs führen können.", "lang": "de", "audio_sec": 14.7, "infer_sec": 1.758147} +{"id": "829120786432280030", "text": "Die zwei Verbindung reagieren miteinander und formen Kristalle die laut Forscher und der Hochschule die Nienten, die ich gerade behindern kann.", "lang": "de", "audio_sec": 7.32, "infer_sec": 0.875486} +{"id": "8570942209470725152", "text": "In einigen Beeteln genügt das Wasser einem Nutzung abzukorren in anderen müssen es mehr Minuten sein.", "lang": "de", "audio_sec": 6.18, "infer_sec": 0.739139} +{"id": "9450525503727057365", "text": "Der kommenten vor langer Zeit mit der ältsen Sammbraten versprechen sich die Wissenschaftler einblicke, die Karneten insbesondere die Erde entstehen.", "lang": "de", "audio_sec": 12.84, "infer_sec": 1.535688} diff --git a/deploy/parakeet-stt/edge-stt/results/m1/hyps_v3_de.jsonl b/deploy/parakeet-stt/edge-stt/results/m1/hyps_v3_de.jsonl new file mode 100644 index 0000000..9951b15 --- /dev/null +++ b/deploy/parakeet-stt/edge-stt/results/m1/hyps_v3_de.jsonl @@ -0,0 +1,30 @@ +{"id": "10347138311808731867", "text": "Es gibt Familienstr\u00e4nde, die manch \u00fcberlaufen sind, mit einer sch\u00f6nen Einkaufspomenade entlang der K\u00fcste. Das Schwimmen ist hier sicher.", "audio_sec": 23.28, "infer_sec": 3.173123} +{"id": "10504450071805589678", "text": "W\u00e4hrend Goma einigerma\u00dfen sicher ist, sollte jeder Aufenthalt au\u00dfer Gomas sorgf\u00e4ltig geplant werden, um den Stand der in der Provinz Nordkivu andauernden K\u00e4mpfe zu erfahren.", "audio_sec": 23.04, "infer_sec": 3.140411} +{"id": "10555751885736126606", "text": "L\u00f6wenrudel agieren \u00e4hnlich wie Wolfs oder Hunderudel. Tiere, die den L\u00f6wen aber nicht anderen Gro\u00dfkatzen im Verhalten, \u00fcberraschend \u00e4hneln und ebenso t\u00f6dlich gegen\u00fcber ihrer Beute sind.", "audio_sec": 11.22, "infer_sec": 1.729882} +{"id": "1144628591089987683", "text": "Frau Kirchner k\u00fcndigte ihre Absicht, als Pr\u00e4sidentin zu kandidieren, im argentinischen Theater an. Dort begann sie 2005 auch ihre Kampagne f\u00fcr den Senat als Mitglied der Delegation der Provinz Buenos Aires.", "audio_sec": 18.12, "infer_sec": 2.469802} +{"id": "11725654714821576978", "text": "Ziegen wurden anscheinend bereits vor ungef\u00e4hr 10.000 Jahren im Zagros-Gebirge im Iran domestiziert.", "audio_sec": 11.22, "infer_sec": 1.729882} +{"id": "1175248235018156351", "text": "Es gibt Familienstr\u00e4nde, die manchmal \u00fcberlaufen sind mit einer sch\u00f6nen Einkaufspomenade entlang der K\u00fcste. Das Schwimmen ist hier sicher.", "audio_sec": 7.86, "infer_sec": 1.302319} +{"id": "12482370299689904904", "text": "Leider f\u00e4llt das Studium von Verkehrsfl\u00f6\u00dfen schwer, da man Fahrerverhalten nicht mit 100%iger Sicherheit voraussagen kann.", "audio_sec": 10.86, "infer_sec": 1.674378} +{"id": "12843660496630565389", "text": "Sein Ruhm als Epizentrum des Luxus begann ungef\u00e4hr um 400 n. Chr. und dauerte bis ungef\u00e4hr 1100 d. Chr. an.", "audio_sec": 7.44, "infer_sec": 1.232729} +{"id": "13327484359514762408", "text": "Es gibt keine allgemeing\u00fcltige Definition daf\u00fcr, welche hergestellten Gegenst\u00e4nde als Antiquit\u00e4ten gelten. Manche Steuerbeh\u00f6rden definieren \u00fcber 100 Jahre alte Waren als Antiquit\u00e4ten.", "audio_sec": 14.88, "infer_sec": 2.125624} +{"id": "13734019592211926155", "text": "L\u00f6wenrudeln agieren \u00e4hnlich Wolfs oder Hunder, Tiere, die den L\u00f6wen, aber nicht anderen Gro\u00dfkarzen, im Verhalten \u00fcberraschend eneln und ebenso t\u00f6dlich, die gegen\u00fcber ihrer Beute sind.", "audio_sec": 14.82, "infer_sec": 2.117053} +{"id": "14743079206182242094", "text": "Es gibt keine allgemeing\u00fcltige Definition daf\u00fcr, welche hergestellten Gegenst\u00e4nde als Antiquit\u00e4ten gelten. Manche Steuerbeh\u00f6rden definieren \u00fcber 100 Jahre alte Waren als Antiquit\u00e4ten.", "audio_sec": 14.52, "infer_sec": 2.074198} +{"id": "14772366518870892058", "text": "W\u00e4hrend Goma einigerma\u00dfen sicher ist, sollte jeder Aufenthalt au\u00dferhalb Goma sorgf\u00e4ltig geplant werden, um den Stand der in der Provinz Nordkivu andauernden K\u00e4mpfe zu erfahren.", "audio_sec": 10.2, "infer_sec": 1.57262} +{"id": "14996476656149482093", "text": "Es gibt Familienstr\u00e4nde, die manchmal \u00fcberlaufen sind, mit einer sch\u00f6nen Einkaufspromenade entlang der K\u00fcste. Das Schwimmen ist hier sicher.", "audio_sec": 12.18, "infer_sec": 1.739926} +{"id": "16004810575340028273", "text": "Frau Kirchner k\u00fcndigte ihre Absicht, als Pr\u00e4sidentin zu kandidieren, im argentinischen Theater an. Dort begann sie 2005 auch ihre Kampagne f\u00fcr den Senat als Mitglied der Delegation der Provinz Buenos Aires.", "audio_sec": 18.24, "infer_sec": 2.486158} +{"id": "16512809721737584620", "text": "In einigen Gebieten gen\u00fcgt das Wasser, eine Minute lang abzubochen, in anderen m\u00fcssen es mehrere Minuten sein.", "audio_sec": 12.06, "infer_sec": 1.859392} +{"id": "17113436913741548046", "text": "L\u00f6wenrudel agieren \u00e4hnlich wie Wolfs oder Hundehudel, Tiere, die den L\u00f6wen, aber nicht anderen Gro\u00dfkarten im Verhalten \u00fcberraschend \u00e4hneln und ebenso t\u00f6dlich gegen\u00fcber ihrer Beute sind.", "audio_sec": 25.86, "infer_sec": 3.524784} +{"id": "17340904394278275929", "text": "Zwischen 22 und 11 Uhr wurde vor den Insassen im Hof ein Feuer gelegt.", "audio_sec": 8.4, "infer_sec": 1.391791} +{"id": "18026168807836015428", "text": "Da Kometen vor langer Zeit mit der Erde zusammenbreiten, versprechen sich die Wissenschaftler Einblicke, wie Planeten insbesondere die Erde entstehen.", "audio_sec": 10.8, "infer_sec": 1.665127} +{"id": "18208273162967463359", "text": "Die zwei Verbindungen reagieren miteinander und formen Kristalle, die laut Forschern der Hochschule die Nierent\u00e4tigkeit behindern k\u00f6nnen.", "audio_sec": 17.7, "infer_sec": 2.528464} +{"id": "2561524221067958936", "text": "Leider f\u00e4llt das Studium von Verkehrsfl\u00fcssen schwer, da man Fahrerverhalten nicht mit hundertprozentiger Sicherheit voraussagen kann.", "audio_sec": 8.52, "infer_sec": 1.313601} +{"id": "3653977734852118277", "text": "Ziegen wurden anscheinend bereits vor ungef\u00e4hr zehntausend Jahren im Zagros-Gebirge im Iran domestiziert.", "audio_sec": 16.14, "infer_sec": 2.305616} +{"id": "3812261423674718843", "text": "Sein Ruhm als Epizentrum des Luxus begann ungef\u00e4hr um 400 n. Chr. und dauerte bis ungef\u00e4hr 1100 nach Chr.", "audio_sec": 7.44, "infer_sec": 1.232729} +{"id": "3886596361103225573", "text": "Zwischen zweiundzwanzig und elf Uhr Mdt wurde vor den Insassen im Hof ein Feuer gelegt.", "audio_sec": 6.18, "infer_sec": 1.023961} +{"id": "4912300559226683422", "text": "Nur Mutationen in Keimbandzellen k\u00f6nnen an Kinder weitergegeben werden, w\u00e4hrend Mutationen anderswo zum Zelltod oder zu Krebs f\u00fchren k\u00f6nnen.", "audio_sec": 19.44, "infer_sec": 2.649722} +{"id": "4963712857525084701", "text": "Ziegen wurden anscheinend bereits vor ungef\u00e4hr 10.000 Jahren in Sagros-Gebirge im Iran domestiziert.", "audio_sec": 9.84, "infer_sec": 1.517116} +{"id": "5206839124674557105", "text": "In einigen Gebieten gen\u00fcgt es Wasser, eine Minute lang abzukochen, in anderen m\u00fcssen es mehrere Minuten sein.", "audio_sec": 5.46, "infer_sec": 0.904664} +{"id": "6479202151955421212", "text": "Nur Mutationen in Keimbahnzellen k\u00f6nnen an Kinder weitgegeben werden, w\u00e4hrend Mutationen anderswo zum Zelltod oder zu Krebs f\u00fchren k\u00f6nnen.", "audio_sec": 14.7, "infer_sec": 2.099911} +{"id": "829120786432280030", "text": "Die zwei Verbindungen reagieren miteinander und formen Kristalle, die laut Forschern der Hochschule die Niert\u00e4tigkeit behindern k\u00f6nnen.", "audio_sec": 7.32, "infer_sec": 1.212846} +{"id": "8570942209470725152", "text": "In einigen Gebieten gen\u00fcgt es, Wasser eine Minute lang abzukochen, in anderen m\u00fcssen es mehrere Minuten sein.", "audio_sec": 6.18, "infer_sec": 1.023961} +{"id": "9450525503727057365", "text": "Da Kometen vor langer Zeit mit der Erde zusammenbreiten, versprechen sich die Wissenschaftler Einblicke, wie Planeten, insbesondere die Erde, entstehen.", "audio_sec": 12.84, "infer_sec": 1.834208} diff --git a/deploy/parakeet-stt/edge-stt/results/m1/report.json b/deploy/parakeet-stt/edge-stt/results/m1/report.json new file mode 100644 index 0000000..f1b73b9 --- /dev/null +++ b/deploy/parakeet-stt/edge-stt/results/m1/report.json @@ -0,0 +1,22 @@ +{ + "mode": "A", + "n": 300, + "total_audio_sec": 2641.085, + "wall_sec": 356.615999, + "rtfx": 7.406, + "rtf": 0.135026, + "wer_pct": 1.331, + "n_scored": 300, + "normalizer": "whisper", + "mem": { + "idle_total_mb": 1650, + "peak_total_mb": 6597, + "proc_rss_mb": 96.8, + "cuda_used_mb": 6714.2 + }, + "replay": "sequential", + "precision": "int8", + "engine": "sherpa-onnx-offline", + "device": "cuda", + "limit": null +} \ No newline at end of file diff --git a/deploy/parakeet-stt/edge-stt/results/m1/report_B.json b/deploy/parakeet-stt/edge-stt/results/m1/report_B.json new file mode 100644 index 0000000..204f531 --- /dev/null +++ b/deploy/parakeet-stt/edge-stt/results/m1/report_B.json @@ -0,0 +1,22 @@ +{ + "mode": "B", + "n": 100, + "total_audio_sec": 901.135, + "wall_sec": 3013.000004, + "rtfx": 0.299, + "rtf": 3.343561, + "wer_pct": 2.249, + "n_scored": 100, + "normalizer": "whisper", + "mem": { + "idle_total_mb": 4149, + "peak_total_mb": 4598, + "proc_rss_mb": 90.7, + "cuda_used_mb": 4694.2 + }, + "replay": "sequential", + "precision": "int8", + "engine": "sherpa-onnx-online(streaming-zipformer)", + "device": "cpu", + "limit": 100 +} \ No newline at end of file diff --git a/deploy/parakeet-stt/edge-stt/results/m1/report_B300.json b/deploy/parakeet-stt/edge-stt/results/m1/report_B300.json new file mode 100644 index 0000000..61cc5d8 --- /dev/null +++ b/deploy/parakeet-stt/edge-stt/results/m1/report_B300.json @@ -0,0 +1,22 @@ +{ + "mode": "B", + "n": 300, + "total_audio_sec": 2641.085, + "wall_sec": 8196.000011, + "rtfx": 0.322, + "rtf": 3.10327, + "wer_pct": 1.976, + "n_scored": 300, + "normalizer": "whisper", + "mem": { + "idle_total_mb": 2010, + "peak_total_mb": 2780, + "proc_rss_mb": 98.0, + "cuda_used_mb": 2915.0 + }, + "replay": "sequential", + "precision": "int8", + "engine": "sherpa-onnx-online(streaming-zipformer)", + "device": "cpu", + "limit": null +} \ No newline at end of file diff --git a/deploy/parakeet-stt/edge-stt/results/m1/report_C_de.json b/deploy/parakeet-stt/edge-stt/results/m1/report_C_de.json new file mode 100644 index 0000000..d5a0a14 --- /dev/null +++ b/deploy/parakeet-stt/edge-stt/results/m1/report_C_de.json @@ -0,0 +1,22 @@ +{ + "mode": "C", + "n": 30, + "total_audio_sec": 386.76, + "wall_sec": 47.279, + "rtfx": 8.18, + "rtf": 0.122244, + "wer_pct": 54.0, + "n_scored": 30, + "normalizer": "whisper", + "mem": { + "idle_total_mb": 3695, + "peak_total_mb": 4592, + "proc_rss_mb": 90.3, + "cuda_used_mb": 4685.1 + }, + "replay": "sequential", + "precision": "int8", + "engine": "sherpa-onnx-offline(whisper-tiny)", + "device": "cuda", + "limit": null +} \ No newline at end of file diff --git a/deploy/parakeet-stt/edge-stt/results/m1/report_v3_de.json b/deploy/parakeet-stt/edge-stt/results/m1/report_v3_de.json new file mode 100644 index 0000000..91e7ce3 --- /dev/null +++ b/deploy/parakeet-stt/edge-stt/results/m1/report_v3_de.json @@ -0,0 +1,22 @@ +{ + "mode": "A", + "n": 30, + "total_audio_sec": 386.76, + "wall_sec": 56.655998, + "rtfx": 6.826, + "rtf": 0.146489, + "wer_pct": 6.833, + "n_scored": 30, + "normalizer": "whisper", + "mem": { + "idle_total_mb": 2008, + "peak_total_mb": 5217, + "proc_rss_mb": 94.6, + "cuda_used_mb": 5315.6 + }, + "replay": "sequential", + "precision": "int8", + "engine": "sherpa-onnx-offline", + "device": "cuda", + "limit": null +} \ No newline at end of file diff --git a/deploy/parakeet-stt/edge-stt/results/m1/report_v3_en.json b/deploy/parakeet-stt/edge-stt/results/m1/report_v3_en.json new file mode 100644 index 0000000..e9522bb --- /dev/null +++ b/deploy/parakeet-stt/edge-stt/results/m1/report_v3_en.json @@ -0,0 +1,22 @@ +{ + "mode": "A", + "n": 300, + "total_audio_sec": 2641.085, + "wall_sec": 376.489001, + "rtfx": 7.015, + "rtf": 0.142551, + "wer_pct": 1.71, + "n_scored": 300, + "normalizer": "whisper", + "mem": { + "idle_total_mb": 1959, + "peak_total_mb": 6552, + "proc_rss_mb": 94.0, + "cuda_used_mb": 6660.2 + }, + "replay": "sequential", + "precision": "int8", + "engine": "sherpa-onnx-offline", + "device": "cuda", + "limit": null +} \ No newline at end of file diff --git a/deploy/parakeet-stt/edge-stt/results/parakeet/RESULTS.md b/deploy/parakeet-stt/edge-stt/results/parakeet/RESULTS.md new file mode 100644 index 0000000..35ba668 --- /dev/null +++ b/deploy/parakeet-stt/edge-stt/results/parakeet/RESULTS.md @@ -0,0 +1,46 @@ +# parakeet.cpp evaluation — LibriSpeech 300, vs assessment targets + +**Engine:** `parakeet.cpp` (ggml/llama.cpp-style CUDA backend, built from source on the Jetson) · +**Model:** `tdt_ctc-110m-q8_0.gguf` (110 M params, INT8/q8_0, 170 MB on disk) · **GPU (sm_87)**. +**Eval:** the pinned **LibriSpeech test-clean first-300-by-id**, run **in isolation** (all GeniePod +services stopped → clean 1535 MB system baseline). Whisper-normalized WER; RTF = Σ proc / Σ audio. + +> **Note:** the numbers below are the **q8_0** measurement (both decoders). A later **on-GPU dtype sweep** +> ([`../dtype/RESULTS.md`](../dtype/RESULTS.md)) found RTFx is *dtype-invariant* and moved the **tdt +> (accuracy) default to q5_k** — same accuracy (**1.808 %** ≈ 1.836 %), **23 % smaller** (137 MB), identical +> 61× speed. ctc keeps q8_0. The q8_0 tdt row below is the original, unchanged measurement. + +## Results vs targets + +| Metric | tdt decoder | ctc decoder | Target | Verdict | +|---|---|---|---|---| +| **WER** | **1.836 %** | **2.383 %** | ≤ 3.0 % | ✅ **PASS** (both) | +| **RTF** | 0.0166 (**60×**) | **0.00933 (107×)** | ≤ 0.004 (250×) | ✗ best 107× — see gap | +| **Memory (incremental)** | +450 MB | +450 MB | ≤ 1 GB total | ✅ footprint; total see below | +| Per-call latency | 126 ms median / 146 ms mean | — | — | matches the ~170 ms prod number (this excludes HTTP+sox) | +| load (one-time) | ~320 ms | ~440 ms | — | — | + +- **WER ✅** — 1.84 % (tdt, more accurate) / 2.38 % (ctc, faster); both well under 3 %. +- **RTF** — **107× (ctc)** is the project best: **~4× sherpa-onnx (25×)** and **~14× the 0.6 B on ONNX + Runtime (7.4×)** on identical hardware. The 250× target remains a documented miss (~18–20× A100→Orin + gap + 25 W), but parakeet.cpp's ggml CUDA backend closes most of the gap **without** a bespoke TensorRT + engine — i.e. near-TRT throughput on a reproducible from-source build. +- **Memory** — **+450 MB** active-inference incremental over a clean baseline (matches the ~410 MB field + number). ≤ 1 GB *total* is infeasible (OS floor alone ~1.5 GB), but the model+inference footprint is small + and fits beside other workloads. + +## Why parakeet.cpp wins the RTF axis (the engine, reconciled) + +The earlier sherpa-onnx exploration topped out at 25× because **ONNX Runtime's CUDA EP is the bottleneck** +(the 0.6 B was compute-bound at ~5–7× and didn't even benefit from batching). **parakeet.cpp uses a +ggml CUDA backend** (same lineage as the fast on-device LLM runtimes) which is far more efficient on the +Orin — **8–14× the throughput at the same INT8 precision** — and pairs it with a small **110 M** model. That +combination is what reaches 60–107× on a 25 W shared-arch device, where ORT could not. + +## Operating points (current defaults) +- **Accuracy-first:** tdt decoder, **q5_k** default — **1.808 % WER, 61× RTF** (q8_0 measured 1.836 %/60×). +- **Speed-first:** ctc decoder, **q8_0** — **2.383 % WER, 107× RTF** (still < 3 %). + +Both at **+450 MB** and ~110 M params — the strongest memory + RTF + accuracy balance measured in this project, +and the basis for the deployed GeniePod STT (`genie-parakeet` resident server on :8178, ~170 ms/call incl. +HTTP + sox resample). diff --git a/deploy/parakeet-stt/edge-stt/results/parakeet/bench300.json b/deploy/parakeet-stt/edge-stt/results/parakeet/bench300.json new file mode 100644 index 0000000..0173f3c --- /dev/null +++ b/deploy/parakeet-stt/edge-stt/results/parakeet/bench300.json @@ -0,0 +1 @@ +{"model":"/home/aihpc/parakeet-models/tdt_ctc-110m-q8_0.gguf","threads":8,"load_ms":317.504,"files":[{"path":"/home/aihpc/edge-stt/work/data/wav/1089-134686-0000.wav","audio_sec":10.435000,"proc_ms":248.020,"text":"He hoped there would be stew for dinner, turnips and carrots and bruised potatoes, and fat mutton pieces to be ladled out in thick, peppered, flower fattened sauce,"},{"path":"/home/aihpc/edge-stt/work/data/wav/1089-134686-0001.wav","audio_sec":3.275000,"proc_ms":96.616,"text":"Stuff it into you his belly counseled him."},{"path":"/home/aihpc/edge-stt/work/data/wav/1089-134686-0002.wav","audio_sec":6.625000,"proc_ms":135.527,"text":"After early nightfall the yellow lamps would light up here and there the squalid quarter of the brothels"},{"path":"/home/aihpc/edge-stt/work/data/wav/1089-134686-0003.wav","audio_sec":2.680000,"proc_ms":86.652,"text":"Hello, Bertie, any good in your mind?"},{"path":"/home/aihpc/edge-stt/work/data/wav/1089-134686-0004.wav","audio_sec":5.215063,"proc_ms":128.270,"text":"Number ten Fresh Nelly is waiting on you Good night, husband."},{"path":"/home/aihpc/edge-stt/work/data/wav/1089-134686-0005.wav","audio_sec":9.635000,"proc_ms":177.870,"text":"The music came nearer and he recalled the words, the words of Shelley's fragment upon the moon wandering companionless, pale for weariness."},{"path":"/home/aihpc/edge-stt/work/data/wav/1089-134686-0006.wav","audio_sec":10.555000,"proc_ms":183.034,"text":"The dull light fell more faintly upon the page whereon another equation began to unfold itself slowly and to spread abroad its widening tail."},{"path":"/home/aihpc/edge-stt/work/data/wav/1089-134686-0007.wav","audio_sec":4.275000,"proc_ms":93.337,"text":"A cold, lucid indifference reigned in his soul,"},{"path":"/home/aihpc/edge-stt/work/data/wav/1089-134686-0008.wav","audio_sec":6.730000,"proc_ms":124.901,"text":"The chaos in which his ardour extinguished itself was a cold, indifferent knowledge of himself,"},{"path":"/home/aihpc/edge-stt/work/data/wav/1089-134686-0009.wav","audio_sec":10.575000,"proc_ms":173.185,"text":"At most, by an alms given to a beggar whose blessing he fled from, he might hope wearily to win for himself some measure of actual grace."},{"path":"/home/aihpc/edge-stt/work/data/wav/1089-134686-0010.wav","audio_sec":4.405000,"proc_ms":95.151,"text":"Well, now, Ennis, I declare you have a head, and so has my stick"},{"path":"/home/aihpc/edge-stt/work/data/wav/1089-134686-0011.wav","audio_sec":12.445000,"proc_ms":200.972,"text":"On Saturday mornings when the sodality met in the chapel to recite the little office, his place was a cushioned kneeling desk at the right of the altar, from which he led his wing of boys through the responses."},{"path":"/home/aihpc/edge-stt/work/data/wav/1089-134686-0012.wav","audio_sec":11.640000,"proc_ms":178.339,"text":"Her eyes seemed to regard him with mild pity her holiness, a strange light glowing faintly upon her frail flesh, did not humiliate the sinner who approached her."},{"path":"/home/aihpc/edge-stt/work/data/wav/1089-134686-0013.wav","audio_sec":7.915000,"proc_ms":134.388,"text":"If ever he was impelled to cast sin from him and to repent, the impulse that moved him was the wish to be her knight."},{"path":"/home/aihpc/edge-stt/work/data/wav/1089-134686-0014.wav","audio_sec":2.225000,"proc_ms":61.584,"text":"He tried to think how it could be"},{"path":"/home/aihpc/edge-stt/work/data/wav/1089-134686-0015.wav","audio_sec":5.815000,"proc_ms":103.708,"text":"but the dusk, deepening in the schoolroom, covered over his thoughts. The bell rang,"},{"path":"/home/aihpc/edge-stt/work/data/wav/1089-134686-0016.wav","audio_sec":3.540000,"proc_ms":78.578,"text":"Then you can ask him questions on the catechism Dedalus."},{"path":"/home/aihpc/edge-stt/work/data/wav/1089-134686-0017.wav","audio_sec":8.870000,"proc_ms":154.842,"text":"Stephen, leaning back and drawing idly on his scribbler, listened to the talk about him which Heron checked from time to time by saying"},{"path":"/home/aihpc/edge-stt/work/data/wav/1089-134686-0018.wav","audio_sec":15.720000,"proc_ms":234.819,"text":"It was strange, too, that he found an arid pleasure in following up to the end the rigid lines of the doctrines of the church and penetrating into obscure silences only to hear and feel the more deeply his own condemnation."},{"path":"/home/aihpc/edge-stt/work/data/wav/1089-134686-0019.wav","audio_sec":13.895000,"proc_ms":203.501,"text":"The sentence of Saint James, which says that he who offends against one commandment becomes guilty of all had seemed to him first a swollen phrase, until he had begun to grope in the darkness of his own state."},{"path":"/home/aihpc/edge-stt/work/data/wav/1089-134686-0020.wav","audio_sec":16.790000,"proc_ms":256.023,"text":"If a man had stolen a pound in his youth and had used that pound to amass a huge fortune, how much was he obliged to give back the pound he had stolen only or the pound together with the compound interest accruing upon it or all his huge fortune?"},{"path":"/home/aihpc/edge-stt/work/data/wav/1089-134686-0021.wav","audio_sec":6.550000,"proc_ms":115.889,"text":"If a layman, in giving baptism, pour the water before saying the words, is the child baptized?"},{"path":"/home/aihpc/edge-stt/work/data/wav/1089-134686-0022.wav","audio_sec":11.175000,"proc_ms":174.831,"text":"How come is it that while the first beatitude promises the kingdom of heaven to the poor of heart, the second beatitude promises also to the meek that they shall possess the land?"},{"path":"/home/aihpc/edge-stt/work/data/wav/1089-134686-0023.wav","audio_sec":13.275000,"proc_ms":196.451,"text":"Why was the sacrament of the Eucharist instituted under the two species of bread and wine if Jesus Christ be present body and blood, soul and divinity, in the bread alone, and in the wine alone?"},{"path":"/home/aihpc/edge-stt/work/data/wav/1089-134686-0024.wav","audio_sec":11.655000,"proc_ms":169.670,"text":"If the wine change into vinegar, and the host crumble into corruption after they have been consecrated, is Jesus Christ still present under their species as God and as man?"},{"path":"/home/aihpc/edge-stt/work/data/wav/1089-134686-0025.wav","audio_sec":6.610000,"proc_ms":122.027,"text":"A gentle kick from the tall boy in the bench behind urged Stephen to ask a difficult question."},{"path":"/home/aihpc/edge-stt/work/data/wav/1089-134686-0026.wav","audio_sec":4.010000,"proc_ms":84.135,"text":"The rector did not ask for a catechism to hear the lesson from"},{"path":"/home/aihpc/edge-stt/work/data/wav/1089-134686-0027.wav","audio_sec":2.710000,"proc_ms":65.546,"text":"He clasped his hands on the desk and said,"},{"path":"/home/aihpc/edge-stt/work/data/wav/1089-134686-0028.wav","audio_sec":7.830000,"proc_ms":130.240,"text":"The retreat will begin on Wednesday afternoon in honor of Saint Francis Xavier whose feast day is Saturday."},{"path":"/home/aihpc/edge-stt/work/data/wav/1089-134686-0029.wav","audio_sec":4.670000,"proc_ms":89.231,"text":"On Friday confession will be heard all the afternoon after Beads"},{"path":"/home/aihpc/edge-stt/work/data/wav/1089-134686-0030.wav","audio_sec":2.715000,"proc_ms":63.798,"text":"Beware of making that mistake"},{"path":"/home/aihpc/edge-stt/work/data/wav/1089-134686-0031.wav","audio_sec":6.615000,"proc_ms":109.951,"text":"Stephen's heart began slowly to fold and fade with fear like a withering flower."},{"path":"/home/aihpc/edge-stt/work/data/wav/1089-134686-0032.wav","audio_sec":4.090000,"proc_ms":82.670,"text":"He is called, as you know, the Apostle of the Indies."},{"path":"/home/aihpc/edge-stt/work/data/wav/1089-134686-0033.wav","audio_sec":3.330000,"proc_ms":89.851,"text":"A great saint Saint Francis Xavier"},{"path":"/home/aihpc/edge-stt/work/data/wav/1089-134686-0034.wav","audio_sec":5.810000,"proc_ms":103.153,"text":"The rector paused and then, shaking his clasped hands before him, went on"},{"path":"/home/aihpc/edge-stt/work/data/wav/1089-134686-0035.wav","audio_sec":3.445000,"proc_ms":79.262,"text":"He had the faith in him that moves mountains"},{"path":"/home/aihpc/edge-stt/work/data/wav/1089-134686-0036.wav","audio_sec":3.250000,"proc_ms":81.778,"text":"a great Saint Saint Francis Xavier"},{"path":"/home/aihpc/edge-stt/work/data/wav/1089-134686-0037.wav","audio_sec":5.210000,"proc_ms":103.494,"text":"In the silence their dark fire kindled the dusk into a tawny glow"},{"path":"/home/aihpc/edge-stt/work/data/wav/1089-134691-0000.wav","audio_sec":2.085000,"proc_ms":62.412,"text":"He could wait no longer"},{"path":"/home/aihpc/edge-stt/work/data/wav/1089-134691-0001.wav","audio_sec":5.415000,"proc_ms":103.790,"text":"For a full hour he had paced up and down, waiting, but he could wait no longer."},{"path":"/home/aihpc/edge-stt/work/data/wav/1089-134691-0002.wav","audio_sec":11.600000,"proc_ms":190.596,"text":"He set off abruptly for the bull, walking rapidly lest his father's shrill whistle might call him back and in a few moments he had rounded the curve at the police barrack, and was safe."},{"path":"/home/aihpc/edge-stt/work/data/wav/1089-134691-0003.wav","audio_sec":2.175000,"proc_ms":54.215,"text":"The university"},{"path":"/home/aihpc/edge-stt/work/data/wav/1089-134691-0004.wav","audio_sec":5.175063,"proc_ms":94.519,"text":"Pride after satisfaction uplifted him like long slow waves"},{"path":"/home/aihpc/edge-stt/work/data/wav/1089-134691-0005.wav","audio_sec":5.360000,"proc_ms":103.213,"text":"whose feet are as the feet of hearts and underneath the everlasting arms"},{"path":"/home/aihpc/edge-stt/work/data/wav/1089-134691-0006.wav","audio_sec":5.895000,"proc_ms":114.581,"text":"the pride of that dim image brought back to his mind the dignity of the office he had refused."},{"path":"/home/aihpc/edge-stt/work/data/wav/1089-134691-0007.wav","audio_sec":3.440000,"proc_ms":82.588,"text":"Soon the whole bridge was trembling and resounding."},{"path":"/home/aihpc/edge-stt/work/data/wav/1089-134691-0008.wav","audio_sec":14.985000,"proc_ms":220.590,"text":"The uncouth faces passed him two by two, stained yellow or red or livid by the sea and as he strove to look at them with ease and indifference a faint stain of personal shame and commiseration rose to his own face."},{"path":"/home/aihpc/edge-stt/work/data/wav/1089-134691-0009.wav","audio_sec":20.055000,"proc_ms":289.017,"text":"Angry with himself, he tried to hide his face from their eyes by gazing down sideways into the shallow, swirling water under the bridge, but he still saw a reflection therein of their top heavy silk hats, and humble tape like collars and loosely hanging clerical clothes. Brother Hicky"},{"path":"/home/aihpc/edge-stt/work/data/wav/1089-134691-0010.wav","audio_sec":3.195000,"proc_ms":72.415,"text":"Brother McCardle Brother Kioff"},{"path":"/home/aihpc/edge-stt/work/data/wav/1089-134691-0011.wav","audio_sec":20.010000,"proc_ms":273.954,"text":"Their piety would be, like their names, like their faces, like their clothes, and it was idle for him to tell himself that their humble and contrite hearts it might be, paid a far richer tribute of devotion than his had ever been, a gift tenfold more acceptable than his elaborate adoration."},{"path":"/home/aihpc/edge-stt/work/data/wav/1089-134691-0012.wav","audio_sec":15.030000,"proc_ms":208.513,"text":"It was idle for him to move himself to be generous towards them, to tell himself that if he ever came to their gates, stripped of his pride, beaten and in beggar's weeds, that they would be generous towards him, loving him as themselves."},{"path":"/home/aihpc/edge-stt/work/data/wav/1089-134691-0013.wav","audio_sec":16.330000,"proc_ms":232.848,"text":"Idle and embittering finally to argue against his own dispassionate certitude, that the commandment of love bade us not to love our neighbour as ourselves with the same amount and intensity of love but to love him as ourselves with the same kind of love."},{"path":"/home/aihpc/edge-stt/work/data/wav/1089-134691-0014.wav","audio_sec":4.755000,"proc_ms":84.125,"text":"The phrase and the day and the scene harmonized in accord"},{"path":"/home/aihpc/edge-stt/work/data/wav/1089-134691-0015.wav","audio_sec":3.395000,"proc_ms":67.304,"text":"Words Was it their colors?"},{"path":"/home/aihpc/edge-stt/work/data/wav/1089-134691-0016.wav","audio_sec":9.060000,"proc_ms":136.710,"text":"They were voyaging across the deserts of the sky, a host of nomads on the march, voyaging high over Ireland westward bound."},{"path":"/home/aihpc/edge-stt/work/data/wav/1089-134691-0017.wav","audio_sec":11.695000,"proc_ms":176.634,"text":"The Europe they had come from lay out there beyond the Irish sea, Europe of strange tongues and valley, and would be girt and citadeled and of entrenched and martialed races."},{"path":"/home/aihpc/edge-stt/work/data/wav/1089-134691-0018.wav","audio_sec":3.090000,"proc_ms":61.020,"text":"Again Again"},{"path":"/home/aihpc/edge-stt/work/data/wav/1089-134691-0019.wav","audio_sec":3.155000,"proc_ms":66.769,"text":"A voice from beyond the world was calling"},{"path":"/home/aihpc/edge-stt/work/data/wav/1089-134691-0020.wav","audio_sec":3.990000,"proc_ms":78.571,"text":"Hello, Stefanos here comes the Dedalus"},{"path":"/home/aihpc/edge-stt/work/data/wav/1089-134691-0021.wav","audio_sec":13.370000,"proc_ms":195.462,"text":"Their diving stone, poised on its rude supports and rocking under their plunges, and the rough hewn stones of the sloping break water over which they scrambled in their horseplay gleamed with cold, wet lustre."},{"path":"/home/aihpc/edge-stt/work/data/wav/1089-134691-0022.wav","audio_sec":5.635000,"proc_ms":96.591,"text":"He stood still in deference to their calls, and parried their banter with easy words"},{"path":"/home/aihpc/edge-stt/work/data/wav/1089-134691-0023.wav","audio_sec":7.735000,"proc_ms":126.229,"text":"It was a pain to see them, and a sword like pain to see the signs of adolescence that made repellent their pitiable nakedness."},{"path":"/home/aihpc/edge-stt/work/data/wav/1089-134691-0024.wav","audio_sec":2.215000,"proc_ms":58.436,"text":"Stefanos Stadlos"},{"path":"/home/aihpc/edge-stt/work/data/wav/1089-134691-0025.wav","audio_sec":8.005000,"proc_ms":128.913,"text":"A moment before the ghost of the ancient kingdom of the Danes had looked forth through the vesture of the haze wrapped city."},{"path":"/home/aihpc/edge-stt/work/data/wav/1188-133604-0000.wav","audio_sec":10.725000,"proc_ms":150.311,"text":"You will find me continually speaking of four men Titian, Holbein, Turner, and Tintoret, in almost the same terms."},{"path":"/home/aihpc/edge-stt/work/data/wav/1188-133604-0001.wav","audio_sec":9.040000,"proc_ms":140.480,"text":"They unite every quality, and sometimes you will find me referring to them as colorists, sometimes as kiarascurists"},{"path":"/home/aihpc/edge-stt/work/data/wav/1188-133604-0002.wav","audio_sec":17.960000,"proc_ms":306.322,"text":"By being studious of color they are studious of division, and while the Curoscurus devotes himself to the representation of degrees of force in one thing unseparated light, the colorists have for their function, the attainment of beauty by arrangement of the divisions of light."},{"path":"/home/aihpc/edge-stt/work/data/wav/1188-133604-0003.wav","audio_sec":12.610000,"proc_ms":184.069,"text":"My first and principal reason was that they enforced beyond all resistance, on any student who might attempt to copy them this method of laying portions of distinct hue side by side"},{"path":"/home/aihpc/edge-stt/work/data/wav/1188-133604-0004.wav","audio_sec":10.650000,"proc_ms":170.766,"text":"Some of the touches, indeed, when the tint has been mixed with much water, have been laid in little drops or ponds, so that the pigment might crystallize hard at the edge."},{"path":"/home/aihpc/edge-stt/work/data/wav/1188-133604-0005.wav","audio_sec":8.560000,"proc_ms":140.031,"text":"It is the head of a parrot with a little flower in his beak from a picture of Carpaccios one of his series of the life of Saint George"},{"path":"/home/aihpc/edge-stt/work/data/wav/1188-133604-0006.wav","audio_sec":2.400000,"proc_ms":62.949,"text":"Then he comes to the beak of it"},{"path":"/home/aihpc/edge-stt/work/data/wav/1188-133604-0007.wav","audio_sec":14.240000,"proc_ms":219.465,"text":"The brown ground beneath is left for the most part. One touch of black is put for the hollow, two delicate lines of dark gray to find the outer curve, and one little quivering touch of white draws the inner edge of the mandible."},{"path":"/home/aihpc/edge-stt/work/data/wav/1188-133604-0008.wav","audio_sec":20.755000,"proc_ms":308.123,"text":"for, believe me, the final philosophy of art can only ratify their opinion that the beauty of a cockrobin is to be red, and of a grass plot to be green and the best skill of art is in instantly seizing on the manifold deliciousness of light, which you can only seize by precision of instantaneous touch."},{"path":"/home/aihpc/edge-stt/work/data/wav/1188-133604-0009.wav","audio_sec":23.060000,"proc_ms":362.629,"text":"Now you will see in these studies that the moment the white is enclosed properly and harmonized with the other hues, it becomes somehow more precious and pearly than the white paper and that I am not afraid to leave a whole field of untreated white paper all round it, being sure that even the little diamonds in the round window will tell as jewels, if they are graded justly."},{"path":"/home/aihpc/edge-stt/work/data/wav/1188-133604-0010.wav","audio_sec":6.095000,"proc_ms":105.703,"text":"But in this vignette, copied from Turner, you have the two principles brought out perfectly."},{"path":"/home/aihpc/edge-stt/work/data/wav/1188-133604-0011.wav","audio_sec":15.190000,"proc_ms":222.581,"text":"They are beyond all other works that I know existing, dependent for their effect on low, subdued tones their favourite choice in time of day being either dawn or twilight, and even their brightest sunsets produced chiefly out of gray paper."},{"path":"/home/aihpc/edge-stt/work/data/wav/1188-133604-0012.wav","audio_sec":14.650000,"proc_ms":205.309,"text":"It may be that a great colorless will use his utmost force of color as a singer his full power of voice, but loud or low the virtue is in both cases always in refinement, never in loudness."},{"path":"/home/aihpc/edge-stt/work/data/wav/1188-133604-0013.wav","audio_sec":3.020000,"proc_ms":70.885,"text":"It must, remember, be one or the other."},{"path":"/home/aihpc/edge-stt/work/data/wav/1188-133604-0014.wav","audio_sec":4.390000,"proc_ms":85.705,"text":"Do not, therefore, think that the Gothic school is an easy one."},{"path":"/home/aihpc/edge-stt/work/data/wav/1188-133604-0015.wav","audio_sec":16.085000,"proc_ms":234.789,"text":"The law of that school is that everything shall be seen clearly, or at least only in such mist or faintness as shall be delightful. And I have no doubt that the best introduction to it would be the elementary practice of painting every study on a golden ground."},{"path":"/home/aihpc/edge-stt/work/data/wav/1188-133604-0016.wav","audio_sec":16.595000,"proc_ms":223.636,"text":"This at once compels you to understand that the work is to be imaginative and decorative, that it represents beautiful things in the clearest way, but not under existing conditions and that in fact, you are producing jeweller's work rather than pictures."},{"path":"/home/aihpc/edge-stt/work/data/wav/1188-133604-0017.wav","audio_sec":4.615000,"proc_ms":97.166,"text":"That a style is restrained or severe does not mean that it is also erroneous"},{"path":"/home/aihpc/edge-stt/work/data/wav/1188-133604-0018.wav","audio_sec":11.549938,"proc_ms":188.353,"text":"In all early gothic art indeed you will find failure of this kind, especially distortion and rigidity, which are in many respects painfully to be compared with the splendid repose of classic art."},{"path":"/home/aihpc/edge-stt/work/data/wav/1188-133604-0019.wav","audio_sec":13.930000,"proc_ms":218.725,"text":"The large letter contains, indeed, entirely feeble and ill drawn figures. That is merely childish and failing work of an inferior hand it is not characteristic of Gothic or any other school."},{"path":"/home/aihpc/edge-stt/work/data/wav/1188-133604-0020.wav","audio_sec":10.260000,"proc_ms":150.573,"text":"But observe you can only do this on one condition that of striving also to create in reality, the beauty which you seek in imagination."},{"path":"/home/aihpc/edge-stt/work/data/wav/1188-133604-0021.wav","audio_sec":14.020000,"proc_ms":204.370,"text":"It will be wholly impossible for you to retain the tranquility of temper and felicity of faith necessary for noble purist painting unless you are actively engaged in promoting the felicity and peace of practical life."},{"path":"/home/aihpc/edge-stt/work/data/wav/1188-133604-0022.wav","audio_sec":9.630000,"proc_ms":155.413,"text":"You must look at him in the face fight him, conquer him with what scath you may you need not think to keep out of the way of him."},{"path":"/home/aihpc/edge-stt/work/data/wav/1188-133604-0023.wav","audio_sec":23.670000,"proc_ms":340.690,"text":"The colorist says first of all as my delicious paracet was ruby, so this nasty viper shall be black and then is the question can I round him off, even though he is black, and make him slimy, and yet springy and close down, clotted like a pool of black blood on the earth all the same?"},{"path":"/home/aihpc/edge-stt/work/data/wav/1188-133604-0024.wav","audio_sec":15.240000,"proc_ms":216.782,"text":"Nothing will be more precious to you, I think, in the practical study of art than the conviction which will force itself on you more and more every hour, of the way all things are bound together, little and great, in spirit and in matter."},{"path":"/home/aihpc/edge-stt/work/data/wav/1188-133604-0025.wav","audio_sec":7.450000,"proc_ms":121.324,"text":"You know I've just been telling you how this school of materialism in clay involved itself at last in cloud and fire"},{"path":"/home/aihpc/edge-stt/work/data/wav/1188-133604-0026.wav","audio_sec":20.125000,"proc_ms":289.253,"text":"Here is an equally typical Greek school landscape by Wilson Lost wholly in golden mist, the trees so slightly drawn that you don't know if they are trees or towers, and no care for color whatsoever perfectly deceptive and marvelous effect of sunshine through the mist Apollo in the Python"},{"path":"/home/aihpc/edge-stt/work/data/wav/1188-133604-0027.wav","audio_sec":11.245000,"proc_ms":197.638,"text":"Now here is Raphael exactly between the two, trees still drawn leaf by leaf, wholly formal, but beautiful mist coming gradually into the distance."},{"path":"/home/aihpc/edge-stt/work/data/wav/1188-133604-0028.wav","audio_sec":19.005000,"proc_ms":256.573,"text":"Well, then last, here is Turner's, Greek school of the highest class, and you define his art absolutely as first the displaying intensely and with the sternest intellect of natural form as it is, and then the envelopment of it with cloud and fire."},{"path":"/home/aihpc/edge-stt/work/data/wav/1188-133604-0029.wav","audio_sec":3.705000,"proc_ms":75.022,"text":"Only there are two sorts of cloud and fire"},{"path":"/home/aihpc/edge-stt/work/data/wav/1188-133604-0030.wav","audio_sec":1.915000,"proc_ms":57.000,"text":"He knows them both"},{"path":"/home/aihpc/edge-stt/work/data/wav/1188-133604-0031.wav","audio_sec":4.250000,"proc_ms":98.980,"text":"There's one and there's another the Dudley and the Flint."},{"path":"/home/aihpc/edge-stt/work/data/wav/1188-133604-0032.wav","audio_sec":10.985000,"proc_ms":182.813,"text":"It is only a pencil outline by Edward Byrne Jones in illustration of the story of Psyche. It is the introduction of Psyche after all her troubles into heaven."},{"path":"/home/aihpc/edge-stt/work/data/wav/1188-133604-0033.wav","audio_sec":6.625000,"proc_ms":110.575,"text":"Every plant in the grass is set formally, grows perfectly, and may be realized completely."},{"path":"/home/aihpc/edge-stt/work/data/wav/1188-133604-0034.wav","audio_sec":20.905000,"proc_ms":325.942,"text":"Exquisite order and universal with eternal life and light, this is the faith and effort of the schools of Christal, and you may describe and complete their work quite literally by taking any verses of Chaucer in his tender mood and observing how he insists on the clearness and brightness first, and then on the order."},{"path":"/home/aihpc/edge-stt/work/data/wav/1188-133604-0035.wav","audio_sec":2.925000,"proc_ms":69.915,"text":"Thus, in Chaucer's dream"},{"path":"/home/aihpc/edge-stt/work/data/wav/1188-133604-0036.wav","audio_sec":7.970000,"proc_ms":125.420,"text":"In both these high mythical subjects the surrounding nature, though suffering, is still dignified and beautiful."},{"path":"/home/aihpc/edge-stt/work/data/wav/1188-133604-0037.wav","audio_sec":14.510000,"proc_ms":217.578,"text":"Every line in which the master traces it, even where seemingly negligent, is lovely and set down with a meditative calmness which makes these two etchings capable of being placed beside the most tranquil work of Holbein, or Dure."},{"path":"/home/aihpc/edge-stt/work/data/wav/1188-133604-0038.wav","audio_sec":5.365000,"proc_ms":98.175,"text":"But now here is the subject of which you will wonder at first why Turner drew it at all."},{"path":"/home/aihpc/edge-stt/work/data/wav/1188-133604-0039.wav","audio_sec":6.625000,"proc_ms":130.140,"text":"It has no beauty whatsoever, no specialty of picturesqueness, and all its lines are cramped and poor."},{"path":"/home/aihpc/edge-stt/work/data/wav/1188-133604-0040.wav","audio_sec":3.230000,"proc_ms":88.063,"text":"The crampness and the poverty are all intended."},{"path":"/home/aihpc/edge-stt/work/data/wav/1188-133604-0041.wav","audio_sec":10.070000,"proc_ms":160.255,"text":"It is a gleaner bringing down her one sheaf of corn to an old water mill, itself mossy and rent, scarcely able to get its stones to turn."},{"path":"/home/aihpc/edge-stt/work/data/wav/1188-133604-0042.wav","audio_sec":2.660000,"proc_ms":69.089,"text":"The scene is absolutely arcadian,"},{"path":"/home/aihpc/edge-stt/work/data/wav/1188-133604-0043.wav","audio_sec":4.885000,"proc_ms":106.676,"text":"See that your lies being nothing worse than a boy's climbing for his entangled kite"},{"path":"/home/aihpc/edge-stt/work/data/wav/1188-133604-0044.wav","audio_sec":18.545000,"proc_ms":257.887,"text":"It will be well for you if you join not with those who instead of kites fly falcons, who instead of obeying the last words of the great cloud shepherd, defeat his sheep, live the lives. How much less than vanity of the war wolf and the gear eagle"},{"path":"/home/aihpc/edge-stt/work/data/wav/121-121726-0000.wav","audio_sec":8.460000,"proc_ms":129.429,"text":"also a popular contrivance, whereby love making may be suspended but not stopped during the picnic season."},{"path":"/home/aihpc/edge-stt/work/data/wav/121-121726-0001.wav","audio_sec":5.925000,"proc_ms":96.922,"text":"Hurrang The tiresome product of a tireless tongue"},{"path":"/home/aihpc/edge-stt/work/data/wav/121-121726-0002.wav","audio_sec":4.410000,"proc_ms":78.061,"text":"Anger pain painful to hear"},{"path":"/home/aihpc/edge-stt/work/data/wav/121-121726-0003.wav","audio_sec":6.755000,"proc_ms":111.411,"text":"Hay fever a heart trouble caused by falling in love with a Grass's widow"},{"path":"/home/aihpc/edge-stt/work/data/wav/121-121726-0004.wav","audio_sec":4.020000,"proc_ms":75.654,"text":"Heaven a good place to be raised to"},{"path":"/home/aihpc/edge-stt/work/data/wav/121-121726-0005.wav","audio_sec":3.100000,"proc_ms":62.201,"text":"Hedge offense"},{"path":"/home/aihpc/edge-stt/work/data/wav/121-121726-0006.wav","audio_sec":3.895000,"proc_ms":93.287,"text":"HERREDY THE CAUSE OF ALL OR FALTS"},{"path":"/home/aihpc/edge-stt/work/data/wav/121-121726-0007.wav","audio_sec":6.730000,"proc_ms":111.205,"text":"Horse sense a degree of wisdom that keeps one from betting on the races"},{"path":"/home/aihpc/edge-stt/work/data/wav/121-121726-0008.wav","audio_sec":4.990000,"proc_ms":97.000,"text":"HOSE MAN'S EXCUSE for wetting the walk"},{"path":"/home/aihpc/edge-stt/work/data/wav/121-121726-0009.wav","audio_sec":7.260000,"proc_ms":117.887,"text":"Hotel a place where a guest often gives up good dollars for poor quarters"},{"path":"/home/aihpc/edge-stt/work/data/wav/121-121726-0010.wav","audio_sec":9.810000,"proc_ms":149.797,"text":"House cleaning A domestic upheaval that makes it easy for the government to enlist all the soldiers it needs"},{"path":"/home/aihpc/edge-stt/work/data/wav/121-121726-0011.wav","audio_sec":4.035000,"proc_ms":75.210,"text":"Husband The next thing to a wife"},{"path":"/home/aihpc/edge-stt/work/data/wav/121-121726-0012.wav","audio_sec":4.045000,"proc_ms":81.712,"text":"Hussy, woman and bond tie"},{"path":"/home/aihpc/edge-stt/work/data/wav/121-121726-0013.wav","audio_sec":2.490000,"proc_ms":62.921,"text":"tied to a woman"},{"path":"/home/aihpc/edge-stt/work/data/wav/121-121726-0014.wav","audio_sec":3.165000,"proc_ms":76.576,"text":"Hypocrite A horse dealer"},{"path":"/home/aihpc/edge-stt/work/data/wav/121-123852-0000.wav","audio_sec":17.695000,"proc_ms":226.309,"text":"Those pretty wrongs that liberty commits When I am some time absent from thy heart Thy beauty and thy years fall well befits, for still temptation follows where thou art"},{"path":"/home/aihpc/edge-stt/work/data/wav/121-123852-0001.wav","audio_sec":1.870000,"proc_ms":54.875,"text":"Aye me."},{"path":"/home/aihpc/edge-stt/work/data/wav/121-123852-0002.wav","audio_sec":17.285000,"proc_ms":231.221,"text":"No matter then, although my foot did stand, upon the farthest earth removed from thee, For nimble thought can jump both sea and land, as soon as think the place where he would be, but"},{"path":"/home/aihpc/edge-stt/work/data/wav/121-123852-0003.wav","audio_sec":23.505000,"proc_ms":339.404,"text":"Thought kills me that I am not thought, To leap large lengths of miles when thou art gone, but that so much of earth and water wrought, I must attend time's leisure with my moan Receiving nought by elements so slow But heavy tears, badges of either's woe"},{"path":"/home/aihpc/edge-stt/work/data/wav/121-123852-0004.wav","audio_sec":16.290000,"proc_ms":223.170,"text":"My heart doth plead that thou in him dost lie a closet never pierced with crystal eyes but the defendant doth that plead deny and says in him thy fair appearance lies"},{"path":"/home/aihpc/edge-stt/work/data/wav/121-123859-0000.wav","audio_sec":17.390000,"proc_ms":222.493,"text":"You are my all the world, and I must strive to know my shames and praises from your tongue, none else to me, nor I to none alive, that my steeled sense or changes right or wrong"},{"path":"/home/aihpc/edge-stt/work/data/wav/121-123859-0001.wav","audio_sec":25.395000,"proc_ms":370.297,"text":"Oh 'tis the first, 'tis flattery in my seeing, and my great mind most kingly drinks it up. Mine eye well knows what with his gust is green, and to his palate doth prepare the cup if it be poisoned, 'tis the lesser sin that mine eye loves it, and doth first begin"},{"path":"/home/aihpc/edge-stt/work/data/wav/121-123859-0002.wav","audio_sec":30.040000,"proc_ms":420.782,"text":"But reckoning time, whose millioned accidents creep in twixt vows and change decrees of kings, Tan's sacred beauty, blunt the sharpest intents, diverts strong minds to the course of altering things, alas, why fearing of time's tyranny, might I not then say, Now I love you best when I was certain or in certainty crowning the present, doubting of the rest"},{"path":"/home/aihpc/edge-stt/work/data/wav/121-123859-0003.wav","audio_sec":10.825000,"proc_ms":157.118,"text":"Love is a babe then might I not say so to give full growth to that which still doth grow"},{"path":"/home/aihpc/edge-stt/work/data/wav/121-123859-0004.wav","audio_sec":9.505000,"proc_ms":130.724,"text":"So I return rebuked to my content and gain by ill thrice more than I have spent"},{"path":"/home/aihpc/edge-stt/work/data/wav/121-127105-0000.wav","audio_sec":9.875000,"proc_ms":155.165,"text":"It was this observation that drew from Douglas not immediately but later in the evening, a reply that had the interesting consequence to which I call attention"},{"path":"/home/aihpc/edge-stt/work/data/wav/121-127105-0001.wav","audio_sec":5.025000,"proc_ms":96.297,"text":"some one else told a story not particularly effective which I saw he was not following"},{"path":"/home/aihpc/edge-stt/work/data/wav/121-127105-0002.wav","audio_sec":7.495000,"proc_ms":124.379,"text":"cried one of the women. He took no notice of her. He looked at me, but as if instead of me, he saw what he spoke of"},{"path":"/home/aihpc/edge-stt/work/data/wav/121-127105-0003.wav","audio_sec":7.725000,"proc_ms":126.333,"text":"There was a unanimous groan at this, and much reproach, after which in his preoccupied way he explained"},{"path":"/home/aihpc/edge-stt/work/data/wav/121-127105-0004.wav","audio_sec":2.110000,"proc_ms":58.316,"text":"The story's written."},{"path":"/home/aihpc/edge-stt/work/data/wav/121-127105-0005.wav","audio_sec":5.820000,"proc_ms":106.504,"text":"I could write to my man and enclose the key he could send down the packet as he finds it."},{"path":"/home/aihpc/edge-stt/work/data/wav/121-127105-0006.wav","audio_sec":4.725000,"proc_ms":97.678,"text":"The others resented postponement, but it was just his scruples that charmed me."},{"path":"/home/aihpc/edge-stt/work/data/wav/121-127105-0007.wav","audio_sec":5.790000,"proc_ms":108.492,"text":"To this his answer was prompt Oh thank God no and is the record yours?"},{"path":"/home/aihpc/edge-stt/work/data/wav/121-127105-0008.wav","audio_sec":2.760000,"proc_ms":71.059,"text":"He hung fire again a woman's"},{"path":"/home/aihpc/edge-stt/work/data/wav/121-127105-0009.wav","audio_sec":2.290000,"proc_ms":57.431,"text":"She has been dead these twenty years."},{"path":"/home/aihpc/edge-stt/work/data/wav/121-127105-0010.wav","audio_sec":2.850000,"proc_ms":69.751,"text":"She sent me the pages in question before she died."},{"path":"/home/aihpc/edge-stt/work/data/wav/121-127105-0011.wav","audio_sec":5.780000,"proc_ms":114.632,"text":"She was the most agreeable woman I've ever known in her position. She would have been worthy of any whatever"},{"path":"/home/aihpc/edge-stt/work/data/wav/121-127105-0012.wav","audio_sec":4.830000,"proc_ms":99.904,"text":"wasn't simply that she said so, but that I knew she hadn't. I was sure I could see"},{"path":"/home/aihpc/edge-stt/work/data/wav/121-127105-0013.wav","audio_sec":5.895000,"proc_ms":116.995,"text":"You'll easily judge why when you hear because the thing had been such a scare he continued to fix me."},{"path":"/home/aihpc/edge-stt/work/data/wav/121-127105-0014.wav","audio_sec":2.255000,"proc_ms":61.561,"text":"You are acute"},{"path":"/home/aihpc/edge-stt/work/data/wav/121-127105-0015.wav","audio_sec":2.960000,"proc_ms":81.607,"text":"He quitted the fire and dropped back into his chair."},{"path":"/home/aihpc/edge-stt/work/data/wav/121-127105-0016.wav","audio_sec":2.030000,"proc_ms":62.051,"text":"probably not till the second post."},{"path":"/home/aihpc/edge-stt/work/data/wav/121-127105-0017.wav","audio_sec":2.695000,"proc_ms":73.281,"text":"It was almost the tone of hope. Everybody will stay."},{"path":"/home/aihpc/edge-stt/work/data/wav/121-127105-0018.wav","audio_sec":2.770000,"proc_ms":80.232,"text":"cried the ladies, whose departure had been fixed"},{"path":"/home/aihpc/edge-stt/work/data/wav/121-127105-0019.wav","audio_sec":3.525000,"proc_ms":88.402,"text":"misses Griffin, however, expressed the need for a little more light."},{"path":"/home/aihpc/edge-stt/work/data/wav/121-127105-0020.wav","audio_sec":14.355000,"proc_ms":223.144,"text":"Who was it she was in love with? The story will tell, I took upon myself to reply. Oh I can't wait for the story. The story won't tell, said Douglas. Not in any literal vulgar way. More's the pity, then"},{"path":"/home/aihpc/edge-stt/work/data/wav/121-127105-0021.wav","audio_sec":2.000000,"proc_ms":65.726,"text":"Won't you tell Douglas?"},{"path":"/home/aihpc/edge-stt/work/data/wav/121-127105-0022.wav","audio_sec":5.075000,"proc_ms":88.724,"text":"Well, if I don't know who she was in love with I know who he was"},{"path":"/home/aihpc/edge-stt/work/data/wav/121-127105-0023.wav","audio_sec":10.910000,"proc_ms":167.510,"text":"Let me say here distinctly to have done with it that this narrative, from an exact transcript of my own made much later, is what I shall presently give"},{"path":"/home/aihpc/edge-stt/work/data/wav/121-127105-0024.wav","audio_sec":14.450000,"proc_ms":233.006,"text":"poor Douglas, before his death, when it was in sight, committed to me the Manus that reached him on the third of these days, and that, on the same spot, with immense effect, he began to read to our hushed little circle on the night of the fourth"},{"path":"/home/aihpc/edge-stt/work/data/wav/121-127105-0025.wav","audio_sec":16.065000,"proc_ms":231.301,"text":"The departing ladies who had said they would stay didn't, of course, thank heaven, stay, they departed, in consequence of arrangements made, in a rage of curiosity, as they professed, produced by the touches with which he had already worked us up"},{"path":"/home/aihpc/edge-stt/work/data/wav/121-127105-0026.wav","audio_sec":7.530000,"proc_ms":119.407,"text":"The first of these touches conveyed that the written statement took up the tail, at a point after it had, in a manner,"},{"path":"/home/aihpc/edge-stt/work/data/wav/121-127105-0027.wav","audio_sec":13.870000,"proc_ms":197.580,"text":"He had for his own town residence a big house filled with the spoils of travel and the trophies of the chase but it was to his country home an old family place in Essex, that he wished her immediately to proceed"},{"path":"/home/aihpc/edge-stt/work/data/wav/121-127105-0028.wav","audio_sec":6.750000,"proc_ms":110.843,"text":"The awkward thing was that they had practically no other relations, and that his own affairs took up all his time,"},{"path":"/home/aihpc/edge-stt/work/data/wav/121-127105-0029.wav","audio_sec":7.310000,"proc_ms":119.906,"text":"There were plenty of people to help, but of course the young lady, who should go down as governess, would be in supreme authority,"},{"path":"/home/aihpc/edge-stt/work/data/wav/121-127105-0030.wav","audio_sec":2.175000,"proc_ms":59.351,"text":"I don't anticipate."},{"path":"/home/aihpc/edge-stt/work/data/wav/121-127105-0031.wav","audio_sec":10.765000,"proc_ms":146.189,"text":"She was young, untried, nervous it was a vision of serious duties and little company of really great loneliness"},{"path":"/home/aihpc/edge-stt/work/data/wav/121-127105-0032.wav","audio_sec":3.170000,"proc_ms":70.486,"text":"Yes, but that's just the beauty of her passion"},{"path":"/home/aihpc/edge-stt/work/data/wav/121-127105-0033.wav","audio_sec":2.355000,"proc_ms":56.475,"text":"It was the beauty of it."},{"path":"/home/aihpc/edge-stt/work/data/wav/121-127105-0034.wav","audio_sec":7.410000,"proc_ms":105.052,"text":"It sounded dull, but sounded strange and all the more so because of his main condition which was"},{"path":"/home/aihpc/edge-stt/work/data/wav/121-127105-0035.wav","audio_sec":14.150000,"proc_ms":192.500,"text":"She promised to do this, and she mentioned to me that when for a moment, disburdened, delighted, he held her hand, thanking her for the sacrifice. She already felt rewarded"},{"path":"/home/aihpc/edge-stt/work/data/wav/121-127105-0036.wav","audio_sec":4.150000,"proc_ms":79.415,"text":"But was that all her reward? One of the ladies asked."},{"path":"/home/aihpc/edge-stt/work/data/wav/1221-135766-0000.wav","audio_sec":12.435000,"proc_ms":182.400,"text":"How strange it seemed to the sad woman as she watched the growth and the beauty that became every day more brilliant, and the intelligence that threw its quivering sunshine over the tiny features of this child."},{"path":"/home/aihpc/edge-stt/work/data/wav/1221-135766-0001.wav","audio_sec":16.715000,"proc_ms":230.654,"text":"God, as a direct consequence of the sin which man thus punished, had given her a lovely child, whose place was on that same dishonored bosom to connect her parent for ever with the race and descent of mortals and to be finally a blessed soul in heaven."},{"path":"/home/aihpc/edge-stt/work/data/wav/1221-135766-0002.wav","audio_sec":4.825000,"proc_ms":88.331,"text":"Yet these thoughts affected Hester Prynn less with hope than apprehension."},{"path":"/home/aihpc/edge-stt/work/data/wav/1221-135766-0003.wav","audio_sec":13.720000,"proc_ms":196.644,"text":"The child had a native grace which does not invariably coexist with faultless beauty. Its attire, however simple, always impressed the beholder as if it were the very garb that precisely became it best."},{"path":"/home/aihpc/edge-stt/work/data/wav/1221-135766-0004.wav","audio_sec":7.440000,"proc_ms":117.889,"text":"This outward mutability indicated and did not more than fairly express the various properties of her inner life"},{"path":"/home/aihpc/edge-stt/work/data/wav/1221-135766-0005.wav","audio_sec":16.645000,"proc_ms":238.715,"text":"Hester could only account for the child's character, and even then most vaguely and imperfectly by recalling what she herself had been during that momentous period while Pearl was imbibing her soul from the spiritual world and her bodily frame from its material of earth"},{"path":"/home/aihpc/edge-stt/work/data/wav/1221-135766-0006.wav","audio_sec":11.415000,"proc_ms":170.518,"text":"they were now illuminated by the morning radiance of a young child's disposition but, later in the day of earthly existence, might be prolific of the storm and whirlwind."},{"path":"/home/aihpc/edge-stt/work/data/wav/1221-135766-0007.wav","audio_sec":8.795000,"proc_ms":134.769,"text":"Hester Prynn, nevertheless, the loving mother of this one child, ran little risk of erring on the side of undue severity."},{"path":"/home/aihpc/edge-stt/work/data/wav/1221-135766-0008.wav","audio_sec":10.780000,"proc_ms":163.435,"text":"mindful, however, of her own errors and misfortunes, she early sought to impose a tender but strict control over the infant immortality that was committed to her charge."},{"path":"/home/aihpc/edge-stt/work/data/wav/1221-135766-0009.wav","audio_sec":10.190000,"proc_ms":157.053,"text":"As to any other kind of discipline, whether addressed to her mind or heart, Little Pearl might or might not be within its reach in accordance with the caprice that ruled the moment."},{"path":"/home/aihpc/edge-stt/work/data/wav/1221-135766-0010.wav","audio_sec":15.050000,"proc_ms":214.370,"text":"It was a look so intelligent, yet inexplicable, perverse, sometimes so malicious, but generally accompanied by a wild flow of spirits, that Hester could not help questioning at such moments whether Pearl was a human child."},{"path":"/home/aihpc/edge-stt/work/data/wav/1221-135766-0011.wav","audio_sec":21.345000,"proc_ms":305.655,"text":"Beholding it, Hester was constrained to rush towards the child, to pursue the little elf in the flight which she invariably began, to snatch her to her bosom with a close pressure and earnest kisses, not so much from overflowing love as to assure herself that Pearl was flesh and blood and not utterly delusive."},{"path":"/home/aihpc/edge-stt/work/data/wav/1221-135766-0012.wav","audio_sec":16.220000,"proc_ms":215.777,"text":"Brooding over all these matters, the mother felt like one who has evoked a spirit, but, by some irregularity in the process of conjuration, has failed to win the master word that should control this new and incomprehensible intelligence."},{"path":"/home/aihpc/edge-stt/work/data/wav/1221-135766-0013.wav","audio_sec":3.645000,"proc_ms":72.647,"text":"Pearl was a born outcast of the infantile world."},{"path":"/home/aihpc/edge-stt/work/data/wav/1221-135766-0014.wav","audio_sec":4.750000,"proc_ms":90.987,"text":"Pearl saw, and gazed intently, but never sought to make acquaintance."},{"path":"/home/aihpc/edge-stt/work/data/wav/1221-135766-0015.wav","audio_sec":2.630000,"proc_ms":65.410,"text":"If spoken to, she would not speak again."},{"path":"/home/aihpc/edge-stt/work/data/wav/1221-135767-0000.wav","audio_sec":24.850000,"proc_ms":368.799,"text":"Hester Prynne went one day to the mansion of Governor Bellingham with a pair of gloves which she had fringed and embroidered to his order, and which were to be worn on some great occasion of state, for, though the chances of a popular election had caused this former ruler to descend a step or two from the highest rank, he still held an honorable and influential place among the colonial magistracy."},{"path":"/home/aihpc/edge-stt/work/data/wav/1221-135767-0001.wav","audio_sec":13.430000,"proc_ms":184.659,"text":"Another and far more important reason than the delivery of a pair of embroidered gloves impelled Hester at this time to seek an interview with a personage of so much power and activity in the affairs of the settlement."},{"path":"/home/aihpc/edge-stt/work/data/wav/1221-135767-0002.wav","audio_sec":16.120000,"proc_ms":219.725,"text":"At that epoch of pristine simplicity, however, matters of even slighter public interest and of far less intrinsic weight than the welfare of Hester and her child were strangely mixed up with the deliberations of legislators and acts of state."},{"path":"/home/aihpc/edge-stt/work/data/wav/1221-135767-0003.wav","audio_sec":18.630000,"proc_ms":251.125,"text":"The period was hardly if at all earlier than that of our story when a dispute concerning the right of property in a pig not only caused a fierce and bitter contest in the legislative body of the colony, but resulted in an important modification of the framework itself of the legislature."},{"path":"/home/aihpc/edge-stt/work/data/wav/1221-135767-0004.wav","audio_sec":19.090000,"proc_ms":266.064,"text":"We have spoken of Pearl's rich and luxuriant beauty, a beauty that shone with deep and vivid tints, a bright complexion, eyes possessing intensity both of depth and glow, and hair already of a deep, glossy brown, and which, in after years, would be nearly akin to black."},{"path":"/home/aihpc/edge-stt/work/data/wav/1221-135767-0005.wav","audio_sec":5.865000,"proc_ms":91.744,"text":"It was the Scarlet Letter in another form the scarlet letter endowed with life."},{"path":"/home/aihpc/edge-stt/work/data/wav/1221-135767-0006.wav","audio_sec":20.560000,"proc_ms":294.205,"text":"The mother herself, as if the red ignominy were so deeply scorched into her brain that all her conceptions assumed its form, had carefully wrought out the similitude, lavishing many hours of morbid ingenuity to create an analogy between the object of her affection and the emblem of her guilt and torture."},{"path":"/home/aihpc/edge-stt/work/data/wav/1221-135767-0007.wav","audio_sec":12.770000,"proc_ms":173.994,"text":"But in truth, Pearl was the one as well as the other, and only in consequence of that identity had Hester contrived so perfectly to represent the scarlet letter in her appearance."},{"path":"/home/aihpc/edge-stt/work/data/wav/1221-135767-0008.wav","audio_sec":3.095000,"proc_ms":67.015,"text":"Come, therefore, and let us fling mud at them."},{"path":"/home/aihpc/edge-stt/work/data/wav/1221-135767-0009.wav","audio_sec":13.340000,"proc_ms":196.161,"text":"But Pearl, who was a dauntless child, after frowning, stamping her foot, and shaking her little hand with a variety of threatening gestures, suddenly made a rush at the knot of her enemies and put them all to flight."},{"path":"/home/aihpc/edge-stt/work/data/wav/1221-135767-0010.wav","audio_sec":8.200000,"proc_ms":136.893,"text":"She screamed and shouted too with a terrific volume of sound, which, doubtless, caused the hearts of the fugitives to quake within them."},{"path":"/home/aihpc/edge-stt/work/data/wav/1221-135767-0011.wav","audio_sec":16.510000,"proc_ms":229.674,"text":"It was further decorated with strange and seemingly cabalistic figures and diagrams suitable to the quaint taste of the age which had been drawn in the stucco when newly laid on, and had now grown hard and durable for the admiration of after times."},{"path":"/home/aihpc/edge-stt/work/data/wav/1221-135767-0012.wav","audio_sec":13.885000,"proc_ms":204.646,"text":"They approached the door, which was of an arched form, and flanked on each side by a narrow tower or projection of the edifice, in both of which were lattice windows, the wooden shutters to close over them at need."},{"path":"/home/aihpc/edge-stt/work/data/wav/1221-135767-0013.wav","audio_sec":11.985000,"proc_ms":206.228,"text":"Lifting the iron hammer that hung at the portal, Hester Prynn gave a summons which was answered by one of the Governor's bond servants, a free born Englishman, but now a seven years slave."},{"path":"/home/aihpc/edge-stt/work/data/wav/1221-135767-0014.wav","audio_sec":7.070000,"proc_ms":124.663,"text":"Yea, his honorable worship is within, but he hath a godly minister or two with him, and likewise a leach."},{"path":"/home/aihpc/edge-stt/work/data/wav/1221-135767-0015.wav","audio_sec":2.850000,"proc_ms":63.715,"text":"Ye may not see his worship now"},{"path":"/home/aihpc/edge-stt/work/data/wav/1221-135767-0016.wav","audio_sec":15.255000,"proc_ms":231.944,"text":"With many variations, suggested by the nature of his building materials, diversity of climate, and a different mode of social life, Governor Bellingham had planned his new habitation after the residences of gentlemen of farer state in his native land."},{"path":"/home/aihpc/edge-stt/work/data/wav/1221-135767-0017.wav","audio_sec":16.720000,"proc_ms":246.547,"text":"On the table, in token that the sentiment of old English hospitality had not been left behind, stood a large pewter tankard, at the bottom of which, had Hester or Pearl peeped into it, they might have seen the frothy remnant of a recent draught of ale."},{"path":"/home/aihpc/edge-stt/work/data/wav/1221-135767-0018.wav","audio_sec":11.160000,"proc_ms":180.457,"text":"Little Pearl, who was as greatly pleased with the gleaming armor as she had been with the glittering frontispiece of the house, spent some time looking into the polished mirror of the breastplate."},{"path":"/home/aihpc/edge-stt/work/data/wav/1221-135767-0019.wav","audio_sec":3.780000,"proc_ms":75.944,"text":"Mother cried she, I see you here. Look, look"},{"path":"/home/aihpc/edge-stt/work/data/wav/1221-135767-0020.wav","audio_sec":3.345000,"proc_ms":78.217,"text":"In truth, she seemed absolutely hidden behind it."},{"path":"/home/aihpc/edge-stt/work/data/wav/1221-135767-0021.wav","audio_sec":12.720000,"proc_ms":223.138,"text":"Pearl accordingly ran to the bow window at the further end of the hall, and looked along the vista of a garden walk, carpeted with closely shaven grass, and bordered with some rude and immature attempt at shrubbery."},{"path":"/home/aihpc/edge-stt/work/data/wav/1221-135767-0022.wav","audio_sec":14.395000,"proc_ms":225.815,"text":"but the proprietor appeared already to have relinquished as hopeless the effort to perpetuate on this side of the Atlantic in a hard soil, and amid the close struggle for subsistence the native English taste for ornamental gardening."},{"path":"/home/aihpc/edge-stt/work/data/wav/1221-135767-0023.wav","audio_sec":16.270000,"proc_ms":240.676,"text":"There were a few rose bushes, however, and a number of apple trees, probably the descendants of those planted by the Reverend mister Blackstone, the first settler of the peninsula, that half mythological personage who rides through our early annals, seated on the back of a bull."},{"path":"/home/aihpc/edge-stt/work/data/wav/1221-135767-0024.wav","audio_sec":5.850000,"proc_ms":109.479,"text":"Pearl, seeing the rose bushes, began to cry for a red rose and would not be pacified."},{"path":"/home/aihpc/edge-stt/work/data/wav/1284-1180-0000.wav","audio_sec":8.120000,"proc_ms":147.094,"text":"He wore blue silk stockings, blue knee pants with gold buckles, a blue ruffled waist, and a jacket of bright blue braided with gold."},{"path":"/home/aihpc/edge-stt/work/data/wav/1284-1180-0001.wav","audio_sec":7.755000,"proc_ms":131.857,"text":"His hat had a peaked crown at a flat brim, and around the brim was a row of tiny golden bells that tinkled when he moved."},{"path":"/home/aihpc/edge-stt/work/data/wav/1284-1180-0002.wav","audio_sec":7.680000,"proc_ms":128.762,"text":"Instead of shoes, the old man wore boots with turnover tops, and his blue coat had wide cuffs of gold braid."},{"path":"/home/aihpc/edge-stt/work/data/wav/1284-1180-0003.wav","audio_sec":4.835000,"proc_ms":108.199,"text":"For a long time he had wished to explore the beautiful land of Oz in which they lived,"},{"path":"/home/aihpc/edge-stt/work/data/wav/1284-1180-0004.wav","audio_sec":4.285000,"proc_ms":98.897,"text":"When they were outside, Unc simply latched the door and started up the path."},{"path":"/home/aihpc/edge-stt/work/data/wav/1284-1180-0005.wav","audio_sec":6.550000,"proc_ms":113.289,"text":"No one would disturb their little house, even if anyone came so far into the thick forest while they were gone."},{"path":"/home/aihpc/edge-stt/work/data/wav/1284-1180-0006.wav","audio_sec":6.865000,"proc_ms":127.029,"text":"At the foot of the mountain that separated the country of the munchkins from the country of the Gillikins, the path divided."},{"path":"/home/aihpc/edge-stt/work/data/wav/1284-1180-0007.wav","audio_sec":6.265000,"proc_ms":123.369,"text":"He knew it would take them to the house of the crooked magician, whom he had never seen, but who was their nearest neighbor."},{"path":"/home/aihpc/edge-stt/work/data/wav/1284-1180-0008.wav","audio_sec":10.490000,"proc_ms":176.182,"text":"All the morning they trudged up the mountain path, and at noon Unc and Ojo sat on a fallen tree trunk, and ate the last of the bread which the old munchkin had placed in his pocket."},{"path":"/home/aihpc/edge-stt/work/data/wav/1284-1180-0009.wav","audio_sec":6.285000,"proc_ms":118.148,"text":"Then they started on again, and two hours later came in sight of the house of doctor Pippt."},{"path":"/home/aihpc/edge-stt/work/data/wav/1284-1180-0010.wav","audio_sec":8.635000,"proc_ms":154.906,"text":"Unc knocked at the door of the house, and a chubby, pleasant faced woman, dressed all in blue, opened it, and greeted the visitors with a smile."},{"path":"/home/aihpc/edge-stt/work/data/wav/1284-1180-0011.wav","audio_sec":4.275000,"proc_ms":89.182,"text":"I am, my dear, and all strangers are welcome to my home."},{"path":"/home/aihpc/edge-stt/work/data/wav/1284-1180-0012.wav","audio_sec":4.880000,"proc_ms":96.729,"text":"We have come from a far lonier place than this A lonelier place"},{"path":"/home/aihpc/edge-stt/work/data/wav/1284-1180-0013.wav","audio_sec":3.705000,"proc_ms":83.916,"text":"and you must be O Jo the unlucky, she added."},{"path":"/home/aihpc/edge-stt/work/data/wav/1284-1180-0014.wav","audio_sec":3.665000,"proc_ms":82.614,"text":"Ojo had never eaten such a fine meal in all his life,"},{"path":"/home/aihpc/edge-stt/work/data/wav/1284-1180-0015.wav","audio_sec":5.835000,"proc_ms":108.196,"text":"We're traveling, replied Ojo, and we stopped at your house just to rest and refresh ourselves"},{"path":"/home/aihpc/edge-stt/work/data/wav/1284-1180-0016.wav","audio_sec":2.130000,"proc_ms":46.807,"text":"The woman seemed thoughtful"},{"path":"/home/aihpc/edge-stt/work/data/wav/1284-1180-0017.wav","audio_sec":10.680000,"proc_ms":193.045,"text":"At one end stood a great fireplace, in which a blue log was blazing with a blue flame, and over the fire hung four kettles in a row, all bubbling and steaming at a great rate."},{"path":"/home/aihpc/edge-stt/work/data/wav/1284-1180-0018.wav","audio_sec":12.005000,"proc_ms":229.768,"text":"It takes me several years to make this magic powder, but at this moment I am pleased to say it is nearly done you see I am making it for my good wife Margolot, who wants to use some of it for a purpose of her own."},{"path":"/home/aihpc/edge-stt/work/data/wav/1284-1180-0019.wav","audio_sec":15.025000,"proc_ms":241.317,"text":"You must know, said Margolot, when they were all seated together on the broad window seat, that my husband foolishly gave away all the powder of life he first made to Old Mombey the Witch, who used to live in the country of the Gillicans to the north of here."},{"path":"/home/aihpc/edge-stt/work/data/wav/1284-1180-0020.wav","audio_sec":5.870000,"proc_ms":118.165,"text":"the first lot we tested on our glass hat, which not only began to live but has lived ever since."},{"path":"/home/aihpc/edge-stt/work/data/wav/1284-1180-0021.wav","audio_sec":9.840000,"proc_ms":159.145,"text":"I think the next glass cat the magician makes will have neither brains nor heart, for then it will not object to catching mice, and may prove of some use to us."},{"path":"/home/aihpc/edge-stt/work/data/wav/1284-1180-0022.wav","audio_sec":2.885000,"proc_ms":78.027,"text":"I'm afraid I don't know much about the land of Oz"},{"path":"/home/aihpc/edge-stt/work/data/wav/1284-1180-0023.wav","audio_sec":5.610000,"proc_ms":112.606,"text":"You see, I've lived all my life with Unc Nunky, the silent one, and there was no one to tell me anything."},{"path":"/home/aihpc/edge-stt/work/data/wav/1284-1180-0024.wav","audio_sec":5.260000,"proc_ms":112.136,"text":"That is one reason you are Ojo the unlucky, said the woman, in a sympathetic tone."},{"path":"/home/aihpc/edge-stt/work/data/wav/1284-1180-0025.wav","audio_sec":8.705000,"proc_ms":152.421,"text":"I think I must show you my patchwork girl, said Margolot, laughing at the boy's astonishment. For she is rather difficult to explain."},{"path":"/home/aihpc/edge-stt/work/data/wav/1284-1180-0026.wav","audio_sec":8.290000,"proc_ms":128.967,"text":"But first I will tell you that for many years I have longed for a servant to help me with the house work, and to cook the meals and wash the dishes"},{"path":"/home/aihpc/edge-stt/work/data/wav/1284-1180-0027.wav","audio_sec":3.270000,"proc_ms":73.982,"text":"Yet that task was not so easy as you may suppose"},{"path":"/home/aihpc/edge-stt/work/data/wav/1284-1180-0028.wav","audio_sec":6.045000,"proc_ms":109.733,"text":"a bed quilt made of patches of different kinds and colors of cloth, all neatly sewed together"},{"path":"/home/aihpc/edge-stt/work/data/wav/1284-1180-0029.wav","audio_sec":5.335000,"proc_ms":110.078,"text":"Sometimes it is called a crazy quilt because the patches and colors are so mixed up"},{"path":"/home/aihpc/edge-stt/work/data/wav/1284-1180-0030.wav","audio_sec":16.220000,"proc_ms":266.630,"text":"When I found it, I said to myself that it would do nicely for my servant girl for when she was brought to life she would not be proud nor haughty, as the glass cat is, for such a dreadful mixture of colours would discourage her from trying to be as dignified as the blue munchkins are."},{"path":"/home/aihpc/edge-stt/work/data/wav/1284-1180-0031.wav","audio_sec":4.825000,"proc_ms":105.866,"text":"At the Emerald City where our Princess Osma lives, green is the popular color"},{"path":"/home/aihpc/edge-stt/work/data/wav/1284-1180-0032.wav","audio_sec":5.780000,"proc_ms":119.247,"text":"I will show you what a good job I did and she went to a tall cupboard and threw open the doors."},{"path":"/home/aihpc/edge-stt/work/data/wav/1284-1181-0000.wav","audio_sec":3.965000,"proc_ms":86.705,"text":"Ojo examined this curious contrivance with wonder"},{"path":"/home/aihpc/edge-stt/work/data/wav/1284-1181-0001.wav","audio_sec":11.430000,"proc_ms":190.330,"text":"Margolot had first made the girl's form from the patchwork quilt, and then she had dressed it with a patchwork skirt and an apron with pockets in it, using the same gay material throughout."},{"path":"/home/aihpc/edge-stt/work/data/wav/1284-1181-0002.wav","audio_sec":3.835000,"proc_ms":84.853,"text":"The head of the patchwork girl was the most curious part of her."},{"path":"/home/aihpc/edge-stt/work/data/wav/1284-1181-0003.wav","audio_sec":4.505000,"proc_ms":120.673,"text":"The hair was of brown yarn and hung down on her neck in several neat braids,"},{"path":"/home/aihpc/edge-stt/work/data/wav/1284-1181-0004.wav","audio_sec":7.150000,"proc_ms":126.212,"text":"Gold is the most common metal in the land of Oz, and is used for many purposes because it is soft and pliable."},{"path":"/home/aihpc/edge-stt/work/data/wav/1284-1181-0005.wav","audio_sec":3.855000,"proc_ms":91.797,"text":"No, I forgot all about the brains, exclaimed the woman."},{"path":"/home/aihpc/edge-stt/work/data/wav/1284-1181-0006.wav","audio_sec":11.405000,"proc_ms":184.772,"text":"Well, that may be true agreed Margolot. But on the contrary, a servant with too much brains is sure to become independent and high and mighty, and feel above her work."},{"path":"/home/aihpc/edge-stt/work/data/wav/1284-1181-0007.wav","audio_sec":4.040000,"proc_ms":88.265,"text":"She poured into the dish a quantity from each of these bottles."},{"path":"/home/aihpc/edge-stt/work/data/wav/1284-1181-0008.wav","audio_sec":6.080000,"proc_ms":111.099,"text":"I think that will do, she continued, for the other qualities are not needed in a servant."},{"path":"/home/aihpc/edge-stt/work/data/wav/1284-1181-0009.wav","audio_sec":5.245000,"proc_ms":114.977,"text":"She ran to her husband's side at once, and helped him lift the four kettles from the fire"},{"path":"/home/aihpc/edge-stt/work/data/wav/1284-1181-0010.wav","audio_sec":6.435000,"proc_ms":142.520,"text":"Their contents had all boiled away, leaving in the bottom of each kettle a few grains of fine white powder."},{"path":"/home/aihpc/edge-stt/work/data/wav/1284-1181-0011.wav","audio_sec":7.750000,"proc_ms":140.515,"text":"Very carefully the magician removed this powder, placing it all together in a golden dish, where he mixed it with a golden spoon."},{"path":"/home/aihpc/edge-stt/work/data/wav/1284-1181-0012.wav","audio_sec":8.510000,"proc_ms":149.657,"text":"No one saw him do this, for all were looking at the powder of life, but soon the woman remembered what she had been doing, and came back to the cupboard."},{"path":"/home/aihpc/edge-stt/work/data/wav/1284-1181-0013.wav","audio_sec":12.660000,"proc_ms":203.096,"text":"Ojo became a bit uneasy at this, for he had already put quite a lot of the cleverness powder in the dish, but he dared not interfere, and so he comforted himself with the thought that one cannot have too much cleverness."},{"path":"/home/aihpc/edge-stt/work/data/wav/1284-1181-0014.wav","audio_sec":7.920000,"proc_ms":156.656,"text":"He selected a small gold bottle with a pepper box top so that the powder might be sprinkled on any object through the small holes."},{"path":"/home/aihpc/edge-stt/work/data/wav/1284-1181-0015.wav","audio_sec":5.115000,"proc_ms":95.560,"text":"Most people talk too much, so it is a relief to find one who talks too little."},{"path":"/home/aihpc/edge-stt/work/data/wav/1284-1181-0016.wav","audio_sec":9.515000,"proc_ms":154.413,"text":"I am not allowed to perform magic, except for my own amusement, he told his visitors, as he lighted a pipe with a crooked stem, and began to smoke."},{"path":"/home/aihpc/edge-stt/work/data/wav/1284-1181-0017.wav","audio_sec":11.775000,"proc_ms":202.256,"text":"The wizard of Oz, who used to be a humbug, and knew no magic at all, has been taking lessons of Glinda, and I'm told he is getting to be a pretty good wizard, but he is merely the assistant of the great sorceress,"},{"path":"/home/aihpc/edge-stt/work/data/wav/1284-1181-0018.wav","audio_sec":3.160000,"proc_ms":76.098,"text":"It truly is, asserted the magician."},{"path":"/home/aihpc/edge-stt/work/data/wav/1284-1181-0019.wav","audio_sec":3.200000,"proc_ms":83.482,"text":"I now use them as ornamental statuary in my garden"},{"path":"/home/aihpc/edge-stt/work/data/wav/1284-1181-0020.wav","audio_sec":6.730000,"proc_ms":128.848,"text":"Dear me, what a chatterbox you're getting to be unkn', remarked the magician, who was pleased with the compliment."},{"path":"/home/aihpc/edge-stt/work/data/wav/1284-1181-0021.wav","audio_sec":2.700000,"proc_ms":72.063,"text":"asked the voice, in scornful accents."},{"path":"/home/aihpc/edge-stt/work/data/wav/1284-134647-0000.wav","audio_sec":8.530000,"proc_ms":137.019,"text":"The grateful applause of the clergy has consecrated the memory of a prince who indulged their passions and promoted their interest"},{"path":"/home/aihpc/edge-stt/work/data/wav/1284-134647-0001.wav","audio_sec":10.275000,"proc_ms":178.391,"text":"The Edict of Milan, the Great Charter of Toleration, had confirmed to each individual of the Roman world the privilege of choosing and professing his own religion."},{"path":"/home/aihpc/edge-stt/work/data/wav/1284-134647-0002.wav","audio_sec":15.110000,"proc_ms":238.723,"text":"But this inestimable privilege was soon violated with the knowledge of truth the emperor imbied the maxims of persecution, and the sects which descended from the Catholic Church were afflicted and oppressed by the triumph of Christianity."},{"path":"/home/aihpc/edge-stt/work/data/wav/1284-134647-0003.wav","audio_sec":20.145000,"proc_ms":284.469,"text":"Constantine easily believed that the heretics, who presumed to dispute his opinions, or to oppose his commands, were guilty of the most absurd and criminal obstinacy, and that a seasonable application of moderate severities might save those unhappy men from the danger of an everlasting condemnation."},{"path":"/home/aihpc/edge-stt/work/data/wav/1284-134647-0004.wav","audio_sec":12.835000,"proc_ms":187.803,"text":"Some of the penal regulations were copied from the Edicts of Diocletian, and this method of conversion was applauded by the same bishops who had felt the hand of oppression and pleaded for the rights of humanity."},{"path":"/home/aihpc/edge-stt/work/data/wav/1284-134647-0005.wav","audio_sec":23.335062,"proc_ms":377.500,"text":"They asserted with confidence, and almost with exalation, that the apostolical succession was interrupted, that all the bishops of Europe and Asia were infected by the contagion of guilt and schism, and that the prerogatives of the Catholic Church were confined to the chosen portion of the African believers, who alone had preserved inviolate the integrity of their faith and discipline."},{"path":"/home/aihpc/edge-stt/work/data/wav/1284-134647-0006.wav","audio_sec":10.155000,"proc_ms":160.048,"text":"Bishops, virgins, and even spotless infants were subjected to the disgrace of a public penance before they could be admitted to the communion of the Donatists."},{"path":"/home/aihpc/edge-stt/work/data/wav/1284-134647-0007.wav","audio_sec":14.170000,"proc_ms":238.100,"text":"Proscribed by the civil and ecclesiastical powers of the Empire, the Donatists still maintained in some provinces, particularly in Numidia, their superior numbers, and four hundred bishops acknowledged the jurisdiction of their primate."},{"path":"/home/aihpc/edge-stt/work/data/wav/1320-122612-0000.wav","audio_sec":13.480000,"proc_ms":203.406,"text":"Since the period of our tale the active spirit of the country has surrounded it with a belt of rich and thriving settlements, though none but the hunter or the savage is ever known even now to penetrate its wild recesses."},{"path":"/home/aihpc/edge-stt/work/data/wav/1320-122612-0001.wav","audio_sec":9.520000,"proc_ms":154.040,"text":"The dews were suffered to exhale, and the sun had dispersed the mists, and was shedding a strong and clear light in the forest when the travellers resumed their journey."},{"path":"/home/aihpc/edge-stt/work/data/wav/1320-122612-0002.wav","audio_sec":7.460000,"proc_ms":125.073,"text":"After proceeding a few miles, the progress of Hawkeye, who led the advance became more deliberate and watchful."},{"path":"/home/aihpc/edge-stt/work/data/wav/1320-122612-0003.wav","audio_sec":9.865000,"proc_ms":153.835,"text":"He often stopped to examine the trees, nor did he cross a rivulet without attentively considering the quantity, the velocity, and the color of its waters."},{"path":"/home/aihpc/edge-stt/work/data/wav/1320-122612-0004.wav","audio_sec":6.425000,"proc_ms":115.009,"text":"Distrusting his own judgment, his appeals to the opinion of Chingachuk were frequent and earnest."},{"path":"/home/aihpc/edge-stt/work/data/wav/1320-122612-0005.wav","audio_sec":5.915000,"proc_ms":106.623,"text":"Yet here are we within a short range of the scaroons, and not a sign of a trail have we crossed."},{"path":"/home/aihpc/edge-stt/work/data/wav/1320-122612-0006.wav","audio_sec":4.845000,"proc_ms":90.461,"text":"Let us retrace our steps and examine as we go with keener eyes"},{"path":"/home/aihpc/edge-stt/work/data/wav/1320-122612-0007.wav","audio_sec":5.540000,"proc_ms":97.855,"text":"Chinach had caught the look, and motioning with his hand he bade him speak."},{"path":"/home/aihpc/edge-stt/work/data/wav/1320-122612-0008.wav","audio_sec":7.875000,"proc_ms":125.904,"text":"the eyes of the whole party followed the unexpected movement, and read their success in the air of triumph that the youth assumed."},{"path":"/home/aihpc/edge-stt/work/data/wav/1320-122612-0009.wav","audio_sec":3.880000,"proc_ms":81.853,"text":"It would have been more wonderful had he spoken without a bidding,"},{"path":"/home/aihpc/edge-stt/work/data/wav/1320-122612-0010.wav","audio_sec":10.195000,"proc_ms":155.714,"text":"See, said Uncas, pointing north and south, at the evident marks of the broad trail on either side of him, the dark hair has gone toward the forest."},{"path":"/home/aihpc/edge-stt/work/data/wav/1320-122612-0011.wav","audio_sec":13.695000,"proc_ms":215.701,"text":"If a rock, or a rivulet, or a bit of earth harder than common, severed the links of the clue they followed, the true eye of the scout recovered them at a distance, and seldom rendered the delay of a single moment necessary."},{"path":"/home/aihpc/edge-stt/work/data/wav/1320-122612-0012.wav","audio_sec":10.490000,"proc_ms":162.430,"text":"Extinguished brands were lying around a spring, the offs of a deer were scattered about the place, and the trees bore evident marks of having been browsed by the horses."},{"path":"/home/aihpc/edge-stt/work/data/wav/1320-122612-0013.wav","audio_sec":6.550000,"proc_ms":115.309,"text":"a circle of a few hundred feet in circumference was drawn, and each of the party took a segment for his portion."},{"path":"/home/aihpc/edge-stt/work/data/wav/1320-122612-0014.wav","audio_sec":3.515000,"proc_ms":72.442,"text":"The examination, however, resulted in no discovery,"},{"path":"/home/aihpc/edge-stt/work/data/wav/1320-122612-0015.wav","audio_sec":6.385000,"proc_ms":111.776,"text":"the whole party crowded to the spot where Uncas pointed out the impression of a moccasin in the moist alluvian."},{"path":"/home/aihpc/edge-stt/work/data/wav/1320-122612-0016.wav","audio_sec":3.490000,"proc_ms":82.042,"text":"Run back, Uncas, and bring me the size of the singer's foot"},{"path":"/home/aihpc/edge-stt/work/data/wav/1320-122617-0000.wav","audio_sec":7.835000,"proc_ms":130.258,"text":"Notwithstanding the high resolution of Hawkeye, he fully comprehended all the difficulties and danger he was about to incur."},{"path":"/home/aihpc/edge-stt/work/data/wav/1320-122617-0001.wav","audio_sec":14.055000,"proc_ms":212.258,"text":"In his return to the camp his acute and practised intellects were intently engaged in devising means to counteract a watchfulness and suspicion on the part of his enemies that he knew were in no degree inferior to his own."},{"path":"/home/aihpc/edge-stt/work/data/wav/1320-122617-0002.wav","audio_sec":13.585000,"proc_ms":214.534,"text":"In other words, while he had implicit faith in the ability of Balam's ass to speak, he was somewhat sceptical on the subject of a bear's singing, and yet he had been assured of the latter, on the testimony of his own exquisite organs."},{"path":"/home/aihpc/edge-stt/work/data/wav/1320-122617-0003.wav","audio_sec":6.285000,"proc_ms":107.047,"text":"There was something in his air and manner that betrayed to the scout the utter confusion of the state of his mind."},{"path":"/home/aihpc/edge-stt/work/data/wav/1320-122617-0004.wav","audio_sec":12.260000,"proc_ms":193.509,"text":"The ingenious Hawkeye, who recalled the hasty manner in which the other had abandoned his post at the bedside of the sick woman, was not without his suspicions concerning the subject of so much solemn deliberation."},{"path":"/home/aihpc/edge-stt/work/data/wav/1320-122617-0005.wav","audio_sec":4.400000,"proc_ms":91.365,"text":"The bear shook his shaggy sides, and then a well known voice replied"},{"path":"/home/aihpc/edge-stt/work/data/wav/1320-122617-0006.wav","audio_sec":5.655000,"proc_ms":101.148,"text":"Can these things be? returned David, breathing more freely as the truth began to dawn upon him."},{"path":"/home/aihpc/edge-stt/work/data/wav/1320-122617-0007.wav","audio_sec":18.525000,"proc_ms":267.563,"text":"Come, come returned Hawkeye, uncasing his honest countenance, the better to assure the wavering confidence of his companion. You may see a skin which, if it be not as white as one of the gentle ones, has no tinge of red to it that the winds of the heaven and the sun have not bestowed. Now let us to business"}]} diff --git a/deploy/parakeet-stt/edge-stt/results/parakeet/hyps_ctc.jsonl b/deploy/parakeet-stt/edge-stt/results/parakeet/hyps_ctc.jsonl new file mode 100644 index 0000000..013a9f4 --- /dev/null +++ b/deploy/parakeet-stt/edge-stt/results/parakeet/hyps_ctc.jsonl @@ -0,0 +1,300 @@ +{"id": "1089-134686-0000", "text": "He hoped there would be stew for dinner, turnips and carrots and bruised potatoes, and fat mutton pieces to be ladled out in thick, peppered, flour fattened sauce,", "audio_sec": 10.435, "infer_sec": 0.144909} +{"id": "1089-134686-0001", "text": "Stuff it into you his belly counselled him.", "audio_sec": 3.275, "infer_sec": 0.068974} +{"id": "1089-134686-0002", "text": "After early nightfall the yellow lamps would light up here and there the squalid quarter of the brothels.", "audio_sec": 6.625, "infer_sec": 0.096476} +{"id": "1089-134686-0003", "text": "Hello, Bertie, An good in your mind?", "audio_sec": 2.68, "infer_sec": 0.045516} +{"id": "1089-134686-0004", "text": "Number ten. Fresh Nelly is waiting on you. Good night, husband,", "audio_sec": 5.215, "infer_sec": 0.077822} +{"id": "1089-134686-0005", "text": "The music came nearer and he recalled the words, the words of Shelley's fragment upon the moon wandering companionless, pale for weariness.", "audio_sec": 9.635, "infer_sec": 0.081702} +{"id": "1089-134686-0006", "text": "The dull light fell more faintly upon the page whereon another equation began to unfold itself slowly, and to spread abroad its widening tail.", "audio_sec": 10.555, "infer_sec": 0.114563} +{"id": "1089-134686-0007", "text": "A cold, lucid indifference reigned in his soul,", "audio_sec": 4.275, "infer_sec": 0.050751} +{"id": "1089-134686-0008", "text": "The chaos in which his ardour extinguished itself was a cold, indifferent knowledge of himself,", "audio_sec": 6.73, "infer_sec": 0.075928} +{"id": "1089-134686-0009", "text": "At most, by an alms given to a beggar whose blessing he fled from, he might hope wearily to win for himself some measure of actual grace.", "audio_sec": 10.575, "infer_sec": 0.110875} +{"id": "1089-134686-0010", "text": "Well, now, Ennis, I declare you have a head, and so has my stick", "audio_sec": 4.405, "infer_sec": 0.061259} +{"id": "1089-134686-0011", "text": "On Saturday mornings when the sodality met in the chapel to recite the little office, his place was a cushioned kneeling desk at the right of the altar from which he led his wing of boys through the responses.", "audio_sec": 12.445, "infer_sec": 0.115832} +{"id": "1089-134686-0012", "text": "Her eyes seemed to regard him with mild pity. H holiness, a strange light glowing faintly upon her frail flesh, did not humiliate the sinner who approached her.", "audio_sec": 11.64, "infer_sec": 0.101798} +{"id": "1089-134686-0013", "text": "If ever he was impelled to cast sin from him and to repent, the impulse that moved him was the wish to be her knight.", "audio_sec": 7.915, "infer_sec": 0.072459} +{"id": "1089-134686-0014", "text": "He tried to think how it could be", "audio_sec": 2.225, "infer_sec": 0.044121} +{"id": "1089-134686-0015", "text": "but the dusk, deepening in the school room, covered over his thoughts. The bell rang,", "audio_sec": 5.815, "infer_sec": 0.06494} +{"id": "1089-134686-0016", "text": "then you can ask him questions on the catechism Daedalus.", "audio_sec": 3.54, "infer_sec": 0.047568} +{"id": "1089-134686-0017", "text": "Stephen, leaning back and drawing idly on his scribbler, listened to the talk about him which Heron checked from time to time by saying,", "audio_sec": 8.87, "infer_sec": 0.082732} +{"id": "1089-134686-0018", "text": "It was strange, too, that he found an arid pleasure in following up to the end the rigid lines of the doctrines of the Church, and penetrating into obscure silences only to hear and feel the more deeply his own condemnation.", "audio_sec": 15.72, "infer_sec": 0.139279} +{"id": "1089-134686-0019", "text": "The sentence of Saint James, which says that he who offends against one commandment becomes guilty of all, had seemed to him first a swollen phrase until he had begun to grope in the darkness of his own state.", "audio_sec": 13.895, "infer_sec": 0.11085} +{"id": "1089-134686-0020", "text": "If a man had stolen a pound in his youth and had used that pound to amass a huge fortune, how much was he obliged to give back? The pound he had stolen only, or the pound together with the compound interest accruing upon it, or all his huge fortune?", "audio_sec": 16.79, "infer_sec": 0.140545} +{"id": "1089-134686-0021", "text": "If a layman, in giving baptism, pour the water before saying the words, is the child baptized?", "audio_sec": 6.55, "infer_sec": 0.062722} +{"id": "1089-134686-0022", "text": "How comes it that while the first Beatitude promises the kingdom of heaven to the poor of heart, the second Beatitude promises also to the meek that they shall possess the land?", "audio_sec": 11.175, "infer_sec": 0.098018} +{"id": "1089-134686-0023", "text": "Why was the sacrament of the Eucharist instituted under the two species of bread and wine if Jesus Christ be present body and blood, soul and divinity, in the bread alone, and in the wine alone?", "audio_sec": 13.275, "infer_sec": 0.109161} +{"id": "1089-134686-0024", "text": "If the wine change into vinegar and the host crumble into corruption after they have been consecrated, is Jesus Christ still present under their species as God and as man?", "audio_sec": 11.655, "infer_sec": 0.097497} +{"id": "1089-134686-0025", "text": "A gentle kick from the tall boy in the bench behind urged Stephen to ask a difficult question.", "audio_sec": 6.61, "infer_sec": 0.062937} +{"id": "1089-134686-0026", "text": "The Rctor did not ask for a catechism to hear the lesson from,", "audio_sec": 4.01, "infer_sec": 0.053779} +{"id": "1089-134686-0027", "text": "He clasped his hands on the desk and said,", "audio_sec": 2.71, "infer_sec": 0.046177} +{"id": "1089-134686-0028", "text": "The retreat will begin on Wednesday afternoon in honour of Saint Francis Xavier whose feast day is Saturday.", "audio_sec": 7.83, "infer_sec": 0.074114} +{"id": "1089-134686-0029", "text": "On Friday confession will be heard all the afternoon after Beads.", "audio_sec": 4.67, "infer_sec": 0.053645} +{"id": "1089-134686-0030", "text": "beware of making that mistake", "audio_sec": 2.715, "infer_sec": 0.043634} +{"id": "1089-134686-0031", "text": "Stephen's heart began slowly to fold and fade with fear like a withering flower.", "audio_sec": 6.615, "infer_sec": 0.06431} +{"id": "1089-134686-0032", "text": "He is called, as you know, the Apostle of the Indies.", "audio_sec": 4.09, "infer_sec": 0.050244} +{"id": "1089-134686-0033", "text": "A great Saint, Saint Francis Xavier", "audio_sec": 3.33, "infer_sec": 0.047005} +{"id": "1089-134686-0034", "text": "The Rector paused, and then, shaking his clasped hands before him, went on", "audio_sec": 5.81, "infer_sec": 0.058684} +{"id": "1089-134686-0035", "text": "He had the faith in him that moves mountains,", "audio_sec": 3.445, "infer_sec": 0.047591} +{"id": "1089-134686-0036", "text": "a great Saint Saint Francis Xavier,", "audio_sec": 3.25, "infer_sec": 0.045676} +{"id": "1089-134686-0037", "text": "In the silence their dark fire kindled the dusk into a tawny glow,", "audio_sec": 5.21, "infer_sec": 0.056579} +{"id": "1089-134691-0000", "text": "He could wait no longer,", "audio_sec": 2.085, "infer_sec": 0.041198} +{"id": "1089-134691-0001", "text": "For a full hour he had paced up and down, waiting, but he could wait no longer.", "audio_sec": 5.415, "infer_sec": 0.056617} +{"id": "1089-134691-0002", "text": "He set off abruptly for the bull, walking rapidly lest his father's shrill whistle might call him back, and in a few moments he had rounded the curve at the police barrack, and was safe.", "audio_sec": 11.6, "infer_sec": 0.097694} +{"id": "1089-134691-0003", "text": "The University", "audio_sec": 2.175, "infer_sec": 0.038157} +{"id": "1089-134691-0004", "text": "Pride after satisfaction uplifted him like long slow waves.", "audio_sec": 5.175, "infer_sec": 0.057904} +{"id": "1089-134691-0005", "text": "whose feet are as the feet of hearts, and underneath the everlasting arms", "audio_sec": 5.36, "infer_sec": 0.059213} +{"id": "1089-134691-0006", "text": "the pride of that dim image brought back to his mind the dignity of the office he had refused.", "audio_sec": 5.895, "infer_sec": 0.060038} +{"id": "1089-134691-0007", "text": "Soon the whole bridge was trembling and resounding.", "audio_sec": 3.44, "infer_sec": 0.048595} +{"id": "1089-134691-0008", "text": "The uncouth faces passed him two by two, stained yellow or red or livid by the sea, and as he strove to look at them with ease and indifference, a faint stain of personal shame and commiseration rose to his own face.", "audio_sec": 14.985, "infer_sec": 0.11863} +{"id": "1089-134691-0009", "text": "Angry with himself, he tried to hide his face from their eyes by gazing down sideways into the shallow, swirling water under the bridge, but he still saw a reflection therein of their top heavy silk hats, and humble tape like collars and loosely hanging clerical clothes. Brke", "audio_sec": 20.055, "infer_sec": 0.16267} +{"id": "1089-134691-0010", "text": "Brother McARle Brother Kyoff", "audio_sec": 3.195, "infer_sec": 0.043061} +{"id": "1089-134691-0011", "text": "Their piety would be, like their names, like their faces, like their clothes, and it was idle for him to tell himself that their humble and contrite hearts it might be, paid a far richer tribute of devotion than his had ever been, a gift tenfold more acceptable than his elaborate adoration.", "audio_sec": 20.01, "infer_sec": 0.154048} +{"id": "1089-134691-0012", "text": "It was idle for him to move himself to be generous towards them, to tell himself that if he ever came to their gates, stripped of his pride, beaten and in beggar' weeds, that they would be generous towards him, loving him as themselves.", "audio_sec": 15.03, "infer_sec": 0.114434} +{"id": "1089-134691-0013", "text": "idle and embittering finally to argue, against his own dispassionate certitude, that the commandment of love bade us not to love our neighbour as ourselves with the same amount and intensity of love, but to love him as ourselves with the same kind of love.", "audio_sec": 16.33, "infer_sec": 0.128761} +{"id": "1089-134691-0014", "text": "The phrase and the day and the scene harmonized in accord.", "audio_sec": 4.755, "infer_sec": 0.052816} +{"id": "1089-134691-0015", "text": "Words Was it their colors?", "audio_sec": 3.395, "infer_sec": 0.049341} +{"id": "1089-134691-0016", "text": "They were voyaging across the deserts of the sky, a host of nomads on the march, voyaging high over Ireland, westward bound.", "audio_sec": 9.06, "infer_sec": 0.080424} +{"id": "1089-134691-0017", "text": "The Europe they had come from lay out there beyond the Irish Sea, Europe of strange tongues and valleied and would be girt and citadelled, and of entrenched and marthalled races.", "audio_sec": 11.695, "infer_sec": 0.097473} +{"id": "1089-134691-0018", "text": "Aain Aain", "audio_sec": 3.09, "infer_sec": 0.044083} +{"id": "1089-134691-0019", "text": "A voice from beyond the world was calling", "audio_sec": 3.155, "infer_sec": 0.045891} +{"id": "1089-134691-0020", "text": "Hello, Stephanos Here comes the Daedalus,", "audio_sec": 3.99, "infer_sec": 0.050858} +{"id": "1089-134691-0021", "text": "Their diving stone, poised on its rude supports and rocking under their plunges, and the rough hewn stones of the sloping breakwater over which they scrambled in their horse play, gleamed with cold, wet lustre.", "audio_sec": 13.37, "infer_sec": 0.106765} +{"id": "1089-134691-0022", "text": "He stood still in deference to their calls, and parried their banter with easy words", "audio_sec": 5.635, "infer_sec": 0.058152} +{"id": "1089-134691-0023", "text": "It was a pain to see them, and a sword like pain to see the signs of adolescence that made repellent their pitiable nakedness.", "audio_sec": 7.735, "infer_sec": 0.0717} +{"id": "1089-134691-0024", "text": "StEfanos Stad los", "audio_sec": 2.215, "infer_sec": 0.041827} +{"id": "1089-134691-0025", "text": "A moment before the ghost of the ancient Kingdom of the Danes had looked forth through the vesture of the haze wrapped city.", "audio_sec": 8.005, "infer_sec": 0.076131} +{"id": "1188-133604-0000", "text": "You will find me continually speaking of four men Titian, Holbein, Turner, and Tintaret, in almost the same terms.", "audio_sec": 10.725, "infer_sec": 0.092123} +{"id": "1188-133604-0001", "text": "They unite every quality and sometimes you will find me referring to them as colorists, sometimes as chiarcurists.", "audio_sec": 9.04, "infer_sec": 0.07987} +{"id": "1188-133604-0002", "text": "By being studious of colour they are studious of division, and while the Cioscurus devotes himself to the representation of degrees of force in one thing unseeparated light, the colorists have for their function, the attainment of beauty by arrangement of the divisions of light.", "audio_sec": 17.96, "infer_sec": 0.140282} +{"id": "1188-133604-0003", "text": "My first and principal reason was that they enforced, beyond all resistance, on any student who might attempt to copy them this method of laying portions of distinct hue side by side.", "audio_sec": 12.61, "infer_sec": 0.101854} +{"id": "1188-133604-0004", "text": "Some of the touches, indeed, when the tint has been mixed with much water, have been laid in little drops or ponds, so that the pigment might crystallize hard at the edge.", "audio_sec": 10.65, "infer_sec": 0.092409} +{"id": "1188-133604-0005", "text": "It is the head of a parrot with a little flower in his beak from a picture of Carpaccios, one of his series of the life of Saint George.", "audio_sec": 8.56, "infer_sec": 0.078026} +{"id": "1188-133604-0006", "text": "Then he comes to the beak of it", "audio_sec": 2.4, "infer_sec": 0.043523} +{"id": "1188-133604-0007", "text": "The brown ground beneath is left for the most part. One touch of black is put for the hollow, two delicate lines of dark grrey to find the outer curve, and one little quivering touch of white draws the inner edge of the mandible.", "audio_sec": 14.24, "infer_sec": 0.116451} +{"id": "1188-133604-0008", "text": "For, believe me, the final philosophy of art can only ratify their opinion that the beauty of a cock robin is to be red, and of a grass plot to be green, and the best skill of art is in instantly seizing on the manifold deliciousness of light, which you can only seize by precision of instantaneous touch.", "audio_sec": 20.755, "infer_sec": 0.178816} +{"id": "1188-133604-0009", "text": "Now you will see in these studies that the moment the white is enclosed properly and harmonized with the other hues, it becomes somehow more precious and pearly than the white paper. and that I am not afraid to leave a whole field of untreated white paper all round it, being sure that even the little diamonds in the round window will tell as jewels, if they are graded justly.", "audio_sec": 23.06, "infer_sec": 0.197506} +{"id": "1188-133604-0010", "text": "But in this vignette, copied from Turner, you have the two principles brought out perfectly.", "audio_sec": 6.095, "infer_sec": 0.058861} +{"id": "1188-133604-0011", "text": "They are beyond all other works that I know existing, dependent for their effect on low, subdued tones, their favourite choice in time of day being either dawn or twilight, and even their brightest sunsets produced chiefly out of grreay paper.", "audio_sec": 15.19, "infer_sec": 0.124836} +{"id": "1188-133604-0012", "text": "It may be that a great colorist will use his utmost force of colour as a singer his full power of voice, but, loud or low the virtue is in both cases always in refinement, never in loudness.", "audio_sec": 14.65, "infer_sec": 0.115468} +{"id": "1188-133604-0013", "text": "It must, remember, be one or the other.", "audio_sec": 3.02, "infer_sec": 0.044363} +{"id": "1188-133604-0014", "text": "Do not, therefore, think that the Gothic school is an easy one.", "audio_sec": 4.39, "infer_sec": 0.054714} +{"id": "1188-133604-0015", "text": "The law of that school is that everything shall be seen clearly, or at least, only in such mist or faintness as shall be delightful. And I have no doubt that the best introduction to it would be the elementary practice of painting every study on a golden ground.", "audio_sec": 16.085, "infer_sec": 0.130682} +{"id": "1188-133604-0016", "text": "This at once compels you to understand that the work is to be imaginative and decorative, that it represents beautiful things, in the clearest way, but not under existing conditions, and that, in fact, you are producing jewellelers's work rather than pictures.", "audio_sec": 16.595, "infer_sec": 0.126591} +{"id": "1188-133604-0017", "text": "That a style is restrained or severe does not mean that it is also erroneous.", "audio_sec": 4.615, "infer_sec": 0.052743} +{"id": "1188-133604-0018", "text": "In all early Gothic art indeed, you will find failure of this kind, especially distortion and rigidity, which are in many respects painfully to be compared with the splendid repose of classic art.", "audio_sec": 11.55, "infer_sec": 0.100295} +{"id": "1188-133604-0019", "text": "The large letter contains, indeed, entirely feeble and ill drawn figures. That is merely childish and failing work of an inferior hand. It is not characteristic of Gothic, or any other school.", "audio_sec": 13.93, "infer_sec": 0.113145} +{"id": "1188-133604-0020", "text": "But, observe, you can only do this on one condition, that of striving also to create in reality, the beauty which you seek in imagination.", "audio_sec": 10.26, "infer_sec": 0.088828} +{"id": "1188-133604-0021", "text": "It will be wholly impossible for you to retain the tranquity of temper and felicity of faith necessary for noble purist painting, unless you are actively engaged in promoting the felicity and peace of practical life.", "audio_sec": 14.02, "infer_sec": 0.114648} +{"id": "1188-133604-0022", "text": "You must look at him in the face, fight him, conquer him with what scathhe you may you need not think to keep out of the way of him.", "audio_sec": 9.63, "infer_sec": 0.082464} +{"id": "1188-133604-0023", "text": "The colorist says, First of all, as my delicious parquet was ruby, so this nasty viper shall be black. And then is the question, Can I round him off, even though he is black, and make him slimy, and yet springy and close down, clotted like a pool of black blood on the earth, all the same?", "audio_sec": 23.67, "infer_sec": 0.20822} +{"id": "1188-133604-0024", "text": "Nothing will be more precious to you, I think, in the practical study of art, than the conviction which will force itself on you more and more every hour, of the way all things are bound together, little and great, in spirit and in matter.", "audio_sec": 15.24, "infer_sec": 0.116448} +{"id": "1188-133604-0025", "text": "You know I haveve just been telling you how this school of materialism and clay involved itself at last in cloud and fire.", "audio_sec": 7.45, "infer_sec": 0.067781} +{"id": "1188-133604-0026", "text": "Here is an equally typical Greek school landscape by Wilson Lost wholly in golden mist, the trees so slightly drawn that you don't know if they are trees or towers, and no care for color whatsoever. Perfectly deceptive and marvellous effect of sunshine through the mist. Apollo and the Python", "audio_sec": 20.125, "infer_sec": 0.156772} +{"id": "1188-133604-0027", "text": "Now here is Rapfhael exactly between the two, trees still drawn leaf by leaf, wholly formal, but beautiful mist coming gradually into the distance.", "audio_sec": 11.245, "infer_sec": 0.093724} +{"id": "1188-133604-0028", "text": "Well then last, here is Turner's, Greek school of the highest class, and you define his art absolutely, as first the displaying intensely and with the sternest intellect of natural form as it is, and then the envelopment of it with cloud and fire.", "audio_sec": 19.005, "infer_sec": 0.15024} +{"id": "1188-133604-0029", "text": "Only there are two sorts of cloud and fire.", "audio_sec": 3.705, "infer_sec": 0.04647} +{"id": "1188-133604-0030", "text": "He knows them both.", "audio_sec": 1.915, "infer_sec": 0.041995} +{"id": "1188-133604-0031", "text": "There's one and there's another the Dudley and the Flint.", "audio_sec": 4.25, "infer_sec": 0.052993} +{"id": "1188-133604-0032", "text": "It is only a pencil outline by Edward Byrne Jones, in illustration of the story of Psyche. It is the introduction of Psyche after all her troubles into heaven.", "audio_sec": 10.985, "infer_sec": 0.09321} +{"id": "1188-133604-0033", "text": "Every plant in the grass is set formally, grows perfectly, and may be realized completely.", "audio_sec": 6.625, "infer_sec": 0.063298} +{"id": "1188-133604-0034", "text": "Exquisite order and universal with eternal life and light, this is the faith and effort of the schools of Crstal and you may describe and complete their work quite literally, by taking any verses of Chaucer in his tender mood, and observing how he insists on the clearness and brightness first, and then on the order.", "audio_sec": 20.905, "infer_sec": 0.176166} +{"id": "1188-133604-0035", "text": "Thus, in Chaucer's dream", "audio_sec": 2.925, "infer_sec": 0.042017} +{"id": "1188-133604-0036", "text": "In both these high mythical subjects the surrounding nature, though suffering, is still dignified and beautiful.", "audio_sec": 7.97, "infer_sec": 0.071915} +{"id": "1188-133604-0037", "text": "Every line in which the master traces it, even where seemingly negligent, is lovely and set down with a meditative calmness, which makes these two etchings capable of being placed beside the most tranquil work of Holbein, or Dure.", "audio_sec": 14.51, "infer_sec": 0.115061} +{"id": "1188-133604-0038", "text": "But now here is the subject of which you will wonder at first why Turner drew it at all,", "audio_sec": 5.365, "infer_sec": 0.057592} +{"id": "1188-133604-0039", "text": "it has no beauty whatsoever, no specialty of picturesqueness, and all its lines are cramped and poor.", "audio_sec": 6.625, "infer_sec": 0.066934} +{"id": "1188-133604-0040", "text": "The crampness and the poverty are all intended.", "audio_sec": 3.23, "infer_sec": 0.048914} +{"id": "1188-133604-0041", "text": "It is a gleaner bringing down her one sheaf of corn to an old water mill, itself mossy and rent, scarcely able to get its stones to turn.", "audio_sec": 10.07, "infer_sec": 0.086242} +{"id": "1188-133604-0042", "text": "The scene is absolutely arcadian,", "audio_sec": 2.66, "infer_sec": 0.042567} +{"id": "1188-133604-0043", "text": "See that your lies being nothing worse than a boy's climbing for his entangled kite.", "audio_sec": 4.885, "infer_sec": 0.056501} +{"id": "1188-133604-0044", "text": "It will be well for you, if you join not with those who instead of kites fly falcons, who instead of obeying the last words of the great cloud shepherd, to feed his sheep, live the lives. How much less than vanity of the Wwolf and the gear eagle", "audio_sec": 18.545, "infer_sec": 0.143574} +{"id": "121-121726-0000", "text": "also a popular contrivance, whereby love making may be suspended, but not stopped during the picnic season.", "audio_sec": 8.46, "infer_sec": 0.071696} +{"id": "121-121726-0001", "text": "HurRang The tiresome product of a tireless tongue", "audio_sec": 5.925, "infer_sec": 0.063386} +{"id": "121-121726-0002", "text": "Anger pain Painful to hear", "audio_sec": 4.41, "infer_sec": 0.053657} +{"id": "121-121726-0003", "text": "Hay Fver A heart trouble caused by falling in love with a Graph's widow.", "audio_sec": 6.755, "infer_sec": 0.06875} +{"id": "121-121726-0004", "text": "Heaven a good place to be raised to.", "audio_sec": 4.02, "infer_sec": 0.052064} +{"id": "121-121726-0005", "text": "Hedge Oence", "audio_sec": 3.1, "infer_sec": 0.047836} +{"id": "121-121726-0006", "text": "Hredity The cause of all our faults", "audio_sec": 3.895, "infer_sec": 0.051055} +{"id": "121-121726-0007", "text": "HOorse Sense A degree of wisdom that keeps one from betting on the races.", "audio_sec": 6.73, "infer_sec": 0.065172} +{"id": "121-121726-0008", "text": "HoseS. Man's Ecuse for wetting the walk", "audio_sec": 4.99, "infer_sec": 0.05601} +{"id": "121-121726-0009", "text": "HOotel A place where a guest often gives up good dollars for poor quarters.", "audio_sec": 7.26, "infer_sec": 0.068674} +{"id": "121-121726-0010", "text": "House Caning A domestic upheaval that makes it easy for the goovernment to enlist all the soldiers it needs.", "audio_sec": 9.81, "infer_sec": 0.084228} +{"id": "121-121726-0011", "text": "HusSband The next thing to a wife", "audio_sec": 4.035, "infer_sec": 0.05167} +{"id": "121-121726-0012", "text": "Hussy, woman, and Bond Tie", "audio_sec": 4.045, "infer_sec": 0.054205} +{"id": "121-121726-0013", "text": "tied to a woman", "audio_sec": 2.49, "infer_sec": 0.043762} +{"id": "121-121726-0014", "text": "HypocrT A horse dealer", "audio_sec": 3.165, "infer_sec": 0.04472} +{"id": "121-123852-0000", "text": "Those pretty wrongs that liberty commits When I am some time absent from thy heart, Thy beauty, and thy years fall well befits, For still temptation follows where thou art", "audio_sec": 17.695, "infer_sec": 0.137971} +{"id": "121-123852-0001", "text": "Aye me.", "audio_sec": 1.87, "infer_sec": 0.036453} +{"id": "121-123852-0002", "text": "No matter then, although my foot did stand Upon the farthest earth, rememoved from thee For nimble thought can jump both sea and land, As soon as think the place where he would be, Buth", "audio_sec": 17.285, "infer_sec": 0.138174} +{"id": "121-123852-0003", "text": "Thought kills me that I am not thought, To leap large lengths of miles when thou art gone, But that so much of earth and water wrought I must attend time's leisure with my moan Receiving n by elements so slow, But heavy tears, badges of either's woe.", "audio_sec": 23.505, "infer_sec": 0.192616} +{"id": "121-123852-0004", "text": "My heart doth plead that thou in him dost lie A closet never pierced with crystal eyes But the defendant doth that plead deny, And says in him thy fair appearance lies", "audio_sec": 16.29, "infer_sec": 0.123492} +{"id": "121-123859-0000", "text": "You are my all the world, and I must strive To know my shames and praises from your tongue None else to me, nor I to none alive That my steeled sense or changes right or wrong", "audio_sec": 17.39, "infer_sec": 0.135493} +{"id": "121-123859-0001", "text": "Oh 'is the first, 'is flattery in my seeing, and my great mind most kingly drinks it up. Mine eye well knows what with his gust is green, And to his palate doth prepare the cup If it be poisonedd, 'is the lesser sin That mine eye loves it, and doth first begin", "audio_sec": 25.395, "infer_sec": 0.219661} +{"id": "121-123859-0002", "text": "But reckoning time, whose million accidents creep in twwixt vows, and change decrees of kings, Tan's sacred beauty, blunt the sharpest intents, Diverts strong minds to the course of altering things, Alas, why fearing of time's tyranny? mightight I not then say, Now I love you best, When I with certain orer in certainty, Crowning the present, Doubting of the rest?", "audio_sec": 30.04, "infer_sec": 0.25361} +{"id": "121-123859-0003", "text": "Love is a babe Then might I not say so T give full growth to that which still doth grow", "audio_sec": 10.825, "infer_sec": 0.088852} +{"id": "121-123859-0004", "text": "So I return rebuked to my content, and gain by ill thrice more than I have spent,", "audio_sec": 9.505, "infer_sec": 0.083438} +{"id": "121-127105-0000", "text": "It was this observation that drew from Douglas not immediately, but later in the evening, a reply that had the interesting consequence to which I call attention,", "audio_sec": 9.875, "infer_sec": 0.084989} +{"id": "121-127105-0001", "text": "someome one else told a story not particularly effective, which I saw he was not following.", "audio_sec": 5.025, "infer_sec": 0.056833} +{"id": "121-127105-0002", "text": "cried one of the women. He took no notice of her. He looked at me, but as if instead of me, he saw what he spoke of.", "audio_sec": 7.495, "infer_sec": 0.070749} +{"id": "121-127105-0003", "text": "There was a unanimous groan at this, and much reproach, after which in his preoccupied way he explained", "audio_sec": 7.725, "infer_sec": 0.072109} +{"id": "121-127105-0004", "text": "The story's written.", "audio_sec": 2.11, "infer_sec": 0.041235} +{"id": "121-127105-0005", "text": "I could write to my man and enclose the key. He could send down the packet as he finds it.", "audio_sec": 5.82, "infer_sec": 0.061072} +{"id": "121-127105-0006", "text": "The others resented postponement, but it was just his scruples that charmed me.", "audio_sec": 4.725, "infer_sec": 0.055808} +{"id": "121-127105-0007", "text": "To this his answer was prompt Oh, thank God no. And is the record yours?", "audio_sec": 5.79, "infer_sec": 0.06069} +{"id": "121-127105-0008", "text": "He hung fire again A woman's", "audio_sec": 2.76, "infer_sec": 0.043955} +{"id": "121-127105-0009", "text": "She has been dead these twenty years.", "audio_sec": 2.29, "infer_sec": 0.040435} +{"id": "121-127105-0010", "text": "She sent me the pages in question before she died.", "audio_sec": 2.85, "infer_sec": 0.042707} +{"id": "121-127105-0011", "text": "She was the most agreeable woman I've ever known in her position. She would have been worthy of any whatever.", "audio_sec": 5.78, "infer_sec": 0.05921} +{"id": "121-127105-0012", "text": "It wasasn't simply that she said so, but that I knew she hadn't. I was sure I could see.", "audio_sec": 4.83, "infer_sec": 0.053498} +{"id": "121-127105-0013", "text": "You'll easily judge why when you hear Because the thing had been such a scare? he continued to fix me.", "audio_sec": 5.895, "infer_sec": 0.059098} +{"id": "121-127105-0014", "text": "You are acute.", "audio_sec": 2.255, "infer_sec": 0.040187} +{"id": "121-127105-0015", "text": "He quitted the fire and dropped back into his chair.", "audio_sec": 2.96, "infer_sec": 0.045827} +{"id": "121-127105-0016", "text": "probablyroably not till the second post.", "audio_sec": 2.03, "infer_sec": 0.038684} +{"id": "121-127105-0017", "text": "It was almost the tone of hope. Everybody will stay.", "audio_sec": 2.695, "infer_sec": 0.042779} +{"id": "121-127105-0018", "text": "cried the ladies, whose departure had been fixed,", "audio_sec": 2.77, "infer_sec": 0.042992} +{"id": "121-127105-0019", "text": "misses Griffin, however, expressed the need for a little more light.", "audio_sec": 3.525, "infer_sec": 0.047288} +{"id": "121-127105-0020", "text": "Who was it she was in love with? The story will tell, I took upon myself to reply. Oh, I can't wait for the story. The story won't tell, said Douglas. Not in any literal vulgar way. More's the pity then?", "audio_sec": 14.355, "infer_sec": 0.111763} +{"id": "121-127105-0021", "text": "Won't you tell Douglas?", "audio_sec": 2.0, "infer_sec": 0.039046} +{"id": "121-127105-0022", "text": "Well, if I don't know who she was in love with, I know who he was", "audio_sec": 5.075, "infer_sec": 0.054715} +{"id": "121-127105-0023", "text": "Let me say here distinctly to have done with it, that this narrative, from an exact transcript of my own made much later, is what I shall presently give", "audio_sec": 10.91, "infer_sec": 0.091227} +{"id": "121-127105-0024", "text": "poor Douglas, before his death, when it was in sight, committed to me the man that reached him on the third of these days, and that, on the same spot, with immense effect, he began to read to our hushed little circle, on the night of the fourth,", "audio_sec": 14.45, "infer_sec": 0.112882} +{"id": "121-127105-0025", "text": "The departing ladies who had said they would stay didn't, of course, thank heaven, stay, they departed, in consequence of arrangements made, in a rage of curiosity, as they professed, produced by the touches with which he had already worked us up.", "audio_sec": 16.065, "infer_sec": 0.125574} +{"id": "121-127105-0026", "text": "The first of these touches conveyed that the written statement took up the tale, at a point after it had, in a manner, begun,", "audio_sec": 7.53, "infer_sec": 0.066966} +{"id": "121-127105-0027", "text": "He had for his own town residence a big house filled with the spoils of travel and the trophies of the chase but it was to his country home. an old family place in Essex, that he wished her immediately to proceed", "audio_sec": 13.87, "infer_sec": 0.115713} +{"id": "121-127105-0028", "text": "The awkward thing was that they had practically no other relations, and that his own affairs took up all his time,", "audio_sec": 6.75, "infer_sec": 0.065132} +{"id": "121-127105-0029", "text": "There were plenty of people to help, but of course the young lady, who should go down as governness, would be in supreme authority,", "audio_sec": 7.31, "infer_sec": 0.069824} +{"id": "121-127105-0030", "text": "I don't anticipate.", "audio_sec": 2.175, "infer_sec": 0.041658} +{"id": "121-127105-0031", "text": "She was young, untried, nervous. It was a vision of serious duties and little company of really great loneliness.", "audio_sec": 10.765, "infer_sec": 0.093228} +{"id": "121-127105-0032", "text": "Yes, but that's just the beauty of her passion.", "audio_sec": 3.17, "infer_sec": 0.043614} +{"id": "121-127105-0033", "text": "It was the beauty of it.", "audio_sec": 2.355, "infer_sec": 0.041057} +{"id": "121-127105-0034", "text": "It sounded dull, but sounded strange and all the more so because of his main condition which was", "audio_sec": 7.41, "infer_sec": 0.066998} +{"id": "121-127105-0035", "text": "She promised to do this, and she mentioned to me that when for a moment, disburdened, delighted, he held her hand, thanking her for the sacrifice. She already felt rewarded", "audio_sec": 14.15, "infer_sec": 0.110949} +{"id": "121-127105-0036", "text": "But was that all her reward? one of the ladies asked.", "audio_sec": 4.15, "infer_sec": 0.048852} +{"id": "1221-135766-0000", "text": "How strange it seemed to the sad woman, as she watched the growth and the beauty that became every day more brilliant, and the intelligence that threw its quivering sunshine over the tiny features of this child.", "audio_sec": 12.435, "infer_sec": 0.102955} +{"id": "1221-135766-0001", "text": "God, as a direct consequence of the sin which man thus punished, had given her a lovely child, whose place was on that same dishonored bosom to connect her parent for ever with the race and descent of mortals, and to be finally a blessed soul in heaven.", "audio_sec": 16.715, "infer_sec": 0.129664} +{"id": "1221-135766-0002", "text": "Yet these thoughts affected Hester Prynne less with hope than apprehension.", "audio_sec": 4.825, "infer_sec": 0.052998} +{"id": "1221-135766-0003", "text": "The child had a native grace which does not invariably coexist with faultless beauty. Its attire, however simple, always impressed the beholder as if it were the very garb that precisely became it best.", "audio_sec": 13.72, "infer_sec": 0.113456} +{"id": "1221-135766-0004", "text": "This outward mutability indicated, and did not more than fairly express the various properties of her inner life.", "audio_sec": 7.44, "infer_sec": 0.068555} +{"id": "1221-135766-0005", "text": "Hester could only account for the child's character, and even then most vaguely and imperfectly, by recalling what she herself had been during that momentous period while Pearl was imbibing her soul from the spiritual world, and her bodily frame from its material of earth,", "audio_sec": 16.645, "infer_sec": 0.135224} +{"id": "1221-135766-0006", "text": "they were now illuminated by the morning radiance of a young child's disposition but, later in the day of earthly existence, might be prolific of the storm and whirlwind.", "audio_sec": 11.415, "infer_sec": 0.093823} +{"id": "1221-135766-0007", "text": "Hester Prn, nevertheless, the loving mother of this one child, ran little risk of erring on the side of undue severity.", "audio_sec": 8.795, "infer_sec": 0.078177} +{"id": "1221-135766-0008", "text": "mindful, however, of her own errors and misfortunes, she early sought to impose a tender but strict control over the infant immortality that was committed to her charge.", "audio_sec": 10.78, "infer_sec": 0.095551} +{"id": "1221-135766-0009", "text": "As to any other kind of discipline, whether addressed to her mind or heart, Little Pearl might or might not be within its reach in accordance with the caprice that ruled the moment.", "audio_sec": 10.19, "infer_sec": 0.088013} +{"id": "1221-135766-0010", "text": "It was a look so intelligent, yet inexplicable, perverse, sometimes so malicious, but generally accompanied by a wild flow of spirits, that Hester could not help questioning at such moments whether Pearl was a human child.", "audio_sec": 15.05, "infer_sec": 0.122384} +{"id": "1221-135766-0011", "text": "Beholding it, Hester was constrained to rush towards the child, to pursue the little elf in the flight which she invariably began, to snatch her to her bosom with a close pressure and earnest kisses, not so much from overflowing love as to assure herself that Pearl was flesh and blood and not utterly delusive.", "audio_sec": 21.345, "infer_sec": 0.176568} +{"id": "1221-135766-0012", "text": "Brooding over all these matters, the mother felt like one who has evoked a spirit, but by some irregularity in the process of conjuration, has failed to win the master word that should control this new and incomprehensible intelligence.", "audio_sec": 16.22, "infer_sec": 0.125923} +{"id": "1221-135766-0013", "text": "Pearl was a born outcast of the infantile world.", "audio_sec": 3.645, "infer_sec": 0.046582} +{"id": "1221-135766-0014", "text": "Pearl saw, and gazed intently, but never sought to make acquaintance.", "audio_sec": 4.75, "infer_sec": 0.055096} +{"id": "1221-135766-0015", "text": "If spoken to, she would not speak again.", "audio_sec": 2.63, "infer_sec": 0.044006} +{"id": "1221-135767-0000", "text": "Hester Pryinne went one day to the mansion of Governor Bellingham with a pair of gloves which she had fringed and embroidered to his order, and which were to be worn on some great occasion of state, for, though the chances of a popular election had caused this former ruler to descend a step or two from the highest rank, he still held an honourable and influential place among the colonial magistracy.", "audio_sec": 24.85, "infer_sec": 0.205234} +{"id": "1221-135767-0001", "text": "Another and far more important reason than the delivery of a pair of embroidered gloves impelled Hester at this time to seek an interview with a personage of so much power and activity in the affairs of the settlement.", "audio_sec": 13.43, "infer_sec": 0.103667} +{"id": "1221-135767-0002", "text": "At that epoic of pristine simplicity, however, matters of even slighter public interest and of far less intrinsic weight than the welfare of Hester and her child were strangely mixed up with the deliberations of legislators and acts of state.", "audio_sec": 16.12, "infer_sec": 0.127892} +{"id": "1221-135767-0003", "text": "The period was hardly if at all, earlier than that of our story, when a dispute concerning the right of property in a pig not only caused a fierce and bitter contest in the legislative body of the colony, but resulted in an important modification of the framework itself of the legislature.", "audio_sec": 18.63, "infer_sec": 0.143552} +{"id": "1221-135767-0004", "text": "We have spoken of Pearl's rich and luxuriant beauty, a beauty that shone with deep and vivid tints, a bright complexion, eyes possessing intensity both of depth and glow, and hair already of a deep, glossy brown, and which, in after years would be nearly akin to black.", "audio_sec": 19.09, "infer_sec": 0.14684} +{"id": "1221-135767-0005", "text": "It was the Scarlet letter in another form the sccarlet letter endowed with life.", "audio_sec": 5.865, "infer_sec": 0.05935} +{"id": "1221-135767-0006", "text": "The mother herself, as if the red ignominy were so deeply scorched into her brain, that all her conceptions assumed its form, had carefully wrought out the similitude, lavishing many hours of morbid ingenuity to create an analogy between the object of her affection and the emblem of her guilt and torture,", "audio_sec": 20.56, "infer_sec": 0.180165} +{"id": "1221-135767-0007", "text": "But in truth, Pearl was the one as well as the other, and only in consequence of that identity had Hester contrived so perfectly to represent the scarlet letter in her appearance.", "audio_sec": 12.77, "infer_sec": 0.101251} +{"id": "1221-135767-0008", "text": "Come, therefore, and let us fling mud at them.", "audio_sec": 3.095, "infer_sec": 0.045473} +{"id": "1221-135767-0009", "text": "But Pearl, who was a dauntless child, after frowning, stamping her foot, and shaking her little hand with a variety of threatening gestures, suddenly made a rush at the knot of her enemies, and put them all to flight.", "audio_sec": 13.34, "infer_sec": 0.110884} +{"id": "1221-135767-0010", "text": "She screamed and shouted too, with a terrific volume of sound, which, doubtless, caused the hearts of the fugitives to quake within them.", "audio_sec": 8.2, "infer_sec": 0.073132} +{"id": "1221-135767-0011", "text": "It was further decorated with strange and seemingly cabalistic figures and diagrams suitable to the quaint taste of the age which had been drawn in the stucco, when newly laid on, and had now grown hard and durable for the admiration of after times.", "audio_sec": 16.51, "infer_sec": 0.132008} +{"id": "1221-135767-0012", "text": "They approached the door, which was of an arched form, and flanked on each side by a narrow tower or projection of the edifice, in both of which were lattice windows, the wooden shutters to close over them at need.", "audio_sec": 13.885, "infer_sec": 0.111179} +{"id": "1221-135767-0013", "text": "Lifting the iron hammer that hung at the portal, Hester Pryinn gave a summons which was answered by one of the Governor's bond servants, a free born Englishman, but now a seven years slave.", "audio_sec": 11.985, "infer_sec": 0.100529} +{"id": "1221-135767-0014", "text": "Yea, his honorrable worship is within, but he hath a godly minister or two with him, and likewise a lech.", "audio_sec": 7.07, "infer_sec": 0.066666} +{"id": "1221-135767-0015", "text": "ye may not see his worship now.", "audio_sec": 2.85, "infer_sec": 0.046096} +{"id": "1221-135767-0016", "text": "With many variations, suggested by the nature of his building materials, diversity of climate, and a different mode of social life, Governor Bellingham had planned his new habitation after the residences of gentlemen of Feris state in his native land.", "audio_sec": 15.255, "infer_sec": 0.123297} +{"id": "1221-135767-0017", "text": "On the table, in token that the sentiment of oldld English hospitality had not been left behind, stood a large pewter tankard, at the bottom of which, had Hester or Pearl peeped into it, they might have seen the frothy remnant of a recent draught of ale.", "audio_sec": 16.72, "infer_sec": 0.13241} +{"id": "1221-135767-0018", "text": "Little Pearl, who was as greatly pleased with the gleaming armour as she had been with the glittering frontestpiece of the house, spent some time looking into the polished mirror of the breastplate.", "audio_sec": 11.16, "infer_sec": 0.092413} +{"id": "1221-135767-0019", "text": "Mother cried she, I see you here. Look look", "audio_sec": 3.78, "infer_sec": 0.047441} +{"id": "1221-135767-0020", "text": "In truth, she seemed absolutely hidden behind it.", "audio_sec": 3.345, "infer_sec": 0.049216} +{"id": "1221-135767-0021", "text": "Pearl accordingly ran to the bow window at the further end of the hall, and looked along the vista of a garden walk, carpeted with closely shaven grass, and bordered with some rude and immature attempt at shrubbery.", "audio_sec": 12.72, "infer_sec": 0.106893} +{"id": "1221-135767-0022", "text": "but the proprietor appeared already to have relinquished as hopeless, the effort to perpetuate on this side of the Atlantic, in a hard soil, and amid the close struggle for subsistence, the native English taste for ornamental gardening.", "audio_sec": 14.395, "infer_sec": 0.112378} +{"id": "1221-135767-0023", "text": "There were a few rose bushes, however, and a number of apple trees, probably the descendants of those planted by the Reverend mister Blackstone, the first settler of the peninsula, that half mythological personage who rides through our early annals, seated on the back of a bull.", "audio_sec": 16.27, "infer_sec": 0.127348} +{"id": "1221-135767-0024", "text": "Pearl, seeing the rose bushes, began to cry for a red rose and would not be pacified.", "audio_sec": 5.85, "infer_sec": 0.05912} +{"id": "1284-1180-0000", "text": "He wore blue silk stockings, blue knee pants with gold buckles, a blue ruffled waist and a jacket of bright blue braided with gold.", "audio_sec": 8.12, "infer_sec": 0.074516} +{"id": "1284-1180-0001", "text": "His hat had a peaked crown at a flat brim, and around the brim was a row of tiny golden bells that tinkled when he moved.", "audio_sec": 7.755, "infer_sec": 0.071156} +{"id": "1284-1180-0002", "text": "Instead of shoes, the old man wore boots with turnover tops, and his blue coat had wide cuffs of gold braid.", "audio_sec": 7.68, "infer_sec": 0.073798} +{"id": "1284-1180-0003", "text": "For a long time he had wished to explore the beautiful land of Oz in which they lived,", "audio_sec": 4.835, "infer_sec": 0.056141} +{"id": "1284-1180-0004", "text": "When they were outside, Ung simply latched the door and started up the path.", "audio_sec": 4.285, "infer_sec": 0.054445} +{"id": "1284-1180-0005", "text": "No one would disturb their little house, even if any one came so far into the thick forest while they were gone.", "audio_sec": 6.55, "infer_sec": 0.066827} +{"id": "1284-1180-0006", "text": "At the foot of the mountain that separated the country of the Munchkins from the country of the Gillicins, the path divided.", "audio_sec": 6.865, "infer_sec": 0.066868} +{"id": "1284-1180-0007", "text": "He knew it would take them to the house of the crooked magician, whom he had never seen, but who was their nearest neighbor.", "audio_sec": 6.265, "infer_sec": 0.063975} +{"id": "1284-1180-0008", "text": "All the morning they trudged up the mountain path, and at noon Unk and Ojo sat on a fallen tree trunk, and ate the last of the bread which the old munchkin had placed in his pocket.", "audio_sec": 10.49, "infer_sec": 0.091345} +{"id": "1284-1180-0009", "text": "Then they started on again, and two hours later came in sight of the house of doctor Pipp.", "audio_sec": 6.285, "infer_sec": 0.062954} +{"id": "1284-1180-0010", "text": "Unk knocked at the door of the house, and a chubby, pleasant faced woman, dressed all in blue, opened it, and greeted the visitors with a smile.", "audio_sec": 8.635, "infer_sec": 0.078025} +{"id": "1284-1180-0011", "text": "I am, my dear, and all strangers are welcome to my home.", "audio_sec": 4.275, "infer_sec": 0.05318} +{"id": "1284-1180-0012", "text": "We have come from a far lonelier place than this. A lonelier place", "audio_sec": 4.88, "infer_sec": 0.058558} +{"id": "1284-1180-0013", "text": "and you must be O Jo the unlucky, she added.", "audio_sec": 3.705, "infer_sec": 0.05136} +{"id": "1284-1180-0014", "text": "Ojo had never eaten such a fine meal in all his life,", "audio_sec": 3.665, "infer_sec": 0.048671} +{"id": "1284-1180-0015", "text": "We're traveling, replied O Jo, and we stopped at your house just to rest and refresh ourselves.", "audio_sec": 5.835, "infer_sec": 0.060614} +{"id": "1284-1180-0016", "text": "The woman seemed thoughtful.", "audio_sec": 2.13, "infer_sec": 0.041303} +{"id": "1284-1180-0017", "text": "At one end stood a great fireplace, in which a blue log was blazing with a blue flame, and over the fire hung four kettles in a row, all bubbling and steaming at a great rate.", "audio_sec": 10.68, "infer_sec": 0.091476} +{"id": "1284-1180-0018", "text": "It takes me several years to make this magic powder, but at this moment I am pleased to say it is nearly done. You see, I am making it for my good wife Margolotte, who wants to use some of it for a purpose of her own.", "audio_sec": 12.005, "infer_sec": 0.099007} +{"id": "1284-1180-0019", "text": "You must know, said Marglotte, when they were all seated together on the broad window seat, that my husband foolishly gave away all the powder of life he first made to old Momby the witch, who used to live in the country of the Gillicans to the north of here.", "audio_sec": 15.025, "infer_sec": 0.116442} +{"id": "1284-1180-0020", "text": "the first lot we tested on our glass hat, which not only began to live but has lived ever since.", "audio_sec": 5.87, "infer_sec": 0.058514} +{"id": "1284-1180-0021", "text": "I think the next glass cat the magician makes will have neither brains nor heart, for then it will not object to catching mice, and may prove of some use to us.", "audio_sec": 9.84, "infer_sec": 0.087578} +{"id": "1284-1180-0022", "text": "I'm afraid I don't know much about the land of us.", "audio_sec": 2.885, "infer_sec": 0.045948} +{"id": "1284-1180-0023", "text": "You see, I've lived all my life with Unc Nunky, the silent one, and there was no one to tell me anything.", "audio_sec": 5.61, "infer_sec": 0.059788} +{"id": "1284-1180-0024", "text": "That is one reason you are Ojo the unlucky, said the woman, in a sympathetic tone,", "audio_sec": 5.26, "infer_sec": 0.058005} +{"id": "1284-1180-0025", "text": "I think I must show you my patchwork girl, said Marglottet, laughing at the boy's astonishment. for she is rather difficult to explain.", "audio_sec": 8.705, "infer_sec": 0.078242} +{"id": "1284-1180-0026", "text": "But first I will tell you that for many years I have longed for a servant to help me with the housewk, and to cook the meals and wash the dishes.", "audio_sec": 8.29, "infer_sec": 0.073857} +{"id": "1284-1180-0027", "text": "Yet that task was not so easy as you may suppose,", "audio_sec": 3.27, "infer_sec": 0.046825} +{"id": "1284-1180-0028", "text": "a bed quilt, made of patches of different kinds and colors of cloth, all neatly sewed together", "audio_sec": 6.045, "infer_sec": 0.061361} +{"id": "1284-1180-0029", "text": "Sometimes it is called a crazy quilt, because the patches and colours are so mixed up", "audio_sec": 5.335, "infer_sec": 0.059091} +{"id": "1284-1180-0030", "text": "When I found it I said to myself that it would do nicely for my servant girl, for when she was brought to life she would not be proud nor haughty, as the glass cat is, for such a dreadful mixture of colours would discourage her from trying to be as dignified as the blue munchkins are.", "audio_sec": 16.22, "infer_sec": 0.13033} +{"id": "1284-1180-0031", "text": "At the Eerald City where our Princess Osma lives, green is the popular color.", "audio_sec": 4.825, "infer_sec": 0.055283} +{"id": "1284-1180-0032", "text": "I will show you what a good job I did and she went to a tall cupboard and threw open the doors.", "audio_sec": 5.78, "infer_sec": 0.063424} +{"id": "1284-1181-0000", "text": "Ojo examined this curious contrivance with wonder", "audio_sec": 3.965, "infer_sec": 0.052391} +{"id": "1284-1181-0001", "text": "Margleotte had first made the girl's form from the patchwork quilt, and then she had dressed it with a patchwork skirt and an apron with pockets in it, using the same gay material throughout.", "audio_sec": 11.43, "infer_sec": 0.098167} +{"id": "1284-1181-0002", "text": "The head of the patchwork girl was the most curious part of her.", "audio_sec": 3.835, "infer_sec": 0.047835} +{"id": "1284-1181-0003", "text": "The hair was of brown yarn and hung down on her neck in several neat braids,", "audio_sec": 4.505, "infer_sec": 0.054867} +{"id": "1284-1181-0004", "text": "Gold is the most common metal in the land of Oz, and is used for many purposes because it is soft and pliable.", "audio_sec": 7.15, "infer_sec": 0.068971} +{"id": "1284-1181-0005", "text": "No, I forgot all about the brains, exclaimed the woman,", "audio_sec": 3.855, "infer_sec": 0.049637} +{"id": "1284-1181-0006", "text": "Well, that may be true, agreed Marglotte. but on the contrary, a servant with too much brains is sure to become independent and high and mighty, and feel above her work.", "audio_sec": 11.405, "infer_sec": 0.09646} +{"id": "1284-1181-0007", "text": "She poured into the dish a quantity from each of these bottles.", "audio_sec": 4.04, "infer_sec": 0.049132} +{"id": "1284-1181-0008", "text": "I think that will do, she continued, for the other qualities are not needed in a servant.", "audio_sec": 6.08, "infer_sec": 0.064954} +{"id": "1284-1181-0009", "text": "She ran to her husband's side at once, and helped him lift the four kettles from the fire,", "audio_sec": 5.245, "infer_sec": 0.060356} +{"id": "1284-1181-0010", "text": "Their contents had all boiled away, leaving in the bottom of each kettle a few grains of fine white powder.", "audio_sec": 6.435, "infer_sec": 0.064487} +{"id": "1284-1181-0011", "text": "Very carefully the magician removed this powder, placing it all together in a golden dish, where he mixed it with a golden spoon.", "audio_sec": 7.75, "infer_sec": 0.071841} +{"id": "1284-1181-0012", "text": "No one saw him do this, for all were looking at the powder of life, but soon the woman remembered what she had been doing, and came back to the cupboard.", "audio_sec": 8.51, "infer_sec": 0.076717} +{"id": "1284-1181-0013", "text": "Ojo became a bit uneasy at this, for he had already put quite a lot of the cleverness powder in the dish, but he dared not interfere, and so he comforted himself with the thought that one cannot have too much cleverness.", "audio_sec": 12.66, "infer_sec": 0.104598} +{"id": "1284-1181-0014", "text": "He selected a small gold bottle with a pepper box top, so that the powder might be sprinkled on any object through the small holes.", "audio_sec": 7.92, "infer_sec": 0.073239} +{"id": "1284-1181-0015", "text": "Most people talk too much, so it is a relief to find one who talks too little.", "audio_sec": 5.115, "infer_sec": 0.056208} +{"id": "1284-1181-0016", "text": "I am not allowed to perform magic, except for my own amusement, he told his visitors, as he lighted a pipe, with a crooked stem, and began to smoke.", "audio_sec": 9.515, "infer_sec": 0.085329} +{"id": "1284-1181-0017", "text": "The wizard of Oz, who used to be a humbug and knew no magic at all, has been taking lessons of Glinda, and I'm told he is getting to be a pretty good wizard, but he is merely the assistant of the great sorceress.", "audio_sec": 11.775, "infer_sec": 0.098834} +{"id": "1284-1181-0018", "text": "It truly is, asserted the magician.", "audio_sec": 3.16, "infer_sec": 0.04374} +{"id": "1284-1181-0019", "text": "I now use them as ornamental statuary in my garden,", "audio_sec": 3.2, "infer_sec": 0.049841} +{"id": "1284-1181-0020", "text": "Dear me, what a chatter box you're getting to be unk, remarked the magician, who was pleased with the compliment.", "audio_sec": 6.73, "infer_sec": 0.066556} +{"id": "1284-1181-0021", "text": "asked the voice, in scornful accents,", "audio_sec": 2.7, "infer_sec": 0.043433} +{"id": "1284-134647-0000", "text": "The grateful applause of the clergy has consecrated the memory of a prince who indulged their passions and promoted their interest.", "audio_sec": 8.53, "infer_sec": 0.075809} +{"id": "1284-134647-0001", "text": "The Edict of Milan, the G Charter of Tleration, had confirmed to each individual of the Roman world the privilege of choosing and professing his own religion.", "audio_sec": 10.275, "infer_sec": 0.087885} +{"id": "1284-134647-0002", "text": "but this inestimable privilege was soon violated, with the knowledge of truth, the emperor imbibed the maxims of persecution, and the sects which descended from the Catholic Church were afflicted and oppressed by the triumph of Christianity.", "audio_sec": 15.11, "infer_sec": 0.119758} +{"id": "1284-134647-0003", "text": "Constantine easily believed that the heretics, who presumed to dispute his opinions, or to oppose his commands, were guilty of the most absurd and criminal obstinacy, and that a seasonable application of moderate severities might save those unhappy men from the danger of an everlasting condemnation.", "audio_sec": 20.145, "infer_sec": 0.153014} +{"id": "1284-134647-0004", "text": "Some of the penal regulations were copied from the Edicts of Diocletian, and this method of conversion was applauded by the same bishops who had felt the hand of oppression and pleaded for the rights of humanity.", "audio_sec": 12.835, "infer_sec": 0.104916} +{"id": "1284-134647-0005", "text": "They asserted with confidence, and almost with exultation, that the apostolical succession was interrupted, that all the bishops of Europe and Asia were infected by the contagion of guilt and schism, and that the prerogatives of the Catholic Church were confined to the chosen portion of the African believers, who alone had preserved inviolate, the integrity of their faith and discipline.", "audio_sec": 23.335, "infer_sec": 0.193358} +{"id": "1284-134647-0006", "text": "Bishops, virgins, and even spotless infants were subjected to the disgrace of a public penance before they could be admitted to the communion of the Donatists.", "audio_sec": 10.155, "infer_sec": 0.081072} +{"id": "1284-134647-0007", "text": "Proscribed by the civil and ecclesiastical powers of the Empire, the Donatists still maintained in some provinces, particularly in Numidia their superior numbers, and four hundred bishops acknowledged the jurisdiction of their primate.", "audio_sec": 14.17, "infer_sec": 0.116498} +{"id": "1320-122612-0000", "text": "Since the period of our tale the active spirit of the country has surrounded it with a belt of rich and thriving settlements, though none but the hunter or the savage is ever known even now to penetrate its wild recesses.", "audio_sec": 13.48, "infer_sec": 0.108988} +{"id": "1320-122612-0001", "text": "The dews were suffered to exhale, and the sun had dispersed the mists, and was shedding a strong and clear light in the forest when the travellers resumed their journey.", "audio_sec": 9.52, "infer_sec": 0.083085} +{"id": "1320-122612-0002", "text": "After proceeding a few miles, the progress of Hawkeye, who led the advance became more deliberate and watchful.", "audio_sec": 7.46, "infer_sec": 0.070006} +{"id": "1320-122612-0003", "text": "He often stopped to examine the trees, nor did he cross a rivulet without attentively considering the quantity, the velocity, and the colour of its waters.", "audio_sec": 9.865, "infer_sec": 0.085409} +{"id": "1320-122612-0004", "text": "Distrusting his own judgment, his appeals to the opinion of Cingachkuk were frequent and earnest.", "audio_sec": 6.425, "infer_sec": 0.06315} +{"id": "1320-122612-0005", "text": "Yet here are we within a short range of the scaroons, and not a sign of a trail have we crossed.", "audio_sec": 5.915, "infer_sec": 0.061901} +{"id": "1320-122612-0006", "text": "Let us retrace our steps and examine as we go with keener eyes.", "audio_sec": 4.845, "infer_sec": 0.056407} +{"id": "1320-122612-0007", "text": "Chingachkook had caught the look, and motioning with his hand, he bade him speak.", "audio_sec": 5.54, "infer_sec": 0.061322} +{"id": "1320-122612-0008", "text": "the eyes of the whole party followed the unexpected movement, and read their success in the air of triumph that the youth assumed.", "audio_sec": 7.875, "infer_sec": 0.07311} +{"id": "1320-122612-0009", "text": "It would have been more wonderful had he spoken without a bidding,", "audio_sec": 3.88, "infer_sec": 0.050246} +{"id": "1320-122612-0010", "text": "See, said Uncas, pointing north and south, at the evident marks of the broad trail on either side of him, the dark hair has gone toward the forest.", "audio_sec": 10.195, "infer_sec": 0.08682} +{"id": "1320-122612-0011", "text": "If a rock, or a rivulet, or a bit of earth harder than common, severed the links of the clue they followed, the true eye of the scout recovered them at a distance, and seldom rendered the delay of a single moment necessary.", "audio_sec": 13.695, "infer_sec": 0.109356} +{"id": "1320-122612-0012", "text": "Exttinguished brands were lying around a spring, the awles of a deer were scattered about the place, and the trees bore evident marks of having been browsed by the horses.", "audio_sec": 10.49, "infer_sec": 0.08898} +{"id": "1320-122612-0013", "text": "a circle of a few hundred feet in circumference was drawn, and each of the party took a segment for his portion.", "audio_sec": 6.55, "infer_sec": 0.063705} +{"id": "1320-122612-0014", "text": "The examination, however, resulted in no discovery,", "audio_sec": 3.515, "infer_sec": 0.048243} +{"id": "1320-122612-0015", "text": "the whole party crowded to the spot where Unkas pointed out the impression of a moccasin in the moist alluvion.", "audio_sec": 6.385, "infer_sec": 0.063146} +{"id": "1320-122612-0016", "text": "Run back, Uncas, and bring me the size of the singer's foot.", "audio_sec": 3.49, "infer_sec": 0.04708} +{"id": "1320-122617-0000", "text": "Notwithstanding the high resolution of Hawkeye, he fully comprehended all the difficulties and danger he was about to incur.", "audio_sec": 7.835, "infer_sec": 0.072186} +{"id": "1320-122617-0001", "text": "In his return to the camp his acute and practised intellects were intently engaged in devising means to counteract a watchfulness and suspicion on the part of his enemies that he knew were in no degree inferior to his own.", "audio_sec": 14.055, "infer_sec": 0.112383} +{"id": "1320-122617-0002", "text": "In other words, while he had implicit faith in the ability of Balaam's ass to speak, he was somewhat sceptical on the subject of a bear's singing, and yet he had been assured of the latter on the testimony of his own exquisite organs.", "audio_sec": 13.585, "infer_sec": 0.108693} +{"id": "1320-122617-0003", "text": "There was something in his air and manner that betrayed to the scout the utter confusion of the state of his mind.", "audio_sec": 6.285, "infer_sec": 0.061622} +{"id": "1320-122617-0004", "text": "The ingenious Hawkeye, who recalled the hasty manner in which the other had abandoned his post at the bedside of the sick woman, was not without his suspicions concerning the subject of so much solemn deliberation.", "audio_sec": 12.26, "infer_sec": 0.104565} +{"id": "1320-122617-0005", "text": "The bear shook his shaggy sides, and then a well known voice replied,", "audio_sec": 4.4, "infer_sec": 0.053212} +{"id": "1320-122617-0006", "text": "Can these things be? returned David, breathing more freely, as the truth began to dawn upon him.", "audio_sec": 5.655, "infer_sec": 0.06076} +{"id": "1320-122617-0007", "text": "Come, come returned Hawkeye, uncasing his honest countenance, the better to assure the wavering confidence of his companion. You may see a skin which, if it be not as white as one of the gentle ones, has no tinge of red to it that the winds of the heaven and the sun have not bestowed. Now let us to business.", "audio_sec": 18.525, "infer_sec": 0.145288} diff --git a/deploy/parakeet-stt/edge-stt/results/parakeet/hyps_tdt.jsonl b/deploy/parakeet-stt/edge-stt/results/parakeet/hyps_tdt.jsonl new file mode 100644 index 0000000..af2ff46 --- /dev/null +++ b/deploy/parakeet-stt/edge-stt/results/parakeet/hyps_tdt.jsonl @@ -0,0 +1,300 @@ +{"id": "1089-134686-0000", "text": "He hoped there would be stew for dinner, turnips and carrots and bruised potatoes, and fat mutton pieces to be ladled out in thick, peppered, flower fattened sauce,", "audio_sec": 10.435, "infer_sec": 0.245608} +{"id": "1089-134686-0001", "text": "Stuff it into you his belly counseled him.", "audio_sec": 3.275, "infer_sec": 0.093212} +{"id": "1089-134686-0002", "text": "After early nightfall the yellow lamps would light up here and there the squalid quarter of the brothels", "audio_sec": 6.625, "infer_sec": 0.140805} +{"id": "1089-134686-0003", "text": "Hello, Bertie, any good in your mind?", "audio_sec": 2.68, "infer_sec": 0.079391} +{"id": "1089-134686-0004", "text": "Number ten Fresh Nelly is waiting on you Good night, husband.", "audio_sec": 5.215, "infer_sec": 0.108543} +{"id": "1089-134686-0005", "text": "The music came nearer and he recalled the words, the words of Shelley's fragment upon the moon wandering companionless, pale for weariness.", "audio_sec": 9.635, "infer_sec": 0.176693} +{"id": "1089-134686-0006", "text": "The dull light fell more faintly upon the page whereon another equation began to unfold itself slowly and to spread abroad its widening tail.", "audio_sec": 10.555, "infer_sec": 0.170186} +{"id": "1089-134686-0007", "text": "A cold, lucid indifference reigned in his soul,", "audio_sec": 4.275, "infer_sec": 0.092857} +{"id": "1089-134686-0008", "text": "The chaos in which his ardour extinguished itself was a cold, indifferent knowledge of himself,", "audio_sec": 6.73, "infer_sec": 0.120112} +{"id": "1089-134686-0009", "text": "At most, by an alms given to a beggar whose blessing he fled from, he might hope wearily to win for himself some measure of actual grace.", "audio_sec": 10.575, "infer_sec": 0.170099} +{"id": "1089-134686-0010", "text": "Well, now, Ennis, I declare you have a head, and so has my stick", "audio_sec": 4.405, "infer_sec": 0.095326} +{"id": "1089-134686-0011", "text": "On Saturday mornings when the sodality met in the chapel to recite the little office, his place was a cushioned kneeling desk at the right of the altar, from which he led his wing of boys through the responses.", "audio_sec": 12.445, "infer_sec": 0.198175} +{"id": "1089-134686-0012", "text": "Her eyes seemed to regard him with mild pity her holiness, a strange light glowing faintly upon her frail flesh, did not humiliate the sinner who approached her.", "audio_sec": 11.64, "infer_sec": 0.177872} +{"id": "1089-134686-0013", "text": "If ever he was impelled to cast sin from him and to repent, the impulse that moved him was the wish to be her knight.", "audio_sec": 7.915, "infer_sec": 0.12543} +{"id": "1089-134686-0014", "text": "He tried to think how it could be", "audio_sec": 2.225, "infer_sec": 0.05892} +{"id": "1089-134686-0015", "text": "but the dusk, deepening in the schoolroom, covered over his thoughts. The bell rang,", "audio_sec": 5.815, "infer_sec": 0.106885} +{"id": "1089-134686-0016", "text": "Then you can ask him questions on the catechism Dedalus.", "audio_sec": 3.54, "infer_sec": 0.084045} +{"id": "1089-134686-0017", "text": "Stephen, leaning back and drawing idly on his scribbler, listened to the talk about him which Heron checked from time to time by saying", "audio_sec": 8.87, "infer_sec": 0.144207} +{"id": "1089-134686-0018", "text": "It was strange, too, that he found an arid pleasure in following up to the end the rigid lines of the doctrines of the church and penetrating into obscure silences only to hear and feel the more deeply his own condemnation.", "audio_sec": 15.72, "infer_sec": 0.239102} +{"id": "1089-134686-0019", "text": "The sentence of Saint James, which says that he who offends against one commandment becomes guilty of all had seemed to him first a swollen phrase, until he had begun to grope in the darkness of his own state.", "audio_sec": 13.895, "infer_sec": 0.206713} +{"id": "1089-134686-0020", "text": "If a man had stolen a pound in his youth and had used that pound to amass a huge fortune, how much was he obliged to give back the pound he had stolen only or the pound together with the compound interest accruing upon it or all his huge fortune?", "audio_sec": 16.79, "infer_sec": 0.245447} +{"id": "1089-134686-0021", "text": "If a layman, in giving baptism, pour the water before saying the words, is the child baptized?", "audio_sec": 6.55, "infer_sec": 0.128687} +{"id": "1089-134686-0022", "text": "How come is it that while the first beatitude promises the kingdom of heaven to the poor of heart, the second beatitude promises also to the meek that they shall possess the land?", "audio_sec": 11.175, "infer_sec": 0.177675} +{"id": "1089-134686-0023", "text": "Why was the sacrament of the Eucharist instituted under the two species of bread and wine if Jesus Christ be present body and blood, soul and divinity, in the bread alone, and in the wine alone?", "audio_sec": 13.275, "infer_sec": 0.204221} +{"id": "1089-134686-0024", "text": "If the wine change into vinegar, and the host crumble into corruption after they have been consecrated, is Jesus Christ still present under their species as God and as man?", "audio_sec": 11.655, "infer_sec": 0.173022} +{"id": "1089-134686-0025", "text": "A gentle kick from the tall boy in the bench behind urged Stephen to ask a difficult question.", "audio_sec": 6.61, "infer_sec": 0.122516} +{"id": "1089-134686-0026", "text": "The rector did not ask for a catechism to hear the lesson from", "audio_sec": 4.01, "infer_sec": 0.085027} +{"id": "1089-134686-0027", "text": "He clasped his hands on the desk and said,", "audio_sec": 2.71, "infer_sec": 0.067275} +{"id": "1089-134686-0028", "text": "The retreat will begin on Wednesday afternoon in honor of Saint Francis Xavier whose feast day is Saturday.", "audio_sec": 7.83, "infer_sec": 0.131381} +{"id": "1089-134686-0029", "text": "On Friday confession will be heard all the afternoon after Beads", "audio_sec": 4.67, "infer_sec": 0.091228} +{"id": "1089-134686-0030", "text": "Beware of making that mistake", "audio_sec": 2.715, "infer_sec": 0.06876} +{"id": "1089-134686-0031", "text": "Stephen's heart began slowly to fold and fade with fear like a withering flower.", "audio_sec": 6.615, "infer_sec": 0.110246} +{"id": "1089-134686-0032", "text": "He is called, as you know, the Apostle of the Indies.", "audio_sec": 4.09, "infer_sec": 0.08524} +{"id": "1089-134686-0033", "text": "A great saint Saint Francis Xavier", "audio_sec": 3.33, "infer_sec": 0.083217} +{"id": "1089-134686-0034", "text": "The rector paused and then, shaking his clasped hands before him, went on", "audio_sec": 5.81, "infer_sec": 0.101039} +{"id": "1089-134686-0035", "text": "He had the faith in him that moves mountains", "audio_sec": 3.445, "infer_sec": 0.078258} +{"id": "1089-134686-0036", "text": "a great Saint Saint Francis Xavier", "audio_sec": 3.25, "infer_sec": 0.093563} +{"id": "1089-134686-0037", "text": "In the silence their dark fire kindled the dusk into a tawny glow", "audio_sec": 5.21, "infer_sec": 0.113188} +{"id": "1089-134691-0000", "text": "He could wait no longer", "audio_sec": 2.085, "infer_sec": 0.061267} +{"id": "1089-134691-0001", "text": "For a full hour he had paced up and down, waiting, but he could wait no longer.", "audio_sec": 5.415, "infer_sec": 0.102569} +{"id": "1089-134691-0002", "text": "He set off abruptly for the bull, walking rapidly lest his father's shrill whistle might call him back and in a few moments he had rounded the curve at the police barrack, and was safe.", "audio_sec": 11.6, "infer_sec": 0.19571} +{"id": "1089-134691-0003", "text": "The university", "audio_sec": 2.175, "infer_sec": 0.056225} +{"id": "1089-134691-0004", "text": "Pride after satisfaction uplifted him like long slow waves", "audio_sec": 5.175, "infer_sec": 0.097371} +{"id": "1089-134691-0005", "text": "whose feet are as the feet of hearts and underneath the everlasting arms", "audio_sec": 5.36, "infer_sec": 0.094658} +{"id": "1089-134691-0006", "text": "the pride of that dim image brought back to his mind the dignity of the office he had refused.", "audio_sec": 5.895, "infer_sec": 0.109753} +{"id": "1089-134691-0007", "text": "Soon the whole bridge was trembling and resounding.", "audio_sec": 3.44, "infer_sec": 0.081857} +{"id": "1089-134691-0008", "text": "The uncouth faces passed him two by two, stained yellow or red or livid by the sea and as he strove to look at them with ease and indifference a faint stain of personal shame and commiseration rose to his own face.", "audio_sec": 14.985, "infer_sec": 0.217001} +{"id": "1089-134691-0009", "text": "Angry with himself, he tried to hide his face from their eyes by gazing down sideways into the shallow, swirling water under the bridge, but he still saw a reflection therein of their top heavy silk hats, and humble tape like collars and loosely hanging clerical clothes. Brother Hicky", "audio_sec": 20.055, "infer_sec": 0.295588} +{"id": "1089-134691-0010", "text": "Brother McCardle Brother Kioff", "audio_sec": 3.195, "infer_sec": 0.077155} +{"id": "1089-134691-0011", "text": "Their piety would be, like their names, like their faces, like their clothes, and it was idle for him to tell himself that their humble and contrite hearts it might be, paid a far richer tribute of devotion than his had ever been, a gift tenfold more acceptable than his elaborate adoration.", "audio_sec": 20.01, "infer_sec": 0.285652} +{"id": "1089-134691-0012", "text": "It was idle for him to move himself to be generous towards them, to tell himself that if he ever came to their gates, stripped of his pride, beaten and in beggar's weeds, that they would be generous towards him, loving him as themselves.", "audio_sec": 15.03, "infer_sec": 0.208759} +{"id": "1089-134691-0013", "text": "Idle and embittering finally to argue against his own dispassionate certitude, that the commandment of love bade us not to love our neighbour as ourselves with the same amount and intensity of love but to love him as ourselves with the same kind of love.", "audio_sec": 16.33, "infer_sec": 0.226674} +{"id": "1089-134691-0014", "text": "The phrase and the day and the scene harmonized in accord", "audio_sec": 4.755, "infer_sec": 0.086008} +{"id": "1089-134691-0015", "text": "Words Was it their colors?", "audio_sec": 3.395, "infer_sec": 0.067579} +{"id": "1089-134691-0016", "text": "They were voyaging across the deserts of the sky, a host of nomads on the march, voyaging high over Ireland westward bound.", "audio_sec": 9.06, "infer_sec": 0.161586} +{"id": "1089-134691-0017", "text": "The Europe they had come from lay out there beyond the Irish sea, Europe of strange tongues and valley, and would be girt and citadeled and of entrenched and martialed races.", "audio_sec": 11.695, "infer_sec": 0.186671} +{"id": "1089-134691-0018", "text": "Again Again", "audio_sec": 3.09, "infer_sec": 0.062336} +{"id": "1089-134691-0019", "text": "A voice from beyond the world was calling", "audio_sec": 3.155, "infer_sec": 0.068157} +{"id": "1089-134691-0020", "text": "Hello, Stefanos here comes the Dedalus", "audio_sec": 3.99, "infer_sec": 0.079694} +{"id": "1089-134691-0021", "text": "Their diving stone, poised on its rude supports and rocking under their plunges, and the rough hewn stones of the sloping break water over which they scrambled in their horseplay gleamed with cold, wet lustre.", "audio_sec": 13.37, "infer_sec": 0.200733} +{"id": "1089-134691-0022", "text": "He stood still in deference to their calls, and parried their banter with easy words", "audio_sec": 5.635, "infer_sec": 0.099723} +{"id": "1089-134691-0023", "text": "It was a pain to see them, and a sword like pain to see the signs of adolescence that made repellent their pitiable nakedness.", "audio_sec": 7.735, "infer_sec": 0.126866} +{"id": "1089-134691-0024", "text": "Stefanos Stadlos", "audio_sec": 2.215, "infer_sec": 0.059298} +{"id": "1089-134691-0025", "text": "A moment before the ghost of the ancient kingdom of the Danes had looked forth through the vesture of the haze wrapped city.", "audio_sec": 8.005, "infer_sec": 0.133498} +{"id": "1188-133604-0000", "text": "You will find me continually speaking of four men Titian, Holbein, Turner, and Tintoret, in almost the same terms.", "audio_sec": 10.725, "infer_sec": 0.154719} +{"id": "1188-133604-0001", "text": "They unite every quality, and sometimes you will find me referring to them as colorists, sometimes as kiarascurists", "audio_sec": 9.04, "infer_sec": 0.136983} +{"id": "1188-133604-0002", "text": "By being studious of color they are studious of division, and while the Curoscurus devotes himself to the representation of degrees of force in one thing unseparated light, the colorists have for their function, the attainment of beauty by arrangement of the divisions of light.", "audio_sec": 17.96, "infer_sec": 0.263906} +{"id": "1188-133604-0003", "text": "My first and principal reason was that they enforced beyond all resistance, on any student who might attempt to copy them this method of laying portions of distinct hue side by side", "audio_sec": 12.61, "infer_sec": 0.178783} +{"id": "1188-133604-0004", "text": "Some of the touches, indeed, when the tint has been mixed with much water, have been laid in little drops or ponds, so that the pigment might crystallize hard at the edge.", "audio_sec": 10.65, "infer_sec": 0.166432} +{"id": "1188-133604-0005", "text": "It is the head of a parrot with a little flower in his beak from a picture of Carpaccios one of his series of the life of Saint George", "audio_sec": 8.56, "infer_sec": 0.14267} +{"id": "1188-133604-0006", "text": "Then he comes to the beak of it", "audio_sec": 2.4, "infer_sec": 0.062963} +{"id": "1188-133604-0007", "text": "The brown ground beneath is left for the most part. One touch of black is put for the hollow, two delicate lines of dark gray to find the outer curve, and one little quivering touch of white draws the inner edge of the mandible.", "audio_sec": 14.24, "infer_sec": 0.238211} +{"id": "1188-133604-0008", "text": "for, believe me, the final philosophy of art can only ratify their opinion that the beauty of a cockrobin is to be red, and of a grass plot to be green and the best skill of art is in instantly seizing on the manifold deliciousness of light, which you can only seize by precision of instantaneous touch.", "audio_sec": 20.755, "infer_sec": 0.308289} +{"id": "1188-133604-0009", "text": "Now you will see in these studies that the moment the white is enclosed properly and harmonized with the other hues, it becomes somehow more precious and pearly than the white paper and that I am not afraid to leave a whole field of untreated white paper all round it, being sure that even the little diamonds in the round window will tell as jewels, if they are graded justly.", "audio_sec": 23.06, "infer_sec": 0.344149} +{"id": "1188-133604-0010", "text": "But in this vignette, copied from Turner, you have the two principles brought out perfectly.", "audio_sec": 6.095, "infer_sec": 0.103561} +{"id": "1188-133604-0011", "text": "They are beyond all other works that I know existing, dependent for their effect on low, subdued tones their favourite choice in time of day being either dawn or twilight, and even their brightest sunsets produced chiefly out of gray paper.", "audio_sec": 15.19, "infer_sec": 0.223988} +{"id": "1188-133604-0012", "text": "It may be that a great colorless will use his utmost force of color as a singer his full power of voice, but loud or low the virtue is in both cases always in refinement, never in loudness.", "audio_sec": 14.65, "infer_sec": 0.204339} +{"id": "1188-133604-0013", "text": "It must, remember, be one or the other.", "audio_sec": 3.02, "infer_sec": 0.063417} +{"id": "1188-133604-0014", "text": "Do not, therefore, think that the Gothic school is an easy one.", "audio_sec": 4.39, "infer_sec": 0.08146} +{"id": "1188-133604-0015", "text": "The law of that school is that everything shall be seen clearly, or at least only in such mist or faintness as shall be delightful. And I have no doubt that the best introduction to it would be the elementary practice of painting every study on a golden ground.", "audio_sec": 16.085, "infer_sec": 0.227883} +{"id": "1188-133604-0016", "text": "This at once compels you to understand that the work is to be imaginative and decorative, that it represents beautiful things in the clearest way, but not under existing conditions and that in fact, you are producing jeweller's work rather than pictures.", "audio_sec": 16.595, "infer_sec": 0.224691} +{"id": "1188-133604-0017", "text": "That a style is restrained or severe does not mean that it is also erroneous", "audio_sec": 4.615, "infer_sec": 0.088098} +{"id": "1188-133604-0018", "text": "In all early gothic art indeed you will find failure of this kind, especially distortion and rigidity, which are in many respects painfully to be compared with the splendid repose of classic art.", "audio_sec": 11.55, "infer_sec": 0.182812} +{"id": "1188-133604-0019", "text": "The large letter contains, indeed, entirely feeble and ill drawn figures. That is merely childish and failing work of an inferior hand it is not characteristic of Gothic or any other school.", "audio_sec": 13.93, "infer_sec": 0.196091} +{"id": "1188-133604-0020", "text": "But observe you can only do this on one condition that of striving also to create in reality, the beauty which you seek in imagination.", "audio_sec": 10.26, "infer_sec": 0.147751} +{"id": "1188-133604-0021", "text": "It will be wholly impossible for you to retain the tranquility of temper and felicity of faith necessary for noble purist painting unless you are actively engaged in promoting the felicity and peace of practical life.", "audio_sec": 14.02, "infer_sec": 0.198582} +{"id": "1188-133604-0022", "text": "You must look at him in the face fight him, conquer him with what scath you may you need not think to keep out of the way of him.", "audio_sec": 9.63, "infer_sec": 0.129721} +{"id": "1188-133604-0023", "text": "The colorist says first of all as my delicious paracet was ruby, so this nasty viper shall be black and then is the question can I round him off, even though he is black, and make him slimy, and yet springy and close down, clotted like a pool of black blood on the earth all the same?", "audio_sec": 23.67, "infer_sec": 0.364922} +{"id": "1188-133604-0024", "text": "Nothing will be more precious to you, I think, in the practical study of art than the conviction which will force itself on you more and more every hour, of the way all things are bound together, little and great, in spirit and in matter.", "audio_sec": 15.24, "infer_sec": 0.211183} +{"id": "1188-133604-0025", "text": "You know I've just been telling you how this school of materialism in clay involved itself at last in cloud and fire", "audio_sec": 7.45, "infer_sec": 0.135877} +{"id": "1188-133604-0026", "text": "Here is an equally typical Greek school landscape by Wilson Lost wholly in golden mist, the trees so slightly drawn that you don't know if they are trees or towers, and no care for color whatsoever perfectly deceptive and marvelous effect of sunshine through the mist Apollo in the Python", "audio_sec": 20.125, "infer_sec": 0.295861} +{"id": "1188-133604-0027", "text": "Now here is Raphael exactly between the two, trees still drawn leaf by leaf, wholly formal, but beautiful mist coming gradually into the distance.", "audio_sec": 11.245, "infer_sec": 0.169398} +{"id": "1188-133604-0028", "text": "Well, then last, here is Turner's, Greek school of the highest class, and you define his art absolutely as first the displaying intensely and with the sternest intellect of natural form as it is, and then the envelopment of it with cloud and fire.", "audio_sec": 19.005, "infer_sec": 0.252626} +{"id": "1188-133604-0029", "text": "Only there are two sorts of cloud and fire", "audio_sec": 3.705, "infer_sec": 0.070734} +{"id": "1188-133604-0030", "text": "He knows them both", "audio_sec": 1.915, "infer_sec": 0.050894} +{"id": "1188-133604-0031", "text": "There's one and there's another the Dudley and the Flint.", "audio_sec": 4.25, "infer_sec": 0.082309} +{"id": "1188-133604-0032", "text": "It is only a pencil outline by Edward Byrne Jones in illustration of the story of Psyche. It is the introduction of Psyche after all her troubles into heaven.", "audio_sec": 10.985, "infer_sec": 0.172491} +{"id": "1188-133604-0033", "text": "Every plant in the grass is set formally, grows perfectly, and may be realized completely.", "audio_sec": 6.625, "infer_sec": 0.10552} +{"id": "1188-133604-0034", "text": "Exquisite order and universal with eternal life and light, this is the faith and effort of the schools of Christal, and you may describe and complete their work quite literally by taking any verses of Chaucer in his tender mood and observing how he insists on the clearness and brightness first, and then on the order.", "audio_sec": 20.905, "infer_sec": 0.300356} +{"id": "1188-133604-0035", "text": "Thus, in Chaucer's dream", "audio_sec": 2.925, "infer_sec": 0.063552} +{"id": "1188-133604-0036", "text": "In both these high mythical subjects the surrounding nature, though suffering, is still dignified and beautiful.", "audio_sec": 7.97, "infer_sec": 0.118991} +{"id": "1188-133604-0037", "text": "Every line in which the master traces it, even where seemingly negligent, is lovely and set down with a meditative calmness which makes these two etchings capable of being placed beside the most tranquil work of Holbein, or Dure.", "audio_sec": 14.51, "infer_sec": 0.208323} +{"id": "1188-133604-0038", "text": "But now here is the subject of which you will wonder at first why Turner drew it at all.", "audio_sec": 5.365, "infer_sec": 0.088513} +{"id": "1188-133604-0039", "text": "It has no beauty whatsoever, no specialty of picturesqueness, and all its lines are cramped and poor.", "audio_sec": 6.625, "infer_sec": 0.115065} +{"id": "1188-133604-0040", "text": "The crampness and the poverty are all intended.", "audio_sec": 3.23, "infer_sec": 0.069745} +{"id": "1188-133604-0041", "text": "It is a gleaner bringing down her one sheaf of corn to an old water mill, itself mossy and rent, scarcely able to get its stones to turn.", "audio_sec": 10.07, "infer_sec": 0.145413} +{"id": "1188-133604-0042", "text": "The scene is absolutely arcadian,", "audio_sec": 2.66, "infer_sec": 0.064803} +{"id": "1188-133604-0043", "text": "See that your lies being nothing worse than a boy's climbing for his entangled kite", "audio_sec": 4.885, "infer_sec": 0.096853} +{"id": "1188-133604-0044", "text": "It will be well for you if you join not with those who instead of kites fly falcons, who instead of obeying the last words of the great cloud shepherd, defeat his sheep, live the lives. How much less than vanity of the war wolf and the gear eagle", "audio_sec": 18.545, "infer_sec": 0.250044} +{"id": "121-121726-0000", "text": "also a popular contrivance, whereby love making may be suspended but not stopped during the picnic season.", "audio_sec": 8.46, "infer_sec": 0.12909} +{"id": "121-121726-0001", "text": "Hurrang The tiresome product of a tireless tongue", "audio_sec": 5.925, "infer_sec": 0.09233} +{"id": "121-121726-0002", "text": "Anger pain painful to hear", "audio_sec": 4.41, "infer_sec": 0.074396} +{"id": "121-121726-0003", "text": "Hay fever a heart trouble caused by falling in love with a Grass's widow", "audio_sec": 6.755, "infer_sec": 0.109584} +{"id": "121-121726-0004", "text": "Heaven a good place to be raised to", "audio_sec": 4.02, "infer_sec": 0.074569} +{"id": "121-121726-0005", "text": "Hedge offense", "audio_sec": 3.1, "infer_sec": 0.060752} +{"id": "121-121726-0006", "text": "HERREDY THE CAUSE OF ALL OR FALTS", "audio_sec": 3.895, "infer_sec": 0.089277} +{"id": "121-121726-0007", "text": "Horse sense a degree of wisdom that keeps one from betting on the races", "audio_sec": 6.73, "infer_sec": 0.102822} +{"id": "121-121726-0008", "text": "HOSE MAN'S EXCUSE for wetting the walk", "audio_sec": 4.99, "infer_sec": 0.094786} +{"id": "121-121726-0009", "text": "Hotel a place where a guest often gives up good dollars for poor quarters", "audio_sec": 7.26, "infer_sec": 0.108451} +{"id": "121-121726-0010", "text": "House cleaning A domestic upheaval that makes it easy for the government to enlist all the soldiers it needs", "audio_sec": 9.81, "infer_sec": 0.138271} +{"id": "121-121726-0011", "text": "Husband The next thing to a wife", "audio_sec": 4.035, "infer_sec": 0.070742} +{"id": "121-121726-0012", "text": "Hussy, woman and bond tie", "audio_sec": 4.045, "infer_sec": 0.074829} +{"id": "121-121726-0013", "text": "tied to a woman", "audio_sec": 2.49, "infer_sec": 0.057159} +{"id": "121-121726-0014", "text": "Hypocrite A horse dealer", "audio_sec": 3.165, "infer_sec": 0.067069} +{"id": "121-123852-0000", "text": "Those pretty wrongs that liberty commits When I am some time absent from thy heart Thy beauty and thy years fall well befits, for still temptation follows where thou art", "audio_sec": 17.695, "infer_sec": 0.227222} +{"id": "121-123852-0001", "text": "Aye me.", "audio_sec": 1.87, "infer_sec": 0.051517} +{"id": "121-123852-0002", "text": "No matter then, although my foot did stand, upon the farthest earth removed from thee, For nimble thought can jump both sea and land, as soon as think the place where he would be, but", "audio_sec": 17.285, "infer_sec": 0.21594} +{"id": "121-123852-0003", "text": "Thought kills me that I am not thought, To leap large lengths of miles when thou art gone, but that so much of earth and water wrought, I must attend time's leisure with my moan Receiving nought by elements so slow But heavy tears, badges of either's woe", "audio_sec": 23.505, "infer_sec": 0.313974} +{"id": "121-123852-0004", "text": "My heart doth plead that thou in him dost lie a closet never pierced with crystal eyes but the defendant doth that plead deny and says in him thy fair appearance lies", "audio_sec": 16.29, "infer_sec": 0.206102} +{"id": "121-123859-0000", "text": "You are my all the world, and I must strive to know my shames and praises from your tongue, none else to me, nor I to none alive, that my steeled sense or changes right or wrong", "audio_sec": 17.39, "infer_sec": 0.214238} +{"id": "121-123859-0001", "text": "Oh 'tis the first, 'tis flattery in my seeing, and my great mind most kingly drinks it up. Mine eye well knows what with his gust is green, and to his palate doth prepare the cup if it be poisoned, 'tis the lesser sin that mine eye loves it, and doth first begin", "audio_sec": 25.395, "infer_sec": 0.340144} +{"id": "121-123859-0002", "text": "But reckoning time, whose millioned accidents creep in twixt vows and change decrees of kings, Tan's sacred beauty, blunt the sharpest intents, diverts strong minds to the course of altering things, alas, why fearing of time's tyranny, might I not then say, Now I love you best when I was certain or in certainty crowning the present, doubting of the rest", "audio_sec": 30.04, "infer_sec": 0.409922} +{"id": "121-123859-0003", "text": "Love is a babe then might I not say so to give full growth to that which still doth grow", "audio_sec": 10.825, "infer_sec": 0.130801} +{"id": "121-123859-0004", "text": "So I return rebuked to my content and gain by ill thrice more than I have spent", "audio_sec": 9.505, "infer_sec": 0.128885} +{"id": "121-127105-0000", "text": "It was this observation that drew from Douglas not immediately but later in the evening, a reply that had the interesting consequence to which I call attention", "audio_sec": 9.875, "infer_sec": 0.153585} +{"id": "121-127105-0001", "text": "some one else told a story not particularly effective which I saw he was not following", "audio_sec": 5.025, "infer_sec": 0.089745} +{"id": "121-127105-0002", "text": "cried one of the women. He took no notice of her. He looked at me, but as if instead of me, he saw what he spoke of", "audio_sec": 7.495, "infer_sec": 0.118186} +{"id": "121-127105-0003", "text": "There was a unanimous groan at this, and much reproach, after which in his preoccupied way he explained", "audio_sec": 7.725, "infer_sec": 0.117694} +{"id": "121-127105-0004", "text": "The story's written.", "audio_sec": 2.11, "infer_sec": 0.056683} +{"id": "121-127105-0005", "text": "I could write to my man and enclose the key he could send down the packet as he finds it.", "audio_sec": 5.82, "infer_sec": 0.097985} +{"id": "121-127105-0006", "text": "The others resented postponement, but it was just his scruples that charmed me.", "audio_sec": 4.725, "infer_sec": 0.09553} +{"id": "121-127105-0007", "text": "To this his answer was prompt Oh thank God no and is the record yours?", "audio_sec": 5.79, "infer_sec": 0.098517} +{"id": "121-127105-0008", "text": "He hung fire again a woman's", "audio_sec": 2.76, "infer_sec": 0.064762} +{"id": "121-127105-0009", "text": "She has been dead these twenty years.", "audio_sec": 2.29, "infer_sec": 0.056642} +{"id": "121-127105-0010", "text": "She sent me the pages in question before she died.", "audio_sec": 2.85, "infer_sec": 0.065359} +{"id": "121-127105-0011", "text": "She was the most agreeable woman I've ever known in her position. She would have been worthy of any whatever", "audio_sec": 5.78, "infer_sec": 0.101806} +{"id": "121-127105-0012", "text": "wasn't simply that she said so, but that I knew she hadn't. I was sure I could see", "audio_sec": 4.83, "infer_sec": 0.095011} +{"id": "121-127105-0013", "text": "You'll easily judge why when you hear because the thing had been such a scare he continued to fix me.", "audio_sec": 5.895, "infer_sec": 0.103878} +{"id": "121-127105-0014", "text": "You are acute", "audio_sec": 2.255, "infer_sec": 0.054768} +{"id": "121-127105-0015", "text": "He quitted the fire and dropped back into his chair.", "audio_sec": 2.96, "infer_sec": 0.073076} +{"id": "121-127105-0016", "text": "probably not till the second post.", "audio_sec": 2.03, "infer_sec": 0.055333} +{"id": "121-127105-0017", "text": "It was almost the tone of hope. Everybody will stay.", "audio_sec": 2.695, "infer_sec": 0.067622} +{"id": "121-127105-0018", "text": "cried the ladies, whose departure had been fixed", "audio_sec": 2.77, "infer_sec": 0.073415} +{"id": "121-127105-0019", "text": "misses Griffin, however, expressed the need for a little more light.", "audio_sec": 3.525, "infer_sec": 0.086687} +{"id": "121-127105-0020", "text": "Who was it she was in love with? The story will tell, I took upon myself to reply. Oh I can't wait for the story. The story won't tell, said Douglas. Not in any literal vulgar way. More's the pity, then", "audio_sec": 14.355, "infer_sec": 0.223319} +{"id": "121-127105-0021", "text": "Won't you tell Douglas?", "audio_sec": 2.0, "infer_sec": 0.057304} +{"id": "121-127105-0022", "text": "Well, if I don't know who she was in love with I know who he was", "audio_sec": 5.075, "infer_sec": 0.087616} +{"id": "121-127105-0023", "text": "Let me say here distinctly to have done with it that this narrative, from an exact transcript of my own made much later, is what I shall presently give", "audio_sec": 10.91, "infer_sec": 0.164943} +{"id": "121-127105-0024", "text": "poor Douglas, before his death, when it was in sight, committed to me the Manus that reached him on the third of these days, and that, on the same spot, with immense effect, he began to read to our hushed little circle on the night of the fourth", "audio_sec": 14.45, "infer_sec": 0.221421} +{"id": "121-127105-0025", "text": "The departing ladies who had said they would stay didn't, of course, thank heaven, stay, they departed, in consequence of arrangements made, in a rage of curiosity, as they professed, produced by the touches with which he had already worked us up", "audio_sec": 16.065, "infer_sec": 0.237131} +{"id": "121-127105-0026", "text": "The first of these touches conveyed that the written statement took up the tail, at a point after it had, in a manner,", "audio_sec": 7.53, "infer_sec": 0.124179} +{"id": "121-127105-0027", "text": "He had for his own town residence a big house filled with the spoils of travel and the trophies of the chase but it was to his country home an old family place in Essex, that he wished her immediately to proceed", "audio_sec": 13.87, "infer_sec": 0.199709} +{"id": "121-127105-0028", "text": "The awkward thing was that they had practically no other relations, and that his own affairs took up all his time,", "audio_sec": 6.75, "infer_sec": 0.109019} +{"id": "121-127105-0029", "text": "There were plenty of people to help, but of course the young lady, who should go down as governess, would be in supreme authority,", "audio_sec": 7.31, "infer_sec": 0.122934} +{"id": "121-127105-0030", "text": "I don't anticipate.", "audio_sec": 2.175, "infer_sec": 0.05904} +{"id": "121-127105-0031", "text": "She was young, untried, nervous it was a vision of serious duties and little company of really great loneliness", "audio_sec": 10.765, "infer_sec": 0.14661} +{"id": "121-127105-0032", "text": "Yes, but that's just the beauty of her passion", "audio_sec": 3.17, "infer_sec": 0.071746} +{"id": "121-127105-0033", "text": "It was the beauty of it.", "audio_sec": 2.355, "infer_sec": 0.06109} +{"id": "121-127105-0034", "text": "It sounded dull, but sounded strange and all the more so because of his main condition which was", "audio_sec": 7.41, "infer_sec": 0.112508} +{"id": "121-127105-0035", "text": "She promised to do this, and she mentioned to me that when for a moment, disburdened, delighted, he held her hand, thanking her for the sacrifice. She already felt rewarded", "audio_sec": 14.15, "infer_sec": 0.198922} +{"id": "121-127105-0036", "text": "But was that all her reward? One of the ladies asked.", "audio_sec": 4.15, "infer_sec": 0.081059} +{"id": "1221-135766-0000", "text": "How strange it seemed to the sad woman as she watched the growth and the beauty that became every day more brilliant, and the intelligence that threw its quivering sunshine over the tiny features of this child.", "audio_sec": 12.435, "infer_sec": 0.188737} +{"id": "1221-135766-0001", "text": "God, as a direct consequence of the sin which man thus punished, had given her a lovely child, whose place was on that same dishonored bosom to connect her parent for ever with the race and descent of mortals and to be finally a blessed soul in heaven.", "audio_sec": 16.715, "infer_sec": 0.235226} +{"id": "1221-135766-0002", "text": "Yet these thoughts affected Hester Prynn less with hope than apprehension.", "audio_sec": 4.825, "infer_sec": 0.095247} +{"id": "1221-135766-0003", "text": "The child had a native grace which does not invariably coexist with faultless beauty. Its attire, however simple, always impressed the beholder as if it were the very garb that precisely became it best.", "audio_sec": 13.72, "infer_sec": 0.192286} +{"id": "1221-135766-0004", "text": "This outward mutability indicated and did not more than fairly express the various properties of her inner life", "audio_sec": 7.44, "infer_sec": 0.115429} +{"id": "1221-135766-0005", "text": "Hester could only account for the child's character, and even then most vaguely and imperfectly by recalling what she herself had been during that momentous period while Pearl was imbibing her soul from the spiritual world and her bodily frame from its material of earth", "audio_sec": 16.645, "infer_sec": 0.241091} +{"id": "1221-135766-0006", "text": "they were now illuminated by the morning radiance of a young child's disposition but, later in the day of earthly existence, might be prolific of the storm and whirlwind.", "audio_sec": 11.415, "infer_sec": 0.171768} +{"id": "1221-135766-0007", "text": "Hester Prynn, nevertheless, the loving mother of this one child, ran little risk of erring on the side of undue severity.", "audio_sec": 8.795, "infer_sec": 0.136445} +{"id": "1221-135766-0008", "text": "mindful, however, of her own errors and misfortunes, she early sought to impose a tender but strict control over the infant immortality that was committed to her charge.", "audio_sec": 10.78, "infer_sec": 0.165675} +{"id": "1221-135766-0009", "text": "As to any other kind of discipline, whether addressed to her mind or heart, Little Pearl might or might not be within its reach in accordance with the caprice that ruled the moment.", "audio_sec": 10.19, "infer_sec": 0.158756} +{"id": "1221-135766-0010", "text": "It was a look so intelligent, yet inexplicable, perverse, sometimes so malicious, but generally accompanied by a wild flow of spirits, that Hester could not help questioning at such moments whether Pearl was a human child.", "audio_sec": 15.05, "infer_sec": 0.230074} +{"id": "1221-135766-0011", "text": "Beholding it, Hester was constrained to rush towards the child, to pursue the little elf in the flight which she invariably began, to snatch her to her bosom with a close pressure and earnest kisses, not so much from overflowing love as to assure herself that Pearl was flesh and blood and not utterly delusive.", "audio_sec": 21.345, "infer_sec": 0.30615} +{"id": "1221-135766-0012", "text": "Brooding over all these matters, the mother felt like one who has evoked a spirit, but, by some irregularity in the process of conjuration, has failed to win the master word that should control this new and incomprehensible intelligence.", "audio_sec": 16.22, "infer_sec": 0.221799} +{"id": "1221-135766-0013", "text": "Pearl was a born outcast of the infantile world.", "audio_sec": 3.645, "infer_sec": 0.073687} +{"id": "1221-135766-0014", "text": "Pearl saw, and gazed intently, but never sought to make acquaintance.", "audio_sec": 4.75, "infer_sec": 0.093621} +{"id": "1221-135766-0015", "text": "If spoken to, she would not speak again.", "audio_sec": 2.63, "infer_sec": 0.066786} +{"id": "1221-135767-0000", "text": "Hester Prynne went one day to the mansion of Governor Bellingham with a pair of gloves which she had fringed and embroidered to his order, and which were to be worn on some great occasion of state, for, though the chances of a popular election had caused this former ruler to descend a step or two from the highest rank, he still held an honorable and influential place among the colonial magistracy.", "audio_sec": 24.85, "infer_sec": 0.365591} +{"id": "1221-135767-0001", "text": "Another and far more important reason than the delivery of a pair of embroidered gloves impelled Hester at this time to seek an interview with a personage of so much power and activity in the affairs of the settlement.", "audio_sec": 13.43, "infer_sec": 0.190624} +{"id": "1221-135767-0002", "text": "At that epoch of pristine simplicity, however, matters of even slighter public interest and of far less intrinsic weight than the welfare of Hester and her child were strangely mixed up with the deliberations of legislators and acts of state.", "audio_sec": 16.12, "infer_sec": 0.227893} +{"id": "1221-135767-0003", "text": "The period was hardly if at all earlier than that of our story when a dispute concerning the right of property in a pig not only caused a fierce and bitter contest in the legislative body of the colony, but resulted in an important modification of the framework itself of the legislature.", "audio_sec": 18.63, "infer_sec": 0.257386} +{"id": "1221-135767-0004", "text": "We have spoken of Pearl's rich and luxuriant beauty, a beauty that shone with deep and vivid tints, a bright complexion, eyes possessing intensity both of depth and glow, and hair already of a deep, glossy brown, and which, in after years, would be nearly akin to black.", "audio_sec": 19.09, "infer_sec": 0.270166} +{"id": "1221-135767-0005", "text": "It was the Scarlet Letter in another form the scarlet letter endowed with life.", "audio_sec": 5.865, "infer_sec": 0.095851} +{"id": "1221-135767-0006", "text": "The mother herself, as if the red ignominy were so deeply scorched into her brain that all her conceptions assumed its form, had carefully wrought out the similitude, lavishing many hours of morbid ingenuity to create an analogy between the object of her affection and the emblem of her guilt and torture.", "audio_sec": 20.56, "infer_sec": 0.30321} +{"id": "1221-135767-0007", "text": "But in truth, Pearl was the one as well as the other, and only in consequence of that identity had Hester contrived so perfectly to represent the scarlet letter in her appearance.", "audio_sec": 12.77, "infer_sec": 0.179195} +{"id": "1221-135767-0008", "text": "Come, therefore, and let us fling mud at them.", "audio_sec": 3.095, "infer_sec": 0.067179} +{"id": "1221-135767-0009", "text": "But Pearl, who was a dauntless child, after frowning, stamping her foot, and shaking her little hand with a variety of threatening gestures, suddenly made a rush at the knot of her enemies and put them all to flight.", "audio_sec": 13.34, "infer_sec": 0.19231} +{"id": "1221-135767-0010", "text": "She screamed and shouted too with a terrific volume of sound, which, doubtless, caused the hearts of the fugitives to quake within them.", "audio_sec": 8.2, "infer_sec": 0.134141} +{"id": "1221-135767-0011", "text": "It was further decorated with strange and seemingly cabalistic figures and diagrams suitable to the quaint taste of the age which had been drawn in the stucco when newly laid on, and had now grown hard and durable for the admiration of after times.", "audio_sec": 16.51, "infer_sec": 0.221721} +{"id": "1221-135767-0012", "text": "They approached the door, which was of an arched form, and flanked on each side by a narrow tower or projection of the edifice, in both of which were lattice windows, the wooden shutters to close over them at need.", "audio_sec": 13.885, "infer_sec": 0.196987} +{"id": "1221-135767-0013", "text": "Lifting the iron hammer that hung at the portal, Hester Prynn gave a summons which was answered by one of the Governor's bond servants, a free born Englishman, but now a seven years slave.", "audio_sec": 11.985, "infer_sec": 0.186011} +{"id": "1221-135767-0014", "text": "Yea, his honorable worship is within, but he hath a godly minister or two with him, and likewise a leach.", "audio_sec": 7.07, "infer_sec": 0.114595} +{"id": "1221-135767-0015", "text": "Ye may not see his worship now", "audio_sec": 2.85, "infer_sec": 0.057343} +{"id": "1221-135767-0016", "text": "With many variations, suggested by the nature of his building materials, diversity of climate, and a different mode of social life, Governor Bellingham had planned his new habitation after the residences of gentlemen of farer state in his native land.", "audio_sec": 15.255, "infer_sec": 0.222908} +{"id": "1221-135767-0017", "text": "On the table, in token that the sentiment of old English hospitality had not been left behind, stood a large pewter tankard, at the bottom of which, had Hester or Pearl peeped into it, they might have seen the frothy remnant of a recent draught of ale.", "audio_sec": 16.72, "infer_sec": 0.241687} +{"id": "1221-135767-0018", "text": "Little Pearl, who was as greatly pleased with the gleaming armor as she had been with the glittering frontispiece of the house, spent some time looking into the polished mirror of the breastplate.", "audio_sec": 11.16, "infer_sec": 0.168722} +{"id": "1221-135767-0019", "text": "Mother cried she, I see you here. Look, look", "audio_sec": 3.78, "infer_sec": 0.070366} +{"id": "1221-135767-0020", "text": "In truth, she seemed absolutely hidden behind it.", "audio_sec": 3.345, "infer_sec": 0.072235} +{"id": "1221-135767-0021", "text": "Pearl accordingly ran to the bow window at the further end of the hall, and looked along the vista of a garden walk, carpeted with closely shaven grass, and bordered with some rude and immature attempt at shrubbery.", "audio_sec": 12.72, "infer_sec": 0.20219} +{"id": "1221-135767-0022", "text": "but the proprietor appeared already to have relinquished as hopeless the effort to perpetuate on this side of the Atlantic in a hard soil, and amid the close struggle for subsistence the native English taste for ornamental gardening.", "audio_sec": 14.395, "infer_sec": 0.212073} +{"id": "1221-135767-0023", "text": "There were a few rose bushes, however, and a number of apple trees, probably the descendants of those planted by the Reverend mister Blackstone, the first settler of the peninsula, that half mythological personage who rides through our early annals, seated on the back of a bull.", "audio_sec": 16.27, "infer_sec": 0.251597} +{"id": "1221-135767-0024", "text": "Pearl, seeing the rose bushes, began to cry for a red rose and would not be pacified.", "audio_sec": 5.85, "infer_sec": 0.106459} +{"id": "1284-1180-0000", "text": "He wore blue silk stockings, blue knee pants with gold buckles, a blue ruffled waist, and a jacket of bright blue braided with gold.", "audio_sec": 8.12, "infer_sec": 0.139817} +{"id": "1284-1180-0001", "text": "His hat had a peaked crown at a flat brim, and around the brim was a row of tiny golden bells that tinkled when he moved.", "audio_sec": 7.755, "infer_sec": 0.128313} +{"id": "1284-1180-0002", "text": "Instead of shoes, the old man wore boots with turnover tops, and his blue coat had wide cuffs of gold braid.", "audio_sec": 7.68, "infer_sec": 0.125974} +{"id": "1284-1180-0003", "text": "For a long time he had wished to explore the beautiful land of Oz in which they lived,", "audio_sec": 4.835, "infer_sec": 0.095194} +{"id": "1284-1180-0004", "text": "When they were outside, Unc simply latched the door and started up the path.", "audio_sec": 4.285, "infer_sec": 0.092213} +{"id": "1284-1180-0005", "text": "No one would disturb their little house, even if anyone came so far into the thick forest while they were gone.", "audio_sec": 6.55, "infer_sec": 0.107939} +{"id": "1284-1180-0006", "text": "At the foot of the mountain that separated the country of the munchkins from the country of the Gillikins, the path divided.", "audio_sec": 6.865, "infer_sec": 0.125436} +{"id": "1284-1180-0007", "text": "He knew it would take them to the house of the crooked magician, whom he had never seen, but who was their nearest neighbor.", "audio_sec": 6.265, "infer_sec": 0.112817} +{"id": "1284-1180-0008", "text": "All the morning they trudged up the mountain path, and at noon Unc and Ojo sat on a fallen tree trunk, and ate the last of the bread which the old munchkin had placed in his pocket.", "audio_sec": 10.49, "infer_sec": 0.165397} +{"id": "1284-1180-0009", "text": "Then they started on again, and two hours later came in sight of the house of doctor Pippt.", "audio_sec": 6.285, "infer_sec": 0.103657} +{"id": "1284-1180-0010", "text": "Unc knocked at the door of the house, and a chubby, pleasant faced woman, dressed all in blue, opened it, and greeted the visitors with a smile.", "audio_sec": 8.635, "infer_sec": 0.143776} +{"id": "1284-1180-0011", "text": "I am, my dear, and all strangers are welcome to my home.", "audio_sec": 4.275, "infer_sec": 0.082302} +{"id": "1284-1180-0012", "text": "We have come from a far lonier place than this A lonelier place", "audio_sec": 4.88, "infer_sec": 0.087046} +{"id": "1284-1180-0013", "text": "and you must be O Jo the unlucky, she added.", "audio_sec": 3.705, "infer_sec": 0.074286} +{"id": "1284-1180-0014", "text": "Ojo had never eaten such a fine meal in all his life,", "audio_sec": 3.665, "infer_sec": 0.07492} +{"id": "1284-1180-0015", "text": "We're traveling, replied Ojo, and we stopped at your house just to rest and refresh ourselves", "audio_sec": 5.835, "infer_sec": 0.105948} +{"id": "1284-1180-0016", "text": "The woman seemed thoughtful", "audio_sec": 2.13, "infer_sec": 0.056054} +{"id": "1284-1180-0017", "text": "At one end stood a great fireplace, in which a blue log was blazing with a blue flame, and over the fire hung four kettles in a row, all bubbling and steaming at a great rate.", "audio_sec": 10.68, "infer_sec": 0.171652} +{"id": "1284-1180-0018", "text": "It takes me several years to make this magic powder, but at this moment I am pleased to say it is nearly done you see I am making it for my good wife Margolot, who wants to use some of it for a purpose of her own.", "audio_sec": 12.005, "infer_sec": 0.188775} +{"id": "1284-1180-0019", "text": "You must know, said Margolot, when they were all seated together on the broad window seat, that my husband foolishly gave away all the powder of life he first made to Old Mombey the Witch, who used to live in the country of the Gillicans to the north of here.", "audio_sec": 15.025, "infer_sec": 0.221888} +{"id": "1284-1180-0020", "text": "the first lot we tested on our glass hat, which not only began to live but has lived ever since.", "audio_sec": 5.87, "infer_sec": 0.101112} +{"id": "1284-1180-0021", "text": "I think the next glass cat the magician makes will have neither brains nor heart, for then it will not object to catching mice, and may prove of some use to us.", "audio_sec": 9.84, "infer_sec": 0.147974} +{"id": "1284-1180-0022", "text": "I'm afraid I don't know much about the land of Oz", "audio_sec": 2.885, "infer_sec": 0.073532} +{"id": "1284-1180-0023", "text": "You see, I've lived all my life with Unc Nunky, the silent one, and there was no one to tell me anything.", "audio_sec": 5.61, "infer_sec": 0.104566} +{"id": "1284-1180-0024", "text": "That is one reason you are Ojo the unlucky, said the woman, in a sympathetic tone.", "audio_sec": 5.26, "infer_sec": 0.097907} +{"id": "1284-1180-0025", "text": "I think I must show you my patchwork girl, said Margolot, laughing at the boy's astonishment. For she is rather difficult to explain.", "audio_sec": 8.705, "infer_sec": 0.141085} +{"id": "1284-1180-0026", "text": "But first I will tell you that for many years I have longed for a servant to help me with the house work, and to cook the meals and wash the dishes", "audio_sec": 8.29, "infer_sec": 0.127271} +{"id": "1284-1180-0027", "text": "Yet that task was not so easy as you may suppose", "audio_sec": 3.27, "infer_sec": 0.070402} +{"id": "1284-1180-0028", "text": "a bed quilt made of patches of different kinds and colors of cloth, all neatly sewed together", "audio_sec": 6.045, "infer_sec": 0.101835} +{"id": "1284-1180-0029", "text": "Sometimes it is called a crazy quilt because the patches and colors are so mixed up", "audio_sec": 5.335, "infer_sec": 0.098829} +{"id": "1284-1180-0030", "text": "When I found it, I said to myself that it would do nicely for my servant girl for when she was brought to life she would not be proud nor haughty, as the glass cat is, for such a dreadful mixture of colours would discourage her from trying to be as dignified as the blue munchkins are.", "audio_sec": 16.22, "infer_sec": 0.235997} +{"id": "1284-1180-0031", "text": "At the Emerald City where our Princess Osma lives, green is the popular color", "audio_sec": 4.825, "infer_sec": 0.09752} +{"id": "1284-1180-0032", "text": "I will show you what a good job I did and she went to a tall cupboard and threw open the doors.", "audio_sec": 5.78, "infer_sec": 0.104524} +{"id": "1284-1181-0000", "text": "Ojo examined this curious contrivance with wonder", "audio_sec": 3.965, "infer_sec": 0.08237} +{"id": "1284-1181-0001", "text": "Margolot had first made the girl's form from the patchwork quilt, and then she had dressed it with a patchwork skirt and an apron with pockets in it, using the same gay material throughout.", "audio_sec": 11.43, "infer_sec": 0.177036} +{"id": "1284-1181-0002", "text": "The head of the patchwork girl was the most curious part of her.", "audio_sec": 3.835, "infer_sec": 0.078841} +{"id": "1284-1181-0003", "text": "The hair was of brown yarn and hung down on her neck in several neat braids,", "audio_sec": 4.505, "infer_sec": 0.094242} +{"id": "1284-1181-0004", "text": "Gold is the most common metal in the land of Oz, and is used for many purposes because it is soft and pliable.", "audio_sec": 7.15, "infer_sec": 0.119359} +{"id": "1284-1181-0005", "text": "No, I forgot all about the brains, exclaimed the woman.", "audio_sec": 3.855, "infer_sec": 0.083869} +{"id": "1284-1181-0006", "text": "Well, that may be true agreed Margolot. But on the contrary, a servant with too much brains is sure to become independent and high and mighty, and feel above her work.", "audio_sec": 11.405, "infer_sec": 0.171233} +{"id": "1284-1181-0007", "text": "She poured into the dish a quantity from each of these bottles.", "audio_sec": 4.04, "infer_sec": 0.083217} +{"id": "1284-1181-0008", "text": "I think that will do, she continued, for the other qualities are not needed in a servant.", "audio_sec": 6.08, "infer_sec": 0.103844} +{"id": "1284-1181-0009", "text": "She ran to her husband's side at once, and helped him lift the four kettles from the fire", "audio_sec": 5.245, "infer_sec": 0.103586} +{"id": "1284-1181-0010", "text": "Their contents had all boiled away, leaving in the bottom of each kettle a few grains of fine white powder.", "audio_sec": 6.435, "infer_sec": 0.124029} +{"id": "1284-1181-0011", "text": "Very carefully the magician removed this powder, placing it all together in a golden dish, where he mixed it with a golden spoon.", "audio_sec": 7.75, "infer_sec": 0.143815} +{"id": "1284-1181-0012", "text": "No one saw him do this, for all were looking at the powder of life, but soon the woman remembered what she had been doing, and came back to the cupboard.", "audio_sec": 8.51, "infer_sec": 0.143934} +{"id": "1284-1181-0013", "text": "Ojo became a bit uneasy at this, for he had already put quite a lot of the cleverness powder in the dish, but he dared not interfere, and so he comforted himself with the thought that one cannot have too much cleverness.", "audio_sec": 12.66, "infer_sec": 0.189495} +{"id": "1284-1181-0014", "text": "He selected a small gold bottle with a pepper box top so that the powder might be sprinkled on any object through the small holes.", "audio_sec": 7.92, "infer_sec": 0.13069} +{"id": "1284-1181-0015", "text": "Most people talk too much, so it is a relief to find one who talks too little.", "audio_sec": 5.115, "infer_sec": 0.089855} +{"id": "1284-1181-0016", "text": "I am not allowed to perform magic, except for my own amusement, he told his visitors, as he lighted a pipe with a crooked stem, and began to smoke.", "audio_sec": 9.515, "infer_sec": 0.157692} +{"id": "1284-1181-0017", "text": "The wizard of Oz, who used to be a humbug, and knew no magic at all, has been taking lessons of Glinda, and I'm told he is getting to be a pretty good wizard, but he is merely the assistant of the great sorceress,", "audio_sec": 11.775, "infer_sec": 0.190406} +{"id": "1284-1181-0018", "text": "It truly is, asserted the magician.", "audio_sec": 3.16, "infer_sec": 0.070283} +{"id": "1284-1181-0019", "text": "I now use them as ornamental statuary in my garden", "audio_sec": 3.2, "infer_sec": 0.076574} +{"id": "1284-1181-0020", "text": "Dear me, what a chatterbox you're getting to be unkn', remarked the magician, who was pleased with the compliment.", "audio_sec": 6.73, "infer_sec": 0.116668} +{"id": "1284-1181-0021", "text": "asked the voice, in scornful accents.", "audio_sec": 2.7, "infer_sec": 0.067022} +{"id": "1284-134647-0000", "text": "The grateful applause of the clergy has consecrated the memory of a prince who indulged their passions and promoted their interest", "audio_sec": 8.53, "infer_sec": 0.1314} +{"id": "1284-134647-0001", "text": "The Edict of Milan, the Great Charter of Toleration, had confirmed to each individual of the Roman world the privilege of choosing and professing his own religion.", "audio_sec": 10.275, "infer_sec": 0.161643} +{"id": "1284-134647-0002", "text": "But this inestimable privilege was soon violated with the knowledge of truth the emperor imbied the maxims of persecution, and the sects which descended from the Catholic Church were afflicted and oppressed by the triumph of Christianity.", "audio_sec": 15.11, "infer_sec": 0.221457} +{"id": "1284-134647-0003", "text": "Constantine easily believed that the heretics, who presumed to dispute his opinions, or to oppose his commands, were guilty of the most absurd and criminal obstinacy, and that a seasonable application of moderate severities might save those unhappy men from the danger of an everlasting condemnation.", "audio_sec": 20.145, "infer_sec": 0.274492} +{"id": "1284-134647-0004", "text": "Some of the penal regulations were copied from the Edicts of Diocletian, and this method of conversion was applauded by the same bishops who had felt the hand of oppression and pleaded for the rights of humanity.", "audio_sec": 12.835, "infer_sec": 0.187922} +{"id": "1284-134647-0005", "text": "They asserted with confidence, and almost with exalation, that the apostolical succession was interrupted, that all the bishops of Europe and Asia were infected by the contagion of guilt and schism, and that the prerogatives of the Catholic Church were confined to the chosen portion of the African believers, who alone had preserved inviolate the integrity of their faith and discipline.", "audio_sec": 23.335, "infer_sec": 0.339714} +{"id": "1284-134647-0006", "text": "Bishops, virgins, and even spotless infants were subjected to the disgrace of a public penance before they could be admitted to the communion of the Donatists.", "audio_sec": 10.155, "infer_sec": 0.143592} +{"id": "1284-134647-0007", "text": "Proscribed by the civil and ecclesiastical powers of the Empire, the Donatists still maintained in some provinces, particularly in Numidia, their superior numbers, and four hundred bishops acknowledged the jurisdiction of their primate.", "audio_sec": 14.17, "infer_sec": 0.235932} +{"id": "1320-122612-0000", "text": "Since the period of our tale the active spirit of the country has surrounded it with a belt of rich and thriving settlements, though none but the hunter or the savage is ever known even now to penetrate its wild recesses.", "audio_sec": 13.48, "infer_sec": 0.197821} +{"id": "1320-122612-0001", "text": "The dews were suffered to exhale, and the sun had dispersed the mists, and was shedding a strong and clear light in the forest when the travellers resumed their journey.", "audio_sec": 9.52, "infer_sec": 0.160843} +{"id": "1320-122612-0002", "text": "After proceeding a few miles, the progress of Hawkeye, who led the advance became more deliberate and watchful.", "audio_sec": 7.46, "infer_sec": 0.11915} +{"id": "1320-122612-0003", "text": "He often stopped to examine the trees, nor did he cross a rivulet without attentively considering the quantity, the velocity, and the color of its waters.", "audio_sec": 9.865, "infer_sec": 0.154732} +{"id": "1320-122612-0004", "text": "Distrusting his own judgment, his appeals to the opinion of Chingachuk were frequent and earnest.", "audio_sec": 6.425, "infer_sec": 0.112307} +{"id": "1320-122612-0005", "text": "Yet here are we within a short range of the scaroons, and not a sign of a trail have we crossed.", "audio_sec": 5.915, "infer_sec": 0.106394} +{"id": "1320-122612-0006", "text": "Let us retrace our steps and examine as we go with keener eyes", "audio_sec": 4.845, "infer_sec": 0.091242} +{"id": "1320-122612-0007", "text": "Chinach had caught the look, and motioning with his hand he bade him speak.", "audio_sec": 5.54, "infer_sec": 0.097875} +{"id": "1320-122612-0008", "text": "the eyes of the whole party followed the unexpected movement, and read their success in the air of triumph that the youth assumed.", "audio_sec": 7.875, "infer_sec": 0.12784} +{"id": "1320-122612-0009", "text": "It would have been more wonderful had he spoken without a bidding,", "audio_sec": 3.88, "infer_sec": 0.080236} +{"id": "1320-122612-0010", "text": "See, said Uncas, pointing north and south, at the evident marks of the broad trail on either side of him, the dark hair has gone toward the forest.", "audio_sec": 10.195, "infer_sec": 0.157931} +{"id": "1320-122612-0011", "text": "If a rock, or a rivulet, or a bit of earth harder than common, severed the links of the clue they followed, the true eye of the scout recovered them at a distance, and seldom rendered the delay of a single moment necessary.", "audio_sec": 13.695, "infer_sec": 0.210587} +{"id": "1320-122612-0012", "text": "Extinguished brands were lying around a spring, the offs of a deer were scattered about the place, and the trees bore evident marks of having been browsed by the horses.", "audio_sec": 10.49, "infer_sec": 0.164448} +{"id": "1320-122612-0013", "text": "a circle of a few hundred feet in circumference was drawn, and each of the party took a segment for his portion.", "audio_sec": 6.55, "infer_sec": 0.117625} +{"id": "1320-122612-0014", "text": "The examination, however, resulted in no discovery,", "audio_sec": 3.515, "infer_sec": 0.072922} +{"id": "1320-122612-0015", "text": "the whole party crowded to the spot where Uncas pointed out the impression of a moccasin in the moist alluvian.", "audio_sec": 6.385, "infer_sec": 0.114097} +{"id": "1320-122612-0016", "text": "Run back, Uncas, and bring me the size of the singer's foot", "audio_sec": 3.49, "infer_sec": 0.080875} +{"id": "1320-122617-0000", "text": "Notwithstanding the high resolution of Hawkeye, he fully comprehended all the difficulties and danger he was about to incur.", "audio_sec": 7.835, "infer_sec": 0.12962} +{"id": "1320-122617-0001", "text": "In his return to the camp his acute and practised intellects were intently engaged in devising means to counteract a watchfulness and suspicion on the part of his enemies that he knew were in no degree inferior to his own.", "audio_sec": 14.055, "infer_sec": 0.203914} +{"id": "1320-122617-0002", "text": "In other words, while he had implicit faith in the ability of Balam's ass to speak, he was somewhat sceptical on the subject of a bear's singing, and yet he had been assured of the latter, on the testimony of his own exquisite organs.", "audio_sec": 13.585, "infer_sec": 0.205704} +{"id": "1320-122617-0003", "text": "There was something in his air and manner that betrayed to the scout the utter confusion of the state of his mind.", "audio_sec": 6.285, "infer_sec": 0.114831} +{"id": "1320-122617-0004", "text": "The ingenious Hawkeye, who recalled the hasty manner in which the other had abandoned his post at the bedside of the sick woman, was not without his suspicions concerning the subject of so much solemn deliberation.", "audio_sec": 12.26, "infer_sec": 0.190795} +{"id": "1320-122617-0005", "text": "The bear shook his shaggy sides, and then a well known voice replied", "audio_sec": 4.4, "infer_sec": 0.089872} +{"id": "1320-122617-0006", "text": "Can these things be? returned David, breathing more freely as the truth began to dawn upon him.", "audio_sec": 5.655, "infer_sec": 0.105956} +{"id": "1320-122617-0007", "text": "Come, come returned Hawkeye, uncasing his honest countenance, the better to assure the wavering confidence of his companion. You may see a skin which, if it be not as white as one of the gentle ones, has no tinge of red to it that the winds of the heaven and the sun have not bestowed. Now let us to business", "audio_sec": 18.525, "infer_sec": 0.265472} diff --git a/deploy/parakeet-stt/edge-stt/results/parakeet/report_ctc.json b/deploy/parakeet-stt/edge-stt/results/parakeet/report_ctc.json new file mode 100644 index 0000000..5dd54af --- /dev/null +++ b/deploy/parakeet-stt/edge-stt/results/parakeet/report_ctc.json @@ -0,0 +1,22 @@ +{ + "mode": "A", + "n": 300, + "total_audio_sec": 2641.085, + "wall_sec": 24.592155, + "rtfx": 107.395, + "rtf": 0.009311, + "wer_pct": 2.383, + "n_scored": 300, + "normalizer": "whisper", + "mem": { + "idle_total_mb": 1610, + "peak_total_mb": 2053, + "proc_rss_mb": 91.1, + "cuda_used_mb": 2177.9 + }, + "replay": "sequential", + "precision": "q8_0", + "engine": "parakeet.cpp", + "device": "cuda", + "limit": null +} \ No newline at end of file diff --git a/deploy/parakeet-stt/edge-stt/results/parakeet/report_tdt.json b/deploy/parakeet-stt/edge-stt/results/parakeet/report_tdt.json new file mode 100644 index 0000000..53de891 --- /dev/null +++ b/deploy/parakeet-stt/edge-stt/results/parakeet/report_tdt.json @@ -0,0 +1,22 @@ +{ + "mode": "A", + "n": 300, + "total_audio_sec": 2641.085, + "wall_sec": 42.501713, + "rtfx": 62.141, + "rtf": 0.016093, + "wer_pct": 1.836, + "n_scored": 300, + "normalizer": "whisper", + "mem": { + "idle_total_mb": 1608, + "peak_total_mb": 2074, + "proc_rss_mb": 91.1, + "cuda_used_mb": 2197.6 + }, + "replay": "sequential", + "precision": "q8_0", + "engine": "parakeet.cpp", + "device": "cuda", + "limit": null +} \ No newline at end of file diff --git a/deploy/parakeet-stt/edge-stt/scripts/bench_zip.sh b/deploy/parakeet-stt/edge-stt/scripts/bench_zip.sh new file mode 100644 index 0000000..743cab9 --- /dev/null +++ b/deploy/parakeet-stt/edge-stt/scripts/bench_zip.sh @@ -0,0 +1,22 @@ +#!/usr/bin/env bash +# Clean-env Zipformer benchmark (GeniePod stopped). CPU path = the deployable candidates. +# Runs zip70 (68MB) + zip28 (27MB) over the pinned LibriSpeech-300 -> WER + RTF + peak mem. +set -uo pipefail +cd "$HOME/edge-stt/work" +export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$HOME/edge-stt/ort/onnxruntime-linux-aarch64-gpu-1.18.1/lib + +echo "### baseline (pre-run) ###"; free -m | awk 'NR==1||/Mem:/' + +run() { + local name=$1 dir=$2 + mkdir -p "results/$name" + echo "=== $name START $(date +%T) model=$dir ===" + STT_ENGINE=sherpa MODE_A_MODEL_DIR="$HOME/edge-stt/models/$dir" MODE_A_MODEL_TYPE=transducer \ + ./transcribe --mode A --input data/manifest.jsonl \ + --out "results/$name/hyps.jsonl" --report "results/$name/report.json" --device cpu + echo "=== $name DONE $(date +%T) ===" +} + +run zip70 sherpa-onnx-zipformer-en-2023-06-26 +run zip28 sherpa-onnx-zipformer-small-en-2023-06-26 +echo "ALL_DONE $(date +%T)" diff --git a/deploy/parakeet-stt/edge-stt/scripts/build-parakeet.sh b/deploy/parakeet-stt/edge-stt/scripts/build-parakeet.sh new file mode 100644 index 0000000..caae11d --- /dev/null +++ b/deploy/parakeet-stt/edge-stt/scripts/build-parakeet.sh @@ -0,0 +1,44 @@ +#!/usr/bin/env bash +# scripts/build-parakeet.sh — build parakeet.cpp (ggml CUDA backend) from source on the Jetson. +# +# This is the DEPLOYABLE STT engine and the submission headline: on the pinned LibriSpeech-300 it +# reaches WER 1.836 % @ 60x (tdt) or 2.383 % @ 107x (ctc), +450 MB, ~126 ms/call — see +# results/parakeet/RESULTS.md. The ggml CUDA backend is ~4-14x faster than ONNX Runtime on the same +# 25 W Orin (sherpa-onnx topped out at 25x; the 0.6 B on ORT was compute-bound at 7.4x). +# +# WHY FROM SOURCE: the only reproducibility concern with parakeet.cpp was the *prebuilt* binaries +# (CUDA-13/Ubuntu-24.04 mismatch, undocumented sm_87). A clean native build pinned to v0.1.1 + sm_87 +# removes that — the bench/transcribe subcommands the harness uses are upstream (no patch). +# +# Toolchain (asserted by scripts/preflight.sh): CUDA 12.6 / nvcc, sm_87. Native cmake — NOT the +# build-aarch64 cross script. Runtime needs LD_LIBRARY_PATH=/usr/local/cuda/lib64. +set -euo pipefail + +SRC="${PARAKEET_SRC:-$HOME/parakeet.cpp}" +TAG="${PARAKEET_TAG:-v0.1.1}" +JOBS="${JOBS:-4}" # 8 GB unified RAM is tight; bound parallelism + +if [ ! -d "$SRC/.git" ]; then + echo "[build-parakeet] cloning $TAG" + git clone --recursive --branch "$TAG" https://github.com/mudler/parakeet.cpp "$SRC" +fi +cd "$SRC" +git submodule update --init --recursive # ggml backend + +command -v nvcc >/dev/null 2>&1 || export PATH=/usr/local/cuda/bin:$PATH +echo "[build-parakeet] $(git describe --tags 2>/dev/null || git rev-parse --short HEAD) | nvcc=$(command -v nvcc) | -j$JOBS" + +cmake -B build \ + -DCMAKE_BUILD_TYPE=Release \ + -DBUILD_SHARED_LIBS=ON \ + -DPARAKEET_GGML_CUDA=ON \ + -DCMAKE_CUDA_COMPILER=/usr/local/cuda/bin/nvcc \ + -DCMAKE_CUDA_ARCHITECTURES=87 \ + -DPARAKEET_BUILD_CLI=ON \ + -DPARAKEET_BUILD_TESTS=OFF +cmake --build build -j"$JOBS" --target parakeet-cli + +BIN="$SRC/build/examples/cli/parakeet-cli" +echo "[build-parakeet] done -> $BIN" +[ -x "$BIN" ] && echo "[build-parakeet] OK ($("$BIN" 2>&1 | head -1 || true))" +echo "[build-parakeet] runtime: export LD_LIBRARY_PATH=/usr/local/cuda/lib64" diff --git a/deploy/parakeet-stt/edge-stt/scripts/build-sherpa.sh b/deploy/parakeet-stt/edge-stt/scripts/build-sherpa.sh new file mode 100755 index 0000000..14fe91d --- /dev/null +++ b/deploy/parakeet-stt/edge-stt/scripts/build-sherpa.sh @@ -0,0 +1,72 @@ +#!/usr/bin/env bash +# Build the sherpa-onnx GPU binary NATIVELY on the Jetson (the spine for Modes B/C + Mode-A fallback). +# +# NOTE: do NOT use sherpa-onnx's build-aarch64-linux-gnu.sh here — that is a CROSS-compile script +# (needs aarch64-linux-gnu-gcc + a toolchain file). On the Jetson we are already aarch64, so we +# drive cmake directly with the native gcc/g++. +# +# Pinned: sherpa-onnx v1.13.2. GPU onnxruntime: 1.18.1 (the version sherpa-onnx documents for +# Jetson Orin Nano Super / JetPack 6.2 / CUDA 12.6 / cuDNN 9). The Jetson's link to the GitHub +# release CDN that hosts the ~49 MB ORT-GPU tarball is SLOW/flaky, and cmake's FetchContent +# restarts from zero on any stall. So we PRE-STAGE the tarball once (resumable curl) and point +# sherpa-onnx's SHERPA_ONNXRUNTIME_{INCLUDE,LIB}_DIR env vars at the extracted tree — the build +# then skips the FetchContent download entirely. Stage with: +# curl -L -C - --retry 20 -o ~/Downloads/onnxruntime-linux-aarch64-gpu-cuda12-1.18.1.tar.bz2 \ +# https://github.com/csukuangfj/onnxruntime-libs/releases/download/v1.18.1/onnxruntime-linux-aarch64-gpu-cuda12-1.18.1.tar.bz2 +set -euo pipefail + +SHERPA_SRC="${SHERPA_SRC:-$HOME/edge-stt/sherpa-onnx}" +ORT_VERSION="${ORT_VERSION:-1.18.1}" +ENABLE_GPU="${ENABLE_GPU:-ON}" +JOBS="${JOBS:-4}" # bound parallelism: 8GB unified RAM is tight on this shared box + +# --- Pre-staged onnxruntime-gpu (skip the slow FetchContent download if present) --- +# NOTE: the release tarball is named '...-gpu-cuda12-.tar.bz2' but its INTERNAL +# top dir is '...-gpu-' (no 'cuda12'), so we glob for the extracted dir by its +# header rather than hard-coding the name. +ORT_NAME="onnxruntime-linux-aarch64-gpu-cuda12-${ORT_VERSION}" +ORT_TARBALL="${ORT_TARBALL:-$HOME/Downloads/${ORT_NAME}.tar.bz2}" +ORT_ROOT="${ORT_ROOT:-$HOME/edge-stt/ort}" +_find_ort() { + local d + for d in "$ORT_ROOT"/onnxruntime-linux-aarch64-gpu*"${ORT_VERSION}"; do + [ -f "$d/include/onnxruntime_cxx_api.h" ] && { echo "$d"; return 0; } + done + return 1 +} +ORT_DIR="${ORT_DIR:-$(_find_ort || true)}" +if [ -z "$ORT_DIR" ] && [ -f "$ORT_TARBALL" ]; then + echo "[build-sherpa] extracting pre-staged ORT tarball from $ORT_TARBALL" + mkdir -p "$ORT_ROOT" + tar xjf "$ORT_TARBALL" -C "$ORT_ROOT" + ORT_DIR="$(_find_ort || true)" +fi +if [ -n "$ORT_DIR" ] && [ -d "$ORT_DIR/include" ] && [ -d "$ORT_DIR/lib" ]; then + export SHERPA_ONNXRUNTIME_INCLUDE_DIR="$ORT_DIR/include" + export SHERPA_ONNXRUNTIME_LIB_DIR="$ORT_DIR/lib" + echo "[build-sherpa] using pre-staged ORT at $ORT_DIR (FetchContent download skipped)" +else + echo "[build-sherpa] WARN: no pre-staged ORT under $ORT_ROOT or $ORT_TARBALL — cmake will download v$ORT_VERSION (slow on this link)" +fi + +cd "$SHERPA_SRC" +echo "[build-sherpa] $(git describe --tags 2>/dev/null || git rev-parse --short HEAD) | GPU=$ENABLE_GPU | ORT=$ORT_VERSION | -j$JOBS" + +mkdir -p build && cd build +cmake \ + -DCMAKE_BUILD_TYPE=Release \ + -DBUILD_SHARED_LIBS=ON \ + -DSHERPA_ONNX_ENABLE_GPU="$ENABLE_GPU" \ + -DSHERPA_ONNX_LINUX_ARM64_GPU_ONNXRUNTIME_VERSION="$ORT_VERSION" \ + -DSHERPA_ONNX_ENABLE_PYTHON=OFF \ + -DSHERPA_ONNX_ENABLE_PORTAUDIO=OFF \ + -DSHERPA_ONNX_ENABLE_WEBSOCKET=OFF \ + -DSHERPA_ONNX_ENABLE_TTS=OFF \ + -DSHERPA_ONNX_ENABLE_TESTS=OFF \ + -DSHERPA_ONNX_ENABLE_CHECK=OFF \ + -DSHERPA_ONNX_ENABLE_C_API=ON \ + .. +make -j"$JOBS" sherpa-onnx-offline sherpa-onnx + +echo "[build-sherpa] done -> $SHERPA_SRC/build/bin/" +ls -lh "$SHERPA_SRC/build/bin/" | grep -E 'sherpa-onnx(-offline)?$' || ls "$SHERPA_SRC/build/bin/" diff --git a/deploy/parakeet-stt/edge-stt/scripts/get-data.sh b/deploy/parakeet-stt/edge-stt/scripts/get-data.sh new file mode 100755 index 0000000..02abfa4 --- /dev/null +++ b/deploy/parakeet-stt/edge-stt/scripts/get-data.sh @@ -0,0 +1,30 @@ +#!/usr/bin/env bash +# The ONE committed data materializer. From an empty data/ it re-downloads LibriSpeech and +# writes data/wav/.wav + data/manifest.jsonl (first-300 test-clean, sorted by id). The +# clean-room flow runs this before ./transcribe so the wavs are present from scratch. No audio +# payloads are committed. +set -euo pipefail +cd "$(dirname "$0")/.." +PY="${PYTHON:-python3}" + +# eval set: first-300 test-clean -> data/wav/.wav + data/manifest.jsonl + data/manifest.sha256 +"$PY" scripts/prepare_data.py --out data --n 300 + +# verify the eval manifest checksum +( cd data && sha256sum -c manifest.sha256 ) + +# record total audio seconds (RTFx denominator) into data/README.md +TOTAL_SEC="$("$PY" -c "import json;print(round(sum(json.loads(l)['duration_sec'] for l in open('data/manifest.jsonl')),1))")" +N="$(wc -l < data/manifest.jsonl)" +cat > data/README.md < — parallel range download with size verify + retry +pdl() { + local repo="$1" rel="$2" out="$3" + local url="$HF/$repo/resolve/main/$rel" + local total; total=$(curl -sIL "$url" 2>/dev/null | grep -i '^content-length' | tail -1 | tr -dc '0-9') + if [ -z "${total:-}" ] || [ "$total" -lt 20000000 ]; then + curl -fL --retry 10 --retry-all-errors -o "$out" "$url"; return + fi + if [ -f "$out" ] && [ "$(stat -c%s "$out")" -eq "$total" ]; then echo " [skip] $rel"; return; fi + echo " [pdl] $rel ($((total/1000000)) MB, -j$JOBS)" + local pd; pd=$(mktemp -d); local n="$JOBS" ch=$(( (total + JOBS - 1) / JOBS )) i + for i in $(seq 0 $((n-1))); do + local s=$((i*ch)) e=$((i*ch+ch-1)); [ $e -ge $total ] && e=$((total-1)); local w=$((e-s+1)) + ( until curl -sL -r "${s}-${e}" -o "$pd/p$i" "$url" && [ "$(stat -c%s "$pd/p$i")" -eq "$w" ]; do sleep 3; done ) & + done + wait + cat $(for i in $(seq 0 $((n-1))); do echo "$pd/p$i"; done) > "$out"; rm -rf "$pd" + [ "$(stat -c%s "$out")" -eq "$total" ] || { echo " [FAIL] $rel size mismatch"; return 1; } +} + +fetch_repo() { # + local repo="$1" dest="$MODELS_DIR/$2"; shift 2 + mkdir -p "$dest" + echo "== $repo -> $dest" + for f in "$@"; do pdl "$repo" "$f" "$dest/$(basename "$f")"; done +} + +# ---- PRIMARY ENGINE: parakeet.cpp GGUF (the deployable headline; built by build-parakeet.sh) ---- +# tdt_ctc-110m on LibriSpeech-300 -> WER 1.808%/61x (tdt, q5_k) or 2.383%/107x (ctc, q8_0), +450MB, +# 126ms/call. The ggml CUDA backend is the fastest path measured (~4-14x ONNX Runtime). +# DTYPE NOTE (results/dtype/RESULTS.md): on the Orin GPU, RTFx is dtype-INVARIANT (launch-bound at +# batch=1) -> quant is a MEMORY lever, not a speed one. So the accuracy (tdt) path defaults to q5_k +# (1.808% @ 137MB, == q8_0 accuracy, 23% smaller); the speed (ctc) path keeps q8_0; q4_k (126MB) is +# the if-memory-tightens fallback (2.018%/2.467%, still <3%). Per-decoder default in parakeet_runner.py. +PK_DIR="${PK_MODELS_DIR:-$HOME/parakeet-models}"; mkdir -p "$PK_DIR" +echo "== parakeet.cpp GGUF -> $PK_DIR" +pdl mudler/parakeet-cpp-gguf tdt_ctc-110m-q8_0.gguf "$PK_DIR/tdt_ctc-110m-q8_0.gguf" # ctc default +pdl mudler/parakeet-cpp-gguf tdt_ctc-110m-q5_k.gguf "$PK_DIR/tdt_ctc-110m-q5_k.gguf" # tdt default +pdl mudler/parakeet-cpp-gguf tdt_ctc-110m-q4_k.gguf "$PK_DIR/tdt_ctc-110m-q4_k.gguf" # memory-tightens +# optional streaming EOU model: +# pdl mudler/parakeet-cpp-gguf realtime_eou_120m-v1-q8_0.gguf "$PK_DIR/realtime_eou_120m-v1-q8_0.gguf" + +# ---- Mode A (sherpa-onnx alternative / accuracy showcase): Parakeet-TDT-0.6b-v2 int8 -------- +fetch_repo csukuangfj/sherpa-onnx-nemo-parakeet-tdt-0.6b-v2-int8 \ + sherpa-onnx-nemo-parakeet-tdt-0.6b-v2-int8 \ + encoder.int8.onnx decoder.int8.onnx joiner.int8.onnx tokens.txt test_wavs/0.wav + +# ---- Mode A DEPLOYABLE (recommended): small offline Zipformer transducers -------------------- +# Best memory+RTF balance for the assessment: zip70 = 1.598% WER / 21.6x RTFx / 204MB resident on CPU +# (vs the 0.6b showcase's 1.331% / 7.4x / 1247MB). zip28 is the further-tightened fallback. +ZV=epoch-99-avg-1 +fetch_repo csukuangfj/sherpa-onnx-zipformer-en-2023-06-26 \ + sherpa-onnx-zipformer-en-2023-06-26 \ + "encoder-$ZV.int8.onnx" "decoder-$ZV.int8.onnx" "joiner-$ZV.int8.onnx" tokens.txt +fetch_repo csukuangfj/sherpa-onnx-zipformer-small-en-2023-06-26 \ + sherpa-onnx-zipformer-small-en-2023-06-26 \ + "encoder-$ZV.int8.onnx" "decoder-$ZV.int8.onnx" "joiner-$ZV.int8.onnx" tokens.txt + +# ---- Mode B: streaming Zipformer EN int8 (chunk-16-left-128) -------------------------------- +V=epoch-99-avg-1-chunk-16-left-128 +fetch_repo csukuangfj/sherpa-onnx-streaming-zipformer-en-2023-06-26 \ + sherpa-onnx-streaming-zipformer-en-2023-06-26 \ + "encoder-$V.int8.onnx" "decoder-$V.int8.onnx" "joiner-$V.int8.onnx" tokens.txt + +# ---- Mode C: whisper-tiny (LID + multilingual) --------------------------------------------- +fetch_repo csukuangfj/sherpa-onnx-whisper-tiny \ + sherpa-onnx-whisper-tiny \ + tiny-encoder.int8.onnx tiny-decoder.int8.onnx tiny-tokens.txt + +# ---- Mode C: Parakeet-TDT-0.6b-v3 int8 (accurate 25-lang recognizer) ------------------------ +fetch_repo csukuangfj/sherpa-onnx-nemo-parakeet-tdt-0.6b-v3-int8 \ + sherpa-onnx-nemo-parakeet-tdt-0.6b-v3-int8 \ + encoder.int8.onnx decoder.int8.onnx joiner.int8.onnx tokens.txt + +echo "get-models OK -> $MODELS_DIR (Mode A v2, Mode B zipformer, Mode C whisper-tiny + v3; INT8; nothing committed)" diff --git a/deploy/parakeet-stt/edge-stt/scripts/mem-sample.sh b/deploy/parakeet-stt/edge-stt/scripts/mem-sample.sh new file mode 100755 index 0000000..1df5c8f --- /dev/null +++ b/deploy/parakeet-stt/edge-stt/scripts/mem-sample.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash +# CLI wrapper over the one memory accountant. Samples total RAM + RSS + CUDA around a command +# (or an already-running --pid). On the Jetson it uses tegrastats; elsewhere /proc/meminfo. +# scripts/mem-sample.sh -- +# scripts/mem-sample.sh --pid --duration 5 --json +set -euo pipefail +cd "$(dirname "$0")/.." +exec "${PYTHON:-python3}" -m src.common.memory_accountant "$@" diff --git a/deploy/parakeet-stt/edge-stt/scripts/pk_dtype_bench.sh b/deploy/parakeet-stt/edge-stt/scripts/pk_dtype_bench.sh new file mode 100644 index 0000000..8e7100a --- /dev/null +++ b/deploy/parakeet-stt/edge-stt/scripts/pk_dtype_bench.sh @@ -0,0 +1,32 @@ +#!/usr/bin/env bash +# GPU dtype sweep for tdt_ctc-110m on the Orin (clean box). Each config runs through the OFFICIAL +# harness (transcribe -> scorer + memory accountant) so WER / RTFx / peak-mem are apples-to-apples +# with the submission's other numbers. Upstream only benched dtypes on CPU; this is the GPU truth. +set -uo pipefail +cd "$HOME/edge-stt/work" +export LD_LIBRARY_PATH=/usr/local/cuda/lib64 +mkdir -p results/dtype +MODELS="$HOME/parakeet-models" + +summ() { python3 -c " +import json,sys +d=json.load(open(sys.argv[1])) +m=d.get('mem',{}) +print(' WER=%5s%% RTFx=%6s peak_total=%sMB proc_rss=%sMB'%( + d.get('wer_pct'), d.get('rtfx'), m.get('peak_total_mb'), m.get('proc_rss_mb'))) +" "$1" 2>/dev/null || echo " (no report)"; } + +for DT in q8_0 q4_k q5_k f16; do + G="$MODELS/tdt_ctc-110m-${DT}.gguf" + if [ ! -s "$G" ]; then echo "### $DT: MISSING $G — skip"; continue; fi + SZ=$(du -h "$G" | cut -f1) + for DEC in ctc tdt; do + echo "=== dtype=$DT ($SZ) decoder=$DEC ($(date +%T)) ===" + PK_MODEL="$G" PK_DECODER="$DEC" \ + ./transcribe --mode A --input data/manifest.jsonl \ + --out "results/dtype/${DT}_${DEC}.jsonl" \ + --report "results/dtype/${DT}_${DEC}.json" --device cuda 2>/dev/null + summ "results/dtype/${DT}_${DEC}.json" + done +done +echo "DTYPE_BENCH_DONE $(date +%T)" diff --git a/deploy/parakeet-stt/edge-stt/scripts/pk_dtype_fetch.sh b/deploy/parakeet-stt/edge-stt/scripts/pk_dtype_fetch.sh new file mode 100644 index 0000000..97fd93c --- /dev/null +++ b/deploy/parakeet-stt/edge-stt/scripts/pk_dtype_fetch.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash +# Fetch the f32-derived 110m GGUF quant variants for the GPU dtype sweep. Resumable (curl -C -). +set -uo pipefail +cd "$HOME/parakeet-models" +BASE="https://huggingface.co/mudler/parakeet-cpp-gguf/resolve/main" +for V in q4_k q5_k f16; do + F="tdt_ctc-110m-${V}.gguf" + if [ -s "$F" ]; then echo "have $F ($(du -h $F|cut -f1))"; continue; fi + echo "=== fetching $F ($(date +%T)) ===" + curl -L -C - --retry 5 --retry-delay 3 -o "$F" "$BASE/$F" 2>&1 | tail -1 + echo " done $F -> $(du -h $F 2>/dev/null | cut -f1) ($(date +%T))" +done +echo "FETCH_DONE $(date +%T)" +ls -la "$HOME"/parakeet-models/tdt_ctc-110m-*.gguf diff --git a/deploy/parakeet-stt/edge-stt/scripts/pk_thread_sweep.sh b/deploy/parakeet-stt/edge-stt/scripts/pk_thread_sweep.sh new file mode 100644 index 0000000..d06926d --- /dev/null +++ b/deploy/parakeet-stt/edge-stt/scripts/pk_thread_sweep.sh @@ -0,0 +1,40 @@ +#!/usr/bin/env bash +# parakeet.cpp Jetson thread sweep — the kDefaultThreads=8 in ggml_graph.cpp was tuned on a +# 20-core dual-CCD HOST CPU, not this 6-core Orin. Sweep --threads on the GPU path to find the +# Jetson optimum. Clean env (GeniePod stopped). Full LibriSpeech-300, ctc decoder (the fast path). +set -uo pipefail +cd "$HOME/edge-stt/work" +export LD_LIBRARY_PATH=/usr/local/cuda/lib64 +BIN="$HOME/parakeet.cpp/build/examples/cli/parakeet-cli" +MODEL="$HOME/parakeet-models/tdt_ctc-110m-q8_0.gguf" + +# plain wav-path-per-line manifest, resolved to the Jetson's wav dir +python3 -c "import json;[print(json.loads(l)['wav']) for l in open('data/manifest.jsonl')]" \ + | sed "s#.*/wav/#$HOME/edge-stt/work/data/wav/#" > /tmp/pk_wavs.txt +echo "manifest: $(wc -l < /tmp/pk_wavs.txt) wavs ($(date +%T))" + +rtfx() { python3 -c " +import json,sys +d=json.load(open(sys.argv[1])) +# find the per-file list (objects carrying proc_ms) +def files(o): + if isinstance(o,list) and o and isinstance(o[0],dict) and 'proc_ms' in o[0]: return o + if isinstance(o,dict): + for v in o.values(): + r=files(v) + if r: return r + return None +fs=files(d) or [] +a=sum(x['audio_sec'] for x in fs); p=sum(x['proc_ms'] for x in fs)/1000.0 +print(' RTFx=%.1f audio=%.0fs proc=%.2fs load_ms=%s n=%d'%(a/p if p else 0,a,p,d.get('load_ms'),len(fs))) +" "$1"; } + +for DEC in ctc tdt; do + for T in 3 4 5 6 8; do + echo "=== decoder=$DEC threads=$T ($(date +%T)) ===" + "$BIN" bench --model "$MODEL" --manifest /tmp/pk_wavs.txt --decoder "$DEC" \ + --threads "$T" --json "/tmp/pk_${DEC}_t${T}.json" 2>/tmp/pk_${DEC}_t${T}.err + rtfx "/tmp/pk_${DEC}_t${T}.json" 2>/dev/null || echo " (parse fail; err: $(tail -1 /tmp/pk_${DEC}_t${T}.err))" + done +done +echo "SWEEP_DONE $(date +%T)" diff --git a/deploy/parakeet-stt/edge-stt/scripts/preflight.sh b/deploy/parakeet-stt/edge-stt/scripts/preflight.sh new file mode 100755 index 0000000..40e6335 --- /dev/null +++ b/deploy/parakeet-stt/edge-stt/scripts/preflight.sh @@ -0,0 +1,49 @@ +#!/usr/bin/env bash +# scripts/preflight.sh — the SINGLE preflight contract (asserts the toolchain the runtime needs). +# +# M0 (this file): HARD-asserts the load-bearing runtime toolchain (CUDA 12.6 / cuDNN 9.3) and +# RECORDS L4T + TensorRT. `transcribe --selfcheck` shells this. M3-8 EXTENDS this same file +# (do not fork a second one). +# +# ENGINE DECISION (2026-06-09, ROADMAP §Decision amendment + work/docs/TRADE-OFFS.md): all three +# modes ship on sherpa-onnx + onnxruntime-gpu (CUDA Execution Provider). The CUDA EP needs +# CUDA + cuDNN, NOT TensorRT — so TensorRT is now a WARN-ONLY record (the deferred Mode-A +# contingency toolchain), not a hard gate. A sherpa-only reproduction must NOT fail for lack of +# the exact TRT version. +# +# ADAPTATION (shared device): the original plan pinned an EXACT L4T 36.4.3 clean-room string and +# would hard-fail otherwise. This device is a shared box at L4T 36.4.7 used as-is, so we assert +# the R36 major release + the load-bearing CUDA/cuDNN versions and only WARN on L4T point-release +# drift. MAXN/clock asserts are intentionally NOT enforced (locking clocks would disturb other +# workloads); RTF results carry the power-mode caveat. +set -euo pipefail + +fail() { echo "PREFLIGHT FAIL: $*" >&2; exit 1; } +warn() { echo "PREFLIGHT WARN: $*" >&2; } + +# --- CUDA 12.6 (HARD — onnxruntime-gpu CUDA EP) --- +if command -v nvcc >/dev/null 2>&1; then NVCC=nvcc; else NVCC=/usr/local/cuda/bin/nvcc; fi +"$NVCC" --version 2>/dev/null | grep -q 'release 12.6' || fail "CUDA != 12.6" + +# --- cuDNN 9.3 (HARD — onnxruntime-gpu CUDA EP) --- +# Match the version field independent of dpkg column spacing (e.g. 'libcudnn9-cuda-12 9.3.0.75-1'). +dpkg -l 2>/dev/null | grep -E '^ii +libcudnn9' | grep -Eq ' 9\.3\.' || fail "cuDNN != 9.3" + +# --- TensorRT 10.3 (WARN-ONLY — deferred Mode-A contingency, not required by the sherpa runtime) --- +if dpkg -l 2>/dev/null | grep -E '^ii +libnvinfer' | grep -Eq ' 10\.3\.'; then + TRT_NOTE="TensorRT 10.3 present (deferred Mode-A contingency)" +else + TRT_NOTE="TensorRT 10.3 NOT found — fine: sherpa-onnx runtime does not need it" + warn "$TRT_NOTE" +fi + +# --- L4T: record, warn-only on point-release drift (adaptation) --- +L4T="$(grep -oE 'R[0-9]+ \(release\), REVISION: [0-9.]+' /etc/nv_tegra_release 2>/dev/null || true)" +[ -n "$L4T" ] || fail "not a Jetson / /etc/nv_tegra_release missing" +echo "$L4T" | grep -q 'R36 (release)' || fail "unexpected L4T major (need R36): $L4T" +case "$L4T" in + *"REVISION: 4.3"*) ;; + *) warn "L4T is '$L4T' (plan referenced 36.4.3); proceeding as-is on shared device" ;; +esac + +echo "preflight OK: $L4T / CUDA 12.6 / cuDNN 9.3 (runtime toolchain matches; device used as-is) | $TRT_NOTE" diff --git a/deploy/parakeet-stt/edge-stt/scripts/prepare_data.py b/deploy/parakeet-stt/edge-stt/scripts/prepare_data.py new file mode 100755 index 0000000..d3faa85 --- /dev/null +++ b/deploy/parakeet-stt/edge-stt/scripts/prepare_data.py @@ -0,0 +1,111 @@ +#!/usr/bin/env python3 +""" +Prepare a deterministic 300-sample LibriSpeech test-clean subset for the parakeet.cpp spike. + +- Downloads LibriSpeech test-clean (if absent) and extracts it. +- Builds the full (utt_id, flac, reference) list, sorts by utt_id, takes the first N (default 300). + NOTE: "first-300 sorted by id" is our documented ASSUMPTIONS.md default for the unspecified + "default subset of 300 samples" in the brief — confirm/pin this with the assessor (FND-5). +- Transcodes each chosen .flac -> 16 kHz mono PCM WAV (LibriSpeech is already 16 kHz mono). +- Writes manifest.jsonl: {id, wav, ref, duration_sec} and manifest.sha256. + +Usage: + python3 prepare_data.py --out data --n 300 +""" +import argparse +import hashlib +import json +import sys +import tarfile +import urllib.request +from pathlib import Path + +URL = "https://www.openslr.org/resources/12/test-clean.tar.gz" # ~346 MB + + +def download(url: str, dest: Path) -> None: + if dest.exists(): + print(f"[skip] {dest} already present") + return + print(f"[download] {url} -> {dest} (~346 MB)") + + def hook(blocks, bs, total): + if total > 0: + pct = min(100, blocks * bs * 100 // total) + sys.stdout.write(f"\r {pct}%") + sys.stdout.flush() + + urllib.request.urlretrieve(url, dest, hook) + print() + + +def main() -> None: + ap = argparse.ArgumentParser() + ap.add_argument("--out", default="data") + ap.add_argument("--n", type=int, default=300) + ap.add_argument("--url", default=URL) + ap.add_argument("--split", default=None, + help="LibriSpeech split subdir under LibriSpeech/ (default: derived from --url)") + args = ap.parse_args() + + import soundfile as sf # libsndfile: reads flac, writes wav + + out = Path(args.out) + out.mkdir(parents=True, exist_ok=True) + # derive the split (e.g. 'test-clean', 'dev-clean') from the URL so --url actually works + split = args.split or Path(args.url).name.replace(".tar.gz", "") + tar = out / f"{split}.tar.gz" + download(args.url, tar) + + root = out / "LibriSpeech" / split + if not root.exists(): + print(f"[extract] {tar.name}") + with tarfile.open(tar) as t: + t.extractall(out) + + # gather (id, flac_path, reference) from the per-chapter *.trans.txt files + items = [] + for trans in root.rglob("*.trans.txt"): + chapter_dir = trans.parent + for line in trans.read_text().splitlines(): + uid, _, text = line.partition(" ") + flac = chapter_dir / f"{uid}.flac" + if flac.exists(): + items.append((uid, flac, text.strip())) + items.sort(key=lambda x: x[0]) + chosen = items[: args.n] + print(f"[select] {len(chosen)} / {len(items)} utterances (sorted by id, first {args.n})") + + wavdir = out / "wav" + wavdir.mkdir(exist_ok=True) + manifest = out / "manifest.jsonl" + total_dur = 0.0 + with manifest.open("w") as mf: + for uid, flac, ref in chosen: + audio, sr = sf.read(str(flac), dtype="int16") + if sr != 16000: # LibriSpeech is already 16 kHz; resample only if needed + import numpy as np + import soxr + f = soxr.resample(audio.astype("float32") / 32768.0, sr, 16000) + audio = (f * 32768.0).clip(-32768, 32767).astype("int16") + sr = 16000 + wav = wavdir / f"{uid}.wav" + sf.write(str(wav), audio, sr, subtype="PCM_16") + dur = len(audio) / sr + total_dur += dur + mf.write(json.dumps({ + "id": uid, + "wav": str(wav.resolve()), + "ref": ref, + "duration_sec": round(dur, 3), + }) + "\n") + + digest = hashlib.sha256(manifest.read_bytes()).hexdigest() + (out / "manifest.sha256").write_text(f"{digest} manifest.jsonl\n") + print(f"[done] {len(chosen)} wavs, total audio {total_dur/60:.1f} min ({total_dur:.0f} s)") + print(f" manifest: {manifest}") + print(f" sha256: {digest}") + + +if __name__ == "__main__": + main() diff --git a/deploy/parakeet-stt/edge-stt/scripts/score.sh b/deploy/parakeet-stt/edge-stt/scripts/score.sh new file mode 100755 index 0000000..d191996 --- /dev/null +++ b/deploy/parakeet-stt/edge-stt/scripts/score.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash +# Thin WER-join wrapper over the one reporter. Recomputes WER over an EXISTING hyps.jsonl +# without re-running inference. Same report.json schema as `transcribe --report`. +# scripts/score.sh [--report report.json] +set -euo pipefail +cd "$(dirname "$0")/.." +exec "${PYTHON:-python3}" -m src.common.wer_rtf_report "$@" diff --git a/deploy/parakeet-stt/edge-stt/src/__init__.py b/deploy/parakeet-stt/edge-stt/src/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/deploy/parakeet-stt/edge-stt/src/common/__init__.py b/deploy/parakeet-stt/edge-stt/src/common/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/deploy/parakeet-stt/edge-stt/src/common/audio.py b/deploy/parakeet-stt/edge-stt/src/common/audio.py new file mode 100644 index 0000000..27e26bc --- /dev/null +++ b/deploy/parakeet-stt/edge-stt/src/common/audio.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python3 +""" +Audio decode front-end (the harness owns decode; RTF is measured over inference only). + +Decode contract (docs/CONTRACT.md §6): libsndfile (soundfile) -> 16 kHz mono PCM16, +resample with soxr only if sr != 16000. Mirrors spike/prepare_data.py. +""" +from __future__ import annotations + +import wave +from pathlib import Path + +TARGET_SR = 16000 + + +def duration_sec(path: str | Path) -> float | None: + """Audio duration in seconds. soundfile if present, else the stdlib wave reader (wav only).""" + path = str(path) + try: + import soundfile as sf + info = sf.info(path) + return info.frames / float(info.samplerate) + except Exception: + pass + try: + with wave.open(path, "rb") as w: + return w.getnframes() / float(w.getframerate()) + except Exception: + return None + + +def decode_16k_mono(path: str | Path): + """Return (int16 mono ndarray @ 16 kHz, sr). Requires soundfile (+ soxr if resampling).""" + import numpy as np + import soundfile as sf + + audio, sr = sf.read(str(path), dtype="int16") + if audio.ndim > 1: # downmix to mono + audio = (audio.astype("int32").mean(axis=1)).astype("int16") + if sr != TARGET_SR: + import soxr + f = soxr.resample(audio.astype("float32") / 32768.0, sr, TARGET_SR) + audio = (f * 32768.0).clip(-32768, 32767).astype("int16") + sr = TARGET_SR + return audio, sr diff --git a/deploy/parakeet-stt/edge-stt/src/common/memory_accountant.py b/deploy/parakeet-stt/edge-stt/src/common/memory_accountant.py new file mode 100644 index 0000000..f4fd762 --- /dev/null +++ b/deploy/parakeet-stt/edge-stt/src/common/memory_accountant.py @@ -0,0 +1,268 @@ +#!/usr/bin/env python3 +""" +The ONE memory accountant. Every downstream measurement reads memory through this module — +no ad-hoc `free` scrapes. It samples three readings together for a target process: + + * total system RAM — Jetson unified memory. `tegrastats` path on the Orin + (parses `RAM used/total MB`), `/proc/meminfo` fallback elsewhere. + * process RSS — /proc//status VmRSS for the workload PID (and its children). + * CUDA device memory — cudaMemGetInfo(free,total) via a tiny ctypes shim. On Tegra unified + memory this tracks system RAM, but we record it separately. + +An idle baseline is captured BEFORE the workload so `delta = peak - idle` is meaningful +(mirrors spike/measure_mem.sh, which samples idle after `sleep 1`). + +Usage: + # sample around a command, print the summary + delta + python3 -m src.common.memory_accountant -- sherpa-onnx-offline --provider=cuda ... a.wav + # sample an already-running pid for a fixed duration + python3 -m src.common.memory_accountant --pid 12345 --duration 5 --json +""" +from __future__ import annotations + +import argparse +import ctypes +import ctypes.util +import json +import os +import re +import shutil +import subprocess +import sys +import threading +import time +from pathlib import Path + +_TEGRA_RE = re.compile(r"RAM (\d+)/(\d+)MB") + + +# --------------------------------------------------------------------------- total RAM +class _TotalRamReader: + """Latest (used_mb, total_mb) of unified/system RAM. Prefers tegrastats on Jetson.""" + + def __init__(self, interval_ms: int = 100): + self.interval_ms = interval_ms + self.backend = "tegrastats" if shutil.which("tegrastats") else "meminfo" + self._latest: tuple[int, int] | None = None + self._proc: subprocess.Popen | None = None + self._thread: threading.Thread | None = None + self._stop = threading.Event() + + def start(self) -> None: + if self.backend == "tegrastats": + self._proc = subprocess.Popen( + ["tegrastats", "--interval", str(self.interval_ms)], + stdout=subprocess.PIPE, stderr=subprocess.DEVNULL, text=True, + ) + self._thread = threading.Thread(target=self._pump_tegrastats, daemon=True) + self._thread.start() + + def _pump_tegrastats(self) -> None: + assert self._proc and self._proc.stdout + for line in self._proc.stdout: + if self._stop.is_set(): + break + m = _TEGRA_RE.search(line) + if m: + self._latest = (int(m.group(1)), int(m.group(2))) + + def read(self) -> tuple[int, int] | None: + if self.backend == "tegrastats": + return self._latest + # /proc/meminfo: used = MemTotal - MemAvailable (works on Jetson unified + x86) + total = avail = None + try: + for line in Path("/proc/meminfo").read_text().splitlines(): + if line.startswith("MemTotal:"): + total = int(line.split()[1]) // 1024 + elif line.startswith("MemAvailable:"): + avail = int(line.split()[1]) // 1024 + if total is not None and avail is not None: + break + except OSError: + return None + if total is None or avail is None: + return None + return (total - avail, total) + + def stop(self) -> None: + self._stop.set() + if self._proc: + self._proc.terminate() + try: + self._proc.wait(timeout=2) + except subprocess.TimeoutExpired: + self._proc.kill() + + +# --------------------------------------------------------------------------- process RSS +def _proc_rss_mb(pid: int, include_children: bool = True) -> float | None: + """VmRSS of pid (+ direct descendants) in MB. None if the pid is gone.""" + pids = [pid] + if include_children: + pids += _descendants(pid) + total_kb = 0 + found = False + for p in pids: + try: + for line in Path(f"/proc/{p}/status").read_text().splitlines(): + if line.startswith("VmRSS:"): + total_kb += int(line.split()[1]) + found = True + break + except OSError: + continue + return total_kb / 1024 if found else None + + +def _descendants(pid: int) -> list[int]: + """Best-effort recursive child PIDs via /proc//task/*/children (Linux).""" + out: list[int] = [] + stack = [pid] + while stack: + cur = stack.pop() + try: + for task in Path(f"/proc/{cur}/task").iterdir(): + kids = (task / "children").read_text().split() + for k in kids: + ki = int(k) + out.append(ki) + stack.append(ki) + except OSError: + continue + return out + + +# --------------------------------------------------------------------------- CUDA memory +class _Cuda: + """cudaMemGetInfo via ctypes. Disabled gracefully where libcudart is absent.""" + + def __init__(self): + self.lib = None + for name in ("cudart", "libcudart.so", "libcudart.so.12"): + path = ctypes.util.find_library("cudart") if name == "cudart" else name + if not path: + continue + try: + self.lib = ctypes.CDLL(path) + break + except OSError: + continue + + def used_total_mb(self) -> tuple[float, float] | None: + if self.lib is None: + return None + free = ctypes.c_size_t(0) + total = ctypes.c_size_t(0) + rc = self.lib.cudaMemGetInfo(ctypes.byref(free), ctypes.byref(total)) + if rc != 0 or total.value == 0: + return None + used = (total.value - free.value) / (1024 * 1024) + return (used, total.value / (1024 * 1024)) + + +# --------------------------------------------------------------------------- sampler +class MemorySampler: + """ + with MemorySampler(pid, interval_ms=100) as s: + ... run workload ... + rec = s.summary() # idle_total_mb, peak_total_mb, proc_rss_mb, cuda_used_mb, samples_n + """ + + def __init__(self, pid: int | None = None, interval_ms: int = 100): + self.pid = pid + self.interval_ms = interval_ms + self._ram = _TotalRamReader(interval_ms) + self._cuda = _Cuda() + self._stop = threading.Event() + self._thread: threading.Thread | None = None + self.total_used: list[int] = [] + self.proc_rss: list[float] = [] + self.cuda_used: list[float] = [] + self.cuda_total_mb: float | None = None + + def __enter__(self) -> "MemorySampler": + self._ram.start() + # settle so tegrastats emits its first line; capture an idle baseline first + time.sleep(max(self.interval_ms, 200) / 1000.0) + self._thread = threading.Thread(target=self._loop, daemon=True) + self._thread.start() + return self + + def _loop(self) -> None: + while not self._stop.is_set(): + rec = self._ram.read() + if rec is not None: + self.total_used.append(rec[0]) + if self.pid is not None: + rss = _proc_rss_mb(self.pid) + if rss is not None: + self.proc_rss.append(rss) + cu = self._cuda.used_total_mb() + if cu is not None: + self.cuda_used.append(cu[0]) + self.cuda_total_mb = cu[1] + self._stop.wait(self.interval_ms / 1000.0) + + def __exit__(self, *exc) -> None: + self._stop.set() + if self._thread: + self._thread.join(timeout=2) + self._ram.stop() + + def summary(self) -> dict: + idle = self.total_used[0] if self.total_used else None + peak = max(self.total_used) if self.total_used else None + return { + "idle_total_mb": idle, + "peak_total_mb": peak, + "delta_total_mb": (peak - idle) if (idle is not None and peak is not None) else None, + "proc_rss_mb": round(max(self.proc_rss), 1) if self.proc_rss else None, + "cuda_used_mb": round(max(self.cuda_used), 1) if self.cuda_used else None, + "cuda_total_mb": round(self.cuda_total_mb, 1) if self.cuda_total_mb else None, + "ram_backend": self._ram.backend, + "samples_n": len(self.total_used), + } + + +def sample_command(cmd: list[str], interval_ms: int = 100) -> dict: + """Run cmd, sampling memory around it. Returns summary + the child return code.""" + proc = subprocess.Popen(cmd) + with MemorySampler(pid=proc.pid, interval_ms=interval_ms) as s: + rc = proc.wait() + out = s.summary() + out["returncode"] = rc + return out + + +def _main() -> None: + ap = argparse.ArgumentParser(description="One memory accountant: total RAM + RSS + CUDA.") + ap.add_argument("--pid", type=int, help="sample an already-running pid") + ap.add_argument("--duration", type=float, default=3.0, help="seconds to sample a --pid") + ap.add_argument("--interval-ms", type=int, default=100) + ap.add_argument("--json", action="store_true", help="emit JSON only") + ap.add_argument("cmd", nargs=argparse.REMAINDER, help="-- to run + measure") + args = ap.parse_args() + + cmd = args.cmd[1:] if args.cmd[:1] == ["--"] else args.cmd + if cmd: + rec = sample_command(cmd, args.interval_ms) + elif args.pid is not None: + with MemorySampler(pid=args.pid, interval_ms=args.interval_ms) as s: + time.sleep(args.duration) + rec = s.summary() + else: + # no target: just measure the system floor for `duration` + with MemorySampler(pid=None, interval_ms=args.interval_ms) as s: + time.sleep(args.duration) + rec = s.summary() + + if args.json: + print(json.dumps(rec)) + else: + for k, v in rec.items(): + print(f"{k:>16}: {v}") + + +if __name__ == "__main__": + _main() diff --git a/deploy/parakeet-stt/edge-stt/src/common/wer_rtf_report.py b/deploy/parakeet-stt/edge-stt/src/common/wer_rtf_report.py new file mode 100644 index 0000000..19f5510 --- /dev/null +++ b/deploy/parakeet-stt/edge-stt/src/common/wer_rtf_report.py @@ -0,0 +1,134 @@ +#!/usr/bin/env python3 +""" +The ONE WER/RTF reporter. Joins hyps.jsonl to the manifest by id, computes Whisper-normalized +WER + RTFx, pulls memory from the accountant, and emits the frozen report.json schema +(docs/CONTRACT.md §4). + +Two entry points, identical output schema: + * transcribe --report -> calls build_report() with a live memory sample + * scripts/score.sh a.jsonl m.jsonl --report r.json + -> recomputes WER over an existing hyps.jsonl (no inference) +""" +from __future__ import annotations + +import argparse +import json +import re +from pathlib import Path + +# ---- Whisper-style normalizer (prefer the real one; documented fallback otherwise) ---- +try: + from whisper_normalizer.english import EnglishTextNormalizer + _wn = EnglishTextNormalizer() + + def normalize(t: str) -> str: + return _wn(t) + + _NORMALIZER = "whisper" +except Exception: # pragma: no cover - fallback path + _punc = re.compile(r"[^\w\s]") + + def normalize(t: str) -> str: + return re.sub(r"\s+", " ", _punc.sub(" ", t.lower())).strip() + + _NORMALIZER = "fallback-lower-punct" + + +_EMPTY_MEM = {"idle_total_mb": None, "peak_total_mb": None, "proc_rss_mb": None, "cuda_used_mb": None} + + +def _wer(refs: list[str], hyps: list[str]) -> float | None: + if not refs: + return None + try: + import jiwer + return jiwer.wer(refs, hyps) + except ImportError: + # minimal Levenshtein-over-words fallback so the harness still produces a number + total_err = total_words = 0 + for r, h in zip(refs, hyps): + rw, hw = r.split(), h.split() + total_err += _edit_distance(rw, hw) + total_words += len(rw) + return total_err / total_words if total_words else None + + +def _edit_distance(a: list[str], b: list[str]) -> int: + prev = list(range(len(b) + 1)) + for i, x in enumerate(a, 1): + cur = [i] + for j, y in enumerate(b, 1): + cur.append(min(prev[j] + 1, cur[j - 1] + 1, prev[j - 1] + (x != y))) + prev = cur + return prev[-1] + + +def build_report(hyps: list[dict], manifest_path: str | None = None, *, mode: str | None = None, + replay: str = "sequential", device: str = "cuda", limit: int | None = None, + mem: dict | None = None, precision: str = "stub", engine: str = "stub") -> dict: + """Assemble the frozen report.json from hyps rows (+ manifest refs for WER).""" + refs_by_id: dict[str, str] = {} + if manifest_path: + for line in Path(manifest_path).read_text().splitlines(): + line = line.strip() + if line: + row = json.loads(line) + if row.get("ref") is not None: + refs_by_id[row["id"]] = row["ref"] + + refs, norm_hyps = [], [] + for h in hyps: + if h["id"] in refs_by_id: + refs.append(normalize(refs_by_id[h["id"]])) + norm_hyps.append(normalize(h.get("text", ""))) + + total_audio = sum(float(h.get("audio_sec") or 0.0) for h in hyps) + wall = sum(float(h.get("infer_sec") or 0.0) for h in hyps) + rtfx = (total_audio / wall) if wall else None + wer = _wer(refs, norm_hyps) + + return { + "mode": mode, + "n": len(hyps), + "total_audio_sec": round(total_audio, 3), + "wall_sec": round(wall, 6), + "rtfx": round(rtfx, 3) if rtfx else None, + "rtf": round(1 / rtfx, 6) if rtfx else None, + "wer_pct": round(wer * 100, 3) if wer is not None else None, + "n_scored": len(refs), + "normalizer": _NORMALIZER, + "mem": mem or dict(_EMPTY_MEM), + "replay": replay, + "precision": precision, + "engine": engine, + "device": device, + "limit": limit, + } + + +def _load_hyps(path: str) -> list[dict]: + return [json.loads(l) for l in Path(path).read_text().splitlines() if l.strip()] + + +def main(argv: list[str] | None = None) -> None: + ap = argparse.ArgumentParser(description="WER/RTF reporter (score.sh wraps this).") + ap.add_argument("hyps", help="hyps.jsonl") + ap.add_argument("manifest", nargs="?", help="manifest.jsonl (for WER refs)") + ap.add_argument("--report", help="write report.json here (else stdout)") + ap.add_argument("--mode") + ap.add_argument("--replay", default="sequential") + ap.add_argument("--device", default="cuda") + args = ap.parse_args(argv) + + rep = build_report(_load_hyps(args.hyps), args.manifest, mode=args.mode, + replay=args.replay, device=args.device) + text = json.dumps(rep, indent=2) + if args.report: + Path(args.report).write_text(text) + print(f"[score] WER={rep['wer_pct']}% RTFx={rep['rtfx']} n_scored={rep['n_scored']} -> {args.report}") + else: + print(text) + + +if __name__ == "__main__": + main() diff --git a/deploy/parakeet-stt/edge-stt/src/entrypoint/__init__.py b/deploy/parakeet-stt/edge-stt/src/entrypoint/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/deploy/parakeet-stt/edge-stt/src/entrypoint/transcribe.py b/deploy/parakeet-stt/edge-stt/src/entrypoint/transcribe.py new file mode 100644 index 0000000..bd658e3 --- /dev/null +++ b/deploy/parakeet-stt/edge-stt/src/entrypoint/transcribe.py @@ -0,0 +1,226 @@ +#!/usr/bin/env python3 +""" +The single grader-facing entrypoint implementing the FROZEN CONTRACT (docs/CONTRACT.md). + + ./transcribe --mode {A|B|C} --input --out hyps.jsonl + [--report report.json] [--limit N] [--device cuda] + [--replay {sequential|batched}] [--selfcheck] + +Modes are STUBS at M0 (echo the manifest reference, no model loaded) so the interface shape +is exercised end-to-end and M1's first real numbers flow through this same harness. Real +engines land in src/modes/{a_offline,b_streaming,c_multilingual}/ in M2. +""" +from __future__ import annotations + +import argparse +import json +import os +import subprocess +import sys +import time +from pathlib import Path + +from src.common import audio + +AUDIO_EXTS = (".wav", ".flac") + + +# --------------------------------------------------------------------------- input loading +def _resolve_wav(row: dict, base: Path) -> str: + """Resolve a manifest row's wav path PORTABLY. The committed manifest stores absolute + paths from wherever it was generated; on a fresh clone / the Jetson those won't exist, + so fall back to /wav/.wav (then basename) before giving up.""" + w = row.get("wav") + if w and Path(w).exists(): + return w + cand = base / "wav" / f"{row.get('id', '')}.wav" + if cand.exists(): + return str(cand) + if w: + cand2 = base / "wav" / Path(w).name + if cand2.exists(): + return str(cand2) + return w or "" # leave as-is; decode raises a clear error if truly missing + + +def load_items(input_path: str, limit: int | None) -> list[dict]: + """Return manifest rows: {id, wav, ref?, duration_sec?}. Accepts a manifest.jsonl or a dir.""" + p = Path(input_path) + items: list[dict] = [] + if p.is_file() and p.suffix == ".jsonl": + base = p.resolve().parent + for line in p.read_text().splitlines(): + line = line.strip() + if line: + row = json.loads(line) + row["wav"] = _resolve_wav(row, base) + items.append(row) + elif p.is_dir(): + for wav in sorted(p.iterdir()): + if wav.suffix.lower() in AUDIO_EXTS: + items.append({"id": wav.stem, "wav": str(wav.resolve()), "ref": None}) + else: + sys.exit(f"--input must be a .jsonl manifest or a directory of wav/flac: {input_path}") + if limit is not None: + items = items[:limit] + if not items: + sys.exit(f"no utterances found in {input_path}") + return items + + +# --------------------------------------------------------------------------- the one core fn +def transcribe_core(item: dict, mode: str, device: str) -> dict: + """ + The ONE internal code path all modes route through (CLI-only — no HTTP/WS twin). Returns a + hyps.jsonl row {id, text, audio_sec, infer_sec}. M0 STUB: echoes the reference (or empty for a + bare wav-dir input, which then emits hyps with no WER). + """ + runner = _MODE_STUBS[mode] + audio_sec = item.get("duration_sec") or audio.duration_sec(item["wav"]) or 0.0 + t0 = time.perf_counter() + text = runner(item, device) + infer_sec = time.perf_counter() - t0 + return { + "id": item["id"], + "text": text, + "audio_sec": round(float(audio_sec), 3), + "infer_sec": round(infer_sec, 6), + } + + +def _stub(item: dict, device: str) -> str: + """Placeholder until real engines land: echo the reference so the WER-join path is exercised.""" + return item.get("ref") or "" + + +# mode -> runner. All point at the stub for now; M2 swaps in real per-mode engines. +_MODE_STUBS = {"A": _stub, "B": _stub, "C": _stub} + + +# --------------------------------------------------------------------------- driver +def run(args: argparse.Namespace) -> None: + items = load_items(args.input, args.limit) + out = Path(args.out) + out.parent.mkdir(parents=True, exist_ok=True) + rows: list[dict] = [] + precision, engine = "stub", "stub" + + # sample memory through the one accountant around the whole inference loop + from src.common.memory_accountant import MemorySampler + if args.mode == "A": + # Mode A. PRIMARY engine = parakeet.cpp (ggml CUDA) — the deployable headline + # (60-107x RTF, 1.8-2.4% WER, +450MB; results/parakeet/RESULTS.md). Set STT_ENGINE=sherpa + # to use the sherpa-onnx alternative (configurable model via MODE_A_MODEL_DIR). Per-file + # inference time only; model-load excluded from RTF. + stt_engine = os.environ.get("STT_ENGINE", "parakeet").lower() + if stt_engine == "parakeet": + from src.modes.a_offline import parakeet_runner as mode_a + precision = "q5_k/q8_0" # per-decoder default; overwritten from timing below + print(f"[transcribe] mode=A device={args.device} n={len(items)} " + f"(parakeet.cpp ggml-CUDA, decoder={os.environ.get('PK_DECODER', 'tdt')})", file=sys.stderr) + else: + from src.modes.a_offline import runner as mode_a + precision = "int8" + print(f"[transcribe] mode=A device={args.device} replay={args.replay} " + f"n={len(items)} (sherpa-onnx-offline INT8)", file=sys.stderr) + with MemorySampler(pid=os.getpid()) as sampler: + rows, timing = mode_a.transcribe(items, device=args.device) + engine = timing.get("engine", "sherpa-onnx-offline") + precision = timing.get("precision", precision) # actual GGUF dtype (parakeet) or int8 (sherpa) + with out.open("w") as f: + for row in rows: + f.write(json.dumps(row) + "\n") + print(f"[transcribe] inference {timing['infer_total_sec']}s " + f"(wall {timing['wall_sec']}s; load {timing.get('load_ms')}ms)", file=sys.stderr) + elif args.mode == "B": + # Mode B is REAL (sherpa-onnx online streaming Zipformer INT8). One streaming pass + # over the batch; small model, co-resides with GeniePod. + from src.modes.b_streaming import runner as mode_b + precision, engine = "int8", "sherpa-onnx-online(streaming-zipformer)" + print(f"[transcribe] mode=B device={args.device} n={len(items)} " + f"(sherpa-onnx streaming Zipformer INT8 — cache-aware, batch=1)", file=sys.stderr) + with MemorySampler(pid=os.getpid()) as sampler: + rows, timing = mode_b.transcribe(items, device=args.device) + with out.open("w") as f: + for row in rows: + f.write(json.dumps(row) + "\n") + print(f"[transcribe] inference {timing['infer_total_sec']}s lookahead={timing.get('lookahead')}", + file=sys.stderr) + elif args.mode == "C": + # Mode C — multilingual + dynamic (whisper-tiny LID + recognizer; v3 deferred). + from src.modes.c_multilingual import runner as mode_c + precision, engine = "int8", "sherpa-onnx-offline(whisper-tiny)" + lang = os.environ.get("MODE_C_LANG", "") # "" = auto-detect (LID) + print(f"[transcribe] mode=C device={args.device} n={len(items)} " + f"(whisper-tiny LID+multilingual, lang={lang or 'auto'})", file=sys.stderr) + with MemorySampler(pid=os.getpid()) as sampler: + rows, timing = mode_c.transcribe(items, device=args.device, language=lang) + with out.open("w") as f: + for row in rows: + f.write(json.dumps(row, ensure_ascii=False) + "\n") + langs = {} + for r in rows: + langs[r.get("lang", "")] = langs.get(r.get("lang", ""), 0) + 1 + print(f"[transcribe] inference {timing['infer_total_sec']}s detected-langs={langs}", file=sys.stderr) + else: + print(f"[transcribe] mode={args.mode} device={args.device} replay={args.replay} " + f"n={len(items)} (M0 STUB: echoing references, no model loaded)", file=sys.stderr) + with MemorySampler(pid=os.getpid()) as sampler: + with out.open("w") as f: + for item in items: + row = transcribe_core(item, args.mode, args.device) + rows.append(row) + f.write(json.dumps(row) + "\n") + mem = {k: sampler.summary().get(k) for k in + ("idle_total_mb", "peak_total_mb", "proc_rss_mb", "cuda_used_mb")} + print(f"[transcribe] wrote {len(rows)} hyps -> {out}", file=sys.stderr) + + if args.report: + # delegate to the one reporter so transcribe --report and score.sh emit identical schema + from src.common import wer_rtf_report + rep = wer_rtf_report.build_report( + hyps=rows, manifest_path=args.input if args.input.endswith(".jsonl") else None, + mode=args.mode, replay=args.replay, device=args.device, limit=args.limit, mem=mem, + precision=precision, engine=engine, + ) + Path(args.report).write_text(json.dumps(rep, indent=2)) + print(f"[transcribe] wrote report -> {args.report}", file=sys.stderr) + print(f"[transcribe] WER={rep.get('wer_pct')}% RTFx={rep.get('rtfx')} " + f"peak_total_mb={rep.get('mem', {}).get('peak_total_mb')}", file=sys.stderr) + + +def selfcheck() -> int: + """`--selfcheck`: shell scripts/preflight.sh (full impl in M3-8). No-op-OK if absent.""" + repo = Path(__file__).resolve().parents[2] + pf = repo / "scripts" / "preflight.sh" + if not pf.exists(): + print(f"[selfcheck] {pf} not present yet (M0-T8 delivers it)", file=sys.stderr) + return 0 + return subprocess.run(["bash", str(pf)]).returncode + + +def build_parser() -> argparse.ArgumentParser: + ap = argparse.ArgumentParser(prog="transcribe", description="Edge-STT grader entrypoint (frozen CLI).") + ap.add_argument("--mode", choices=["A", "B", "C"]) + ap.add_argument("--input") + ap.add_argument("--out") + ap.add_argument("--report") + ap.add_argument("--limit", type=int) + ap.add_argument("--device", default="cuda", choices=["cuda", "cpu"]) + ap.add_argument("--replay", default="sequential", choices=["sequential", "batched"]) + ap.add_argument("--selfcheck", action="store_true") + return ap + + +def main(argv: list[str] | None = None) -> None: + args = build_parser().parse_args(argv) + if args.selfcheck: + sys.exit(selfcheck()) + missing = [f for f in ("mode", "input", "out") if getattr(args, f) is None] + if missing: + sys.exit(f"missing required args: {', '.join('--' + m for m in missing)}") + run(args) + + +if __name__ == "__main__": + main() diff --git a/deploy/parakeet-stt/edge-stt/src/modes/__init__.py b/deploy/parakeet-stt/edge-stt/src/modes/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/deploy/parakeet-stt/edge-stt/src/modes/a_offline/__init__.py b/deploy/parakeet-stt/edge-stt/src/modes/a_offline/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/deploy/parakeet-stt/edge-stt/src/modes/a_offline/parakeet_runner.py b/deploy/parakeet-stt/edge-stt/src/modes/a_offline/parakeet_runner.py new file mode 100644 index 0000000..eabce0b --- /dev/null +++ b/deploy/parakeet-stt/edge-stt/src/modes/a_offline/parakeet_runner.py @@ -0,0 +1,89 @@ +#!/usr/bin/env python3 +""" +Mode A PRIMARY engine — parakeet.cpp (ggml CUDA backend). + +This is the deployable headline (results/parakeet/RESULTS.md): on LibriSpeech-300, tdt_ctc-110m +gives WER 1.808 % @ 61x (decoder=tdt, q5_k) or 2.383 % @ 107x (decoder=ctc, q8_0), +450 MB, +~126 ms/call — the fastest path measured (the ggml CUDA backend is ~4-14x ONNX Runtime on the same +25 W Orin). The per-decoder GGUF default comes from the on-GPU dtype sweep (results/dtype/). + +It drives `parakeet-cli bench` over a wav-per-line manifest: the model loads ONCE (load_ms, excluded +from RTF) and each file reports audio_sec + proc_ms (inference-only) + text. Built by +scripts/build-parakeet.sh; runtime needs LD_LIBRARY_PATH=/usr/local/cuda/lib64. +""" +from __future__ import annotations + +import json +import os +import subprocess +import tempfile +import time +from pathlib import Path + +_HOME = Path(os.path.expanduser("~")) +DEFAULTS = { + "binary": os.environ.get("PARAKEET_CLI", str(_HOME / "parakeet.cpp/build/examples/cli/parakeet-cli")), + "model": os.environ.get("PK_MODEL"), # None -> pick by decoder (see _DECODER_GGUF) + "decoder": os.environ.get("PK_DECODER", "tdt"), # tdt = 1.81%/61x · ctc = 2.38%/107x (both <3%) + "threads": os.environ.get("PK_THREADS", "8"), + "cuda_lib": os.environ.get("CUDA_LIB_DIR", "/usr/local/cuda/lib64"), +} + +# Per-decoder default GGUF (GPU dtype sweep, results/dtype/RESULTS.md). On the Orin GPU, RTFx is +# dtype-INVARIANT (kernel-launch/latency-bound at batch=1), so quantization is a MEMORY lever, not a +# speed one — which lets the accuracy (tdt) path drop to q5_k for free: +# tdt -> q5_k : 1.808% WER @ 61x @ 137 MB (matches q8_0's 1.836% at 23% smaller, identical speed) +# ctc -> q8_0 : 2.383% WER @ 107x @ 177 MB (the speed default; f16 is 0.01pt better but +86 MB) +# Override either with PK_MODEL=. +_DECODER_GGUF = {"tdt": "tdt_ctc-110m-q5_k.gguf", "ctc": "tdt_ctc-110m-q8_0.gguf"} + + +def _resolve_model(cfg: dict) -> str: + """PK_MODEL / explicit cfg override wins; else the per-decoder default GGUF above.""" + if cfg.get("model"): + return cfg["model"] + name = _DECODER_GGUF.get(cfg["decoder"], "tdt_ctc-110m-q8_0.gguf") + return str(_HOME / "parakeet-models" / name) + + +def transcribe(items: list[dict], *, device: str = "cuda", cfg: dict | None = None): + """Transcribe `items` via parakeet-cli bench. Returns (rows, timing). + infer_sec per row = parakeet's per-file proc_ms (inference-only; model-load excluded).""" + cfg = {**DEFAULTS, **(cfg or {})} + cfg["model"] = _resolve_model(cfg) + env = os.environ.copy() + env["LD_LIBRARY_PATH"] = ":".join(p for p in (cfg["cuda_lib"], env.get("LD_LIBRARY_PATH", "")) if p) + + mf = tempfile.NamedTemporaryFile("w", suffix=".txt", delete=False) + for it in items: + mf.write(str(it["wav"]) + "\n") + mf.close() + jout = tempfile.NamedTemporaryFile(suffix=".json", delete=False).name + + cmd = [cfg["binary"], "bench", "--model", cfg["model"], "--manifest", mf.name, + "--decoder", cfg["decoder"], "--threads", str(cfg["threads"]), "--json", jout] + t0 = time.perf_counter() + proc = subprocess.run(cmd, env=env, capture_output=True, text=True) + wall = time.perf_counter() - t0 + if proc.returncode != 0: + raise RuntimeError(f"parakeet-cli bench failed ({proc.returncode}):\n{proc.stderr[-2000:]}") + + b = json.load(open(jout)) + by_base = {os.path.basename(f["path"]): f for f in b["files"]} + rows = [] + for it in items: + f = by_base.get(os.path.basename(str(it["wav"]))) + if f is None: + raise RuntimeError(f"parakeet: no result for {it['id']}") + rows.append({"id": it["id"], "text": f["text"], + "audio_sec": round(float(f["audio_sec"]), 3), + "infer_sec": round(float(f["proc_ms"]) / 1000.0, 6)}) + os.unlink(mf.name) + os.unlink(jout) + # precision label from the GGUF name (tdt_ctc-110m-.gguf -> ), so the report + # reflects the actual quant (q5_k/q8_0/f16/...), not a hardcoded one. + precision = Path(cfg["model"]).stem.split("-")[-1] + return rows, {"infer_total_sec": round(sum(r["infer_sec"] for r in rows), 6), + "wall_sec": round(wall, 6), "load_ms": b.get("load_ms"), + "decoder": cfg["decoder"], "engine": "parakeet.cpp", + "model": Path(cfg["model"]).name, "precision": precision} diff --git a/deploy/parakeet-stt/edge-stt/src/modes/a_offline/runner.py b/deploy/parakeet-stt/edge-stt/src/modes/a_offline/runner.py new file mode 100644 index 0000000..65fb251 --- /dev/null +++ b/deploy/parakeet-stt/edge-stt/src/modes/a_offline/runner.py @@ -0,0 +1,180 @@ +#!/usr/bin/env python3 +""" +Mode A — offline transcription via the `sherpa-onnx-offline` GPU binary. + +Per the 2026-06-09 engine decision (ROADMAP §Decision amendment + TRADE-OFFS.md: +sherpa-onnx for all three modes, TensorRT deferred), Mode A loads +Parakeet-TDT-0.6b-v2 INT8 once and decodes the whole item list in a single +`sherpa-onnx-offline` invocation. The model-load cost is paid once and is +EXCLUDED from the RTF number (we use sherpa's own "Elapsed seconds", which is +inference-only, not the wall time that includes the ~15 s recognizer build). + +Runtime requirement (see memory: sherpa-spine-and-model-staging): the binary +links onnxruntime as a shared lib, so LD_LIBRARY_PATH must contain the ORT lib +dir (which also holds libonnxruntime_providers_cuda.so) and the CUDA libs. +""" +from __future__ import annotations + +import json +import os +import re +import subprocess +import time +from pathlib import Path + +_HOME = Path(os.path.expanduser("~")) +import glob as _glob + +# On-device defaults (overridable via env so the same code runs in M2 packaging). +DEFAULTS = { + "binary": os.environ.get( + "SHERPA_OFFLINE_BIN", str(_HOME / "edge-stt/sherpa-onnx/build/bin/sherpa-onnx-offline")), + "model_dir": os.environ.get( + "MODE_A_MODEL_DIR", str(_HOME / "edge-stt/models/sherpa-onnx-nemo-parakeet-tdt-0.6b-v2-int8")), + # nemo_transducer for Parakeet-v2/v3; "transducer" (or "") for a plain Zipformer transducer. + "model_type": os.environ.get("MODE_A_MODEL_TYPE", "nemo_transducer"), + "ort_lib": os.environ.get( + "ORT_LIB_DIR", str(_HOME / "edge-stt/ort/onnxruntime-linux-aarch64-gpu-1.18.1/lib")), + "cuda_lib": os.environ.get("CUDA_LIB_DIR", "/usr/local/cuda/lib64"), + "num_threads": os.environ.get("MODE_A_THREADS", "4"), +} + +_ELAPSED_RE = re.compile(r"Elapsed seconds:\s*([0-9.]+)") + + +def _find(md: str, prefix: str) -> str: + """Glob encoder/decoder/joiner so the runner handles both 'encoder.int8.onnx' (Parakeet) and + 'encoder-epoch-99-avg-1.int8.onnx' (Zipformer).""" + g = sorted(_glob.glob(f"{md}/{prefix}*.int8.onnx")) + if not g: + raise RuntimeError(f"Mode A: no {prefix}*.int8.onnx under {md}") + return g[0] + + +def _env(ort_lib: str, cuda_lib: str) -> dict: + env = os.environ.copy() + parts = [p for p in (ort_lib, cuda_lib, env.get("LD_LIBRARY_PATH", "")) if p] + env["LD_LIBRARY_PATH"] = ":".join(parts) + return env + + +def _parse_texts(stdout: str, n: int) -> list[str]: + """Pull the per-wav result JSON lines (in wav-argument order) from sherpa's stdout.""" + texts: list[str] = [] + for line in stdout.splitlines(): + line = line.strip() + if line.startswith("{") and '"text"' in line: + try: + texts.append((json.loads(line).get("text") or "").strip()) + except json.JSONDecodeError: + pass + if len(texts) != n: + raise RuntimeError(f"Mode A: parsed {len(texts)} result(s) but expected {n} " + f"(sherpa output format changed?)") + return texts + + +def _run_chunk(items: list[dict], cfg: dict, device: str, retries: int): + """Decode one chunk in a single sherpa-onnx-offline call, retrying on transient + GPU contention (CUBLAS_STATUS_ALLOC_FAILED → SIGABRT on the SHARED Jetson, where + GeniePod's resident LLM intermittently spikes unified memory). Returns (rows, infer_sec, wall_sec).""" + md = cfg["model_dir"] + provider = "cuda" if device == "cuda" else "cpu" + cmd = [ + cfg["binary"], + f"--encoder={_find(md, 'encoder')}", + f"--decoder={_find(md, 'decoder')}", + f"--joiner={_find(md, 'joiner')}", + f"--tokens={md}/tokens.txt", + f"--model-type={cfg['model_type']}", + f"--provider={provider}", + f"--num-threads={cfg['num_threads']}", + ] + [str(it["wav"]) for it in items] + + last_err = "" + for attempt in range(retries + 1): + t0 = time.perf_counter() + proc = subprocess.run(cmd, env=_env(cfg["ort_lib"], cfg["cuda_lib"]), + capture_output=True, text=True) + wall = time.perf_counter() - t0 + if proc.returncode == 0: + try: + texts = _parse_texts(proc.stdout, len(items)) + except RuntimeError as e: + last_err = str(e) + else: + elapsed = _ELAPSED_RE.findall(proc.stdout + "\n" + proc.stderr) + infer = float(elapsed[-1]) if elapsed else wall + durs = [float(it.get("duration_sec") or 0.0) for it in items] + tot = sum(durs) or 1.0 + rows = [{ + "id": it["id"], "text": text, + "audio_sec": round(d, 3), + "infer_sec": round(infer * (d / tot), 6), + } for it, text, d in zip(items, texts, durs)] + return rows, infer, wall + else: + tail = (proc.stderr or "")[-300:].replace("\n", " ") + last_err = f"rc={proc.returncode} {tail}" + if attempt < retries: + print(f" [mode-a] chunk failed ({last_err[:120]}); retry {attempt + 1}/{retries}", + flush=True) + time.sleep(4) + raise RuntimeError(f"sherpa-onnx-offline chunk failed after {retries + 1} attempts: {last_err}") + + +def _decode_resilient(chunk: list[dict], cfg: dict, device: str, retries: int, stats: dict): + """Decode a chunk; on a hard OOM/abort (ORT BFC arena exhaustion on the 8 GB box) SPLIT it + and recurse, down to singles. A single that still can't fit yields an empty-text row (a real + 'did-not-fit' data point) instead of aborting the whole 300-clip run. Accumulates infer/wall + in `stats`. Returns the chunk's hyp rows in input order.""" + try: + cr, infer, wall = _run_chunk(chunk, cfg, device, retries) + stats["infer"] += infer + stats["wall"] += wall + stats["ok"] += len(cr) + return cr + except RuntimeError as e: + if len(chunk) > 1: + mid = len(chunk) // 2 + return (_decode_resilient(chunk[:mid], cfg, device, retries, stats) + + _decode_resilient(chunk[mid:], cfg, device, retries, stats)) + it = chunk[0] + stats["failed"] += 1 + print(f" [mode-a] FAILED to fit utt {it['id']} " + f"(dur={it.get('duration_sec')}s): {str(e)[-100:]}", flush=True) + return [{"id": it["id"], "text": "", "audio_sec": round(float(it.get("duration_sec") or 0.0), 3), + "infer_sec": 0.0, "oom": True}] + + +def transcribe(items: list[dict], *, device: str = "cuda", cfg: dict | None = None, + chunk_size: int | None = None, retries: int = 2): + """ + Decode `items` (rows with id/wav/duration_sec) via sherpa-onnx-offline, in CHUNKS. Items are + sorted SHORTEST-first so short clips batch cheaply; a chunk that overflows the ORT CUDA BFC + arena (the 8 GB Orin Nano's binding constraint) is split and retried down to singles, and a + single that still won't fit is recorded as a non-fatal OOM row — so the full run always + completes and we learn exactly which clips don't fit. Model reload cost is EXCLUDED from RTF + (we sum sherpa's per-chunk "Elapsed seconds"). chunk_size defaults to env MODE_A_CHUNK (8). + + Returns (rows, timing): rows in ORIGINAL input order -> [{id, text, audio_sec, infer_sec[, oom]}]; + timing -> {infer_total_sec, wall_sec, chunks, oom}. Aggregate RTFx = total_audio / + sum(infer_sec) is the model-load-excluded on-device inference RTF. + """ + import sys + cfg = {**DEFAULTS, **(cfg or {})} + n = chunk_size or int(os.environ.get("MODE_A_CHUNK", "8")) + order = {id(it): i for i, it in enumerate(items)} + by_len = sorted(items, key=lambda it: float(it.get("duration_sec") or 0.0)) + stats = {"infer": 0.0, "wall": 0.0, "ok": 0, "failed": 0} + by_id: dict[str, dict] = {} + chunks = [by_len[i:i + n] for i in range(0, len(by_len), n)] + for ci, chunk in enumerate(chunks, 1): + for r in _decode_resilient(chunk, cfg, device, retries, stats): + by_id[r["id"]] = r + print(f" [mode-a] chunk {ci}/{len(chunks)} done " + f"ok={stats['ok']} oom={stats['failed']} infer={stats['infer']:.1f}s", + file=sys.stderr, flush=True) + rows = [by_id[it["id"]] for it in items] # restore original input order + return rows, {"infer_total_sec": round(stats["infer"], 6), "wall_sec": round(stats["wall"], 6), + "chunks": len(chunks), "oom": stats["failed"]} diff --git a/deploy/parakeet-stt/edge-stt/src/modes/b_streaming/__init__.py b/deploy/parakeet-stt/edge-stt/src/modes/b_streaming/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/deploy/parakeet-stt/edge-stt/src/modes/b_streaming/runner.py b/deploy/parakeet-stt/edge-stt/src/modes/b_streaming/runner.py new file mode 100644 index 0000000..e959dca --- /dev/null +++ b/deploy/parakeet-stt/edge-stt/src/modes/b_streaming/runner.py @@ -0,0 +1,119 @@ +#!/usr/bin/env python3 +""" +Mode B — true streaming via the `sherpa-onnx` (online) streaming Zipformer INT8 binary. + +Per the 2026-06-09 engine decision, Mode B is sherpa-onnx's cache-aware streaming Zipformer +(chunk-16-left-128, INT8). The recognizer is cache-aware (batch=1, real streaming with +state carry); for offline manifest scoring we feed each clip and collect its final hypothesis. +The model is small (~73 MB) so it co-resides with GeniePod without the Mode-A OOM risk — +no chunk/split needed. + +Honesty (carried from the ROADMAP): low-latency streaming WER on test-clean is ~3.3-3.9% and +MAY breach the 3% gate — disclosed per look-ahead, never hidden. The look-ahead is fixed by the +model's chunk config (chunk-16-left-128); STREAM_LOOKAHEAD is recorded for the report. + +Runtime: like Mode A, the binary links onnxruntime as a shared lib -> LD_LIBRARY_PATH must hold +the ORT lib dir + CUDA libs. +""" +from __future__ import annotations + +import glob +import json +import os +import re +import subprocess +import time +from pathlib import Path + +_HOME = Path(os.path.expanduser("~")) +DEFAULTS = { + "binary": os.environ.get("SHERPA_ONLINE_BIN", str(_HOME / "edge-stt/sherpa-onnx/build/bin/sherpa-onnx")), + "model_dir": os.environ.get( + "MODE_B_MODEL_DIR", str(_HOME / "edge-stt/models/sherpa-onnx-streaming-zipformer-en-2023-06-26")), + "ort_lib": os.environ.get("ORT_LIB_DIR", str(_HOME / "edge-stt/ort/onnxruntime-linux-aarch64-gpu-1.18.1/lib")), + "cuda_lib": os.environ.get("CUDA_LIB_DIR", "/usr/local/cuda/lib64"), + "num_threads": os.environ.get("MODE_B_THREADS", "4"), + "lookahead": os.environ.get("STREAM_LOOKAHEAD", "chunk-16-left-128"), +} +_ELAPSED_RE = re.compile(r"Elapsed seconds:\s*([0-9.]+)") + + +def _env(ort_lib: str, cuda_lib: str) -> dict: + env = os.environ.copy() + env["LD_LIBRARY_PATH"] = ":".join(p for p in (ort_lib, cuda_lib, env.get("LD_LIBRARY_PATH", "")) if p) + return env + + +def _find(md: str, prefix: str) -> str: + g = sorted(glob.glob(f"{md}/{prefix}*.int8.onnx")) + if not g: + raise RuntimeError(f"Mode B: no {prefix}*.int8.onnx under {md}") + return g[0] + + +def _parse_texts(stdout: str, n: int) -> list[str]: + """sherpa-onnx (online) prints, per wav, the wav path then a JSON line with 'text'.""" + texts: list[str] = [] + for line in stdout.splitlines(): + line = line.strip() + if line.startswith("{") and '"text"' in line: + try: + texts.append((json.loads(line).get("text") or "").strip()) + except json.JSONDecodeError: + pass + if len(texts) != n: + raise RuntimeError(f"Mode B: parsed {len(texts)} result(s) but expected {n}") + return texts + + +def _run_chunk(items: list[dict], cfg: dict, md: str, provider: str): + cmd = [ + cfg["binary"], + f"--encoder={_find(md, 'encoder')}", + f"--decoder={_find(md, 'decoder')}", + f"--joiner={_find(md, 'joiner')}", + f"--tokens={md}/tokens.txt", + f"--provider={provider}", + f"--num-threads={cfg['num_threads']}", + ] + [str(it["wav"]) for it in items] + t0 = time.perf_counter() + proc = subprocess.run(cmd, env=_env(cfg["ort_lib"], cfg["cuda_lib"]), capture_output=True, text=True) + wall = time.perf_counter() - t0 + if proc.returncode != 0: + raise RuntimeError(f"sherpa-onnx (online) failed ({proc.returncode}):\n{proc.stderr[-1500:]}") + # The streaming binary writes BOTH the result JSON and "Elapsed seconds" to STDERR + # (unlike sherpa-onnx-offline, which puts the JSON on stdout) — parse the combined streams. + combined = proc.stdout + "\n" + proc.stderr + texts = _parse_texts(combined, len(items)) + # "Elapsed seconds" is printed PER WAV (not one total) -> SUM them. + elapsed = _ELAPSED_RE.findall(combined) + infer = sum(float(x) for x in elapsed) if elapsed else wall + return texts, infer, wall + + +def transcribe(items: list[dict], *, device: str = "cuda", cfg: dict | None = None, + chunk_size: int | None = None): + """Stream-decode `items` via sherpa-onnx (online), in CHUNKS so a single invocation does not + accumulate 300 wavs' state and get OOM-killed under GeniePod CPU/RAM contention on the shared + box. The streaming model is tiny so reload-per-chunk is cheap. Returns (rows, timing).""" + import sys + cfg = {**DEFAULTS, **(cfg or {})} + md = cfg["model_dir"] + provider = "cuda" if device == "cuda" else "cpu" + n = chunk_size or int(os.environ.get("MODE_B_CHUNK", "50")) + rows: list[dict] = [] + infer_total = wall_total = 0.0 + chunks = [items[i:i + n] for i in range(0, len(items), n)] + for ci, chunk in enumerate(chunks, 1): + texts, infer, wall = _run_chunk(chunk, cfg, md, provider) + infer_total += infer + wall_total += wall + durs = [float(it.get("duration_sec") or 0.0) for it in chunk] + tot = sum(durs) or 1.0 + for it, text, d in zip(chunk, texts, durs): + rows.append({"id": it["id"], "text": text, "audio_sec": round(d, 3), + "infer_sec": round(infer * (d / tot), 6)}) + print(f" [mode-b] chunk {ci}/{len(chunks)} ({len(chunk)}) infer={infer:.1f}s", + file=sys.stderr, flush=True) + return rows, {"infer_total_sec": round(infer_total, 6), "wall_sec": round(wall_total, 6), + "lookahead": cfg["lookahead"], "chunks": len(chunks)} diff --git a/deploy/parakeet-stt/edge-stt/src/modes/c_multilingual/__init__.py b/deploy/parakeet-stt/edge-stt/src/modes/c_multilingual/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/deploy/parakeet-stt/edge-stt/src/modes/c_multilingual/residency.py b/deploy/parakeet-stt/edge-stt/src/modes/c_multilingual/residency.py new file mode 100644 index 0000000..4d266e6 --- /dev/null +++ b/deploy/parakeet-stt/edge-stt/src/modes/c_multilingual/residency.py @@ -0,0 +1,129 @@ +#!/usr/bin/env python3 +""" +Mode C — model registry + Whisper-tiny LID router + TTL/LRU one-resident manager. + +The multilingual mode must keep **exactly ONE heavy recognizer resident** on the 8 GB box (two +0.6 B models would not co-fit — see results/feasibility.md GATE A). This module enforces that: + + Registry logical name -> model dir + recognizer family (whisper | parakeet) + LidRouter Whisper-tiny detects the language (the JSON "lang" field) -> picks a recognizer + Residency holds at most ONE heavy model "resident"; on a route to a different heavy model it + EVICTS-BEFORE-LOAD (serialized, never two resident at once); a TTL expires an idle + model and LRU breaks ties. + +Architecture note: the shipped runners drive sherpa-onnx via a fresh subprocess per chunk, so the +"resident" handle here is the *active model selection* (a counted, mutex-guarded slot) rather than a +warm in-process session — the production M2 path swaps this loader for a resident `serve` process +(as the parakeet.cpp STT server already does on :8178). The invariant it guarantees — never run two +heavy recognizers concurrently — is what GATE A needs, and is enforced regardless. +""" +from __future__ import annotations + +import threading +import time +from dataclasses import dataclass, field + + +# whisper-tiny is LIGHT (~104 MB) and always available as the LID + fallback recognizer; only the +# 0.6 B Parakeet recognizers are "heavy" and subject to the one-resident cap. +HEAVY = {"parakeet"} + + +@dataclass +class ModelSpec: + name: str + family: str # "whisper" | "parakeet" + model_dir: str + heavy: bool = field(init=False) + + def __post_init__(self): + self.heavy = self.family in HEAVY + + +class Registry: + """logical name -> ModelSpec.""" + def __init__(self): + self._m: dict[str, ModelSpec] = {} + + def add(self, spec: ModelSpec) -> "Registry": + self._m[spec.name] = spec + return self + + def get(self, name: str) -> ModelSpec: + return self._m[name] + + def __contains__(self, name: str) -> bool: + return name in self._m + + +class LidRouter: + """Map a Whisper-detected language code to a registered recognizer name. + + English routes to the accurate English model (Parakeet-v2); the v3 25-lang model serves the + other supported languages; anything out-of-set falls back to whisper-tiny itself (which is + multilingual and already loaded as the LID).""" + def __init__(self, *, english: str, multilingual: str, fallback: str, + multilingual_langs: set[str] | None = None): + self.english = english + self.multilingual = multilingual + self.fallback = fallback + # Parakeet-v3 supported languages (subset; extend from the model card). + self.multilingual_langs = multilingual_langs or { + "de", "es", "fr", "it", "pt", "nl", "pl", "ru", "uk", "cs", "sk", "hr", "bg", + "da", "fi", "sv", "el", "hu", "lt", "lv", "et", "ro", "sl", "mt", "en", + } + + def route(self, lang: str) -> str: + lang = (lang or "").lower() + if lang in ("en", "english"): + return self.english + if lang in self.multilingual_langs: + return self.multilingual + return self.fallback + + +class Residency: + """At most ONE heavy model resident. evict-before-load, serialized; TTL + LRU.""" + def __init__(self, registry: Registry, *, ttl_sec: float = 300.0, clock=time.monotonic): + self.reg = registry + self.ttl = ttl_sec + self._clock = clock + self._lock = threading.Lock() + self._resident: str | None = None # name of the currently-resident HEAVY model + self._last_used: float = 0.0 + self.events: list[tuple[str, str]] = [] # (action, name) audit trail + + def _evict(self): + if self._resident is not None: + self.events.append(("evict", self._resident)) + self._resident = None + + def acquire(self, name: str): + """Ensure `name` is the resident heavy model (light models never evict anything). Returns + the ModelSpec. Guarantees the one-resident invariant under the lock.""" + spec = self.reg.get(name) + with self._lock: + now = self._clock() + # TTL: drop an idle resident before doing anything else. + if self._resident is not None and (now - self._last_used) > self.ttl: + self._evict() + if spec.heavy: + if self._resident != name: + self._evict() # evict-before-load: never two heavy resident + self.events.append(("load", name)) + self._resident = name + self._last_used = now + return spec + + def resident(self) -> str | None: + return self._resident + + def assert_single_resident(self) -> bool: + """The audit invariant GATE A needs: scanning the event log, the number of loads minus + evicts is never > 1 at any point (never two heavy models resident simultaneously).""" + live = 0 + for action, _ in self.events: + live += 1 if action == "load" else -1 + if live > 1: + return False + return True diff --git a/deploy/parakeet-stt/edge-stt/src/modes/c_multilingual/runner.py b/deploy/parakeet-stt/edge-stt/src/modes/c_multilingual/runner.py new file mode 100644 index 0000000..55c1125 --- /dev/null +++ b/deploy/parakeet-stt/edge-stt/src/modes/c_multilingual/runner.py @@ -0,0 +1,113 @@ +#!/usr/bin/env python3 +""" +Mode C — multilingual + dynamic, via sherpa-onnx-offline with a Whisper model. + +Per the 2026-06-09 engine decision, Mode C is sherpa-onnx multi-recognizer with a +Whisper-tiny LID router. Whisper natively does BOTH language identification (the JSON +"lang" field is the router's decision) and multilingual transcription, so whisper-tiny +serves as the LID + a multilingual recognizer in one. (The ROADMAP's accurate production +recognizer is Parakeet-TDT-0.6b-v3, 25-lang; it is DEFERRED here because HuggingFace +rate-limited the VM mid-stage — v3 drops in behind the same router when staged. The +TTL/LRU one-resident residency manager is M2 production polish.) + +Whisper-tiny is small (~104 MB) so it co-resides with GeniePod without the Mode-A OOM. +Runtime: LD_LIBRARY_PATH must hold the ORT lib dir + CUDA libs (same as A/B). +""" +from __future__ import annotations + +import glob +import json +import os +import re +import subprocess +import time +from pathlib import Path + +_HOME = Path(os.path.expanduser("~")) +DEFAULTS = { + "binary": os.environ.get("SHERPA_OFFLINE_BIN", str(_HOME / "edge-stt/sherpa-onnx/build/bin/sherpa-onnx-offline")), + "model_dir": os.environ.get("MODE_C_MODEL_DIR", str(_HOME / "edge-stt/models/sherpa-onnx-whisper-tiny")), + "ort_lib": os.environ.get("ORT_LIB_DIR", str(_HOME / "edge-stt/ort/onnxruntime-linux-aarch64-gpu-1.18.1/lib")), + "cuda_lib": os.environ.get("CUDA_LIB_DIR", "/usr/local/cuda/lib64"), + "num_threads": os.environ.get("MODE_C_THREADS", "4"), +} +_ELAPSED_RE = re.compile(r"Elapsed seconds:\s*([0-9.]+)") + + +def _env(ort_lib: str, cuda_lib: str) -> dict: + env = os.environ.copy() + env["LD_LIBRARY_PATH"] = ":".join(p for p in (ort_lib, cuda_lib, env.get("LD_LIBRARY_PATH", "")) if p) + return env + + +def _find(md: str, suffix: str) -> str: + g = sorted(glob.glob(f"{md}/*{suffix}")) + if not g: + raise RuntimeError(f"Mode C: no *{suffix} under {md}") + return g[0] + + +def _parse_results(combined: str, n: int) -> list[tuple[str, str]]: + """Return [(text, detected_lang)] per wav. Whisper's result JSON carries the LID in 'lang'.""" + out: list[tuple[str, str]] = [] + for line in combined.splitlines(): + line = line.strip() + if line.startswith("{") and '"text"' in line: + try: + j = json.loads(line) + out.append(((j.get("text") or "").strip(), (j.get("lang") or "").strip())) + except json.JSONDecodeError: + pass + if len(out) != n: + raise RuntimeError(f"Mode C: parsed {len(out)} result(s) but expected {n}") + return out + + +def _run_chunk(items, cfg, md, provider, language): + cmd = [ + cfg["binary"], + f"--whisper-encoder={_find(md, 'encoder.int8.onnx')}", + f"--whisper-decoder={_find(md, 'decoder.int8.onnx')}", + f"--tokens={_find(md, 'tokens.txt')}", + f"--whisper-language={language}", # "" => auto-detect (LID router decision) + "--whisper-task=transcribe", + f"--provider={provider}", + f"--num-threads={cfg['num_threads']}", + ] + [str(it["wav"]) for it in items] + t0 = time.perf_counter() + proc = subprocess.run(cmd, env=_env(cfg["ort_lib"], cfg["cuda_lib"]), capture_output=True, text=True) + wall = time.perf_counter() - t0 + if proc.returncode != 0: + raise RuntimeError(f"sherpa-onnx-offline (whisper) failed ({proc.returncode}):\n{proc.stderr[-1500:]}") + combined = proc.stdout + "\n" + proc.stderr + results = _parse_results(combined, len(items)) + elapsed = _ELAPSED_RE.findall(combined) + infer = float(elapsed[-1]) if elapsed else wall + return results, infer, wall + + +def transcribe(items, *, device: str = "cuda", cfg: dict | None = None, + language: str = "", chunk_size: int | None = None): + """Transcribe `items` with whisper-tiny (LID auto-detect when language=""), in chunks. + Returns (rows, timing); rows carry the detected language for LID-accuracy reporting.""" + import sys + cfg = {**DEFAULTS, **(cfg or {})} + md = cfg["model_dir"] + provider = "cuda" if device == "cuda" else "cpu" + n = chunk_size or int(os.environ.get("MODE_C_CHUNK", "20")) + rows: list[dict] = [] + infer_total = wall_total = 0.0 + chunks = [items[i:i + n] for i in range(0, len(items), n)] + for ci, chunk in enumerate(chunks, 1): + results, infer, wall = _run_chunk(chunk, cfg, md, provider, language) + infer_total += infer + wall_total += wall + durs = [float(it.get("duration_sec") or 0.0) for it in chunk] + tot = sum(durs) or 1.0 + for it, (text, lang), d in zip(chunk, results, durs): + rows.append({"id": it["id"], "text": text, "lang": lang, + "audio_sec": round(d, 3), "infer_sec": round(infer * (d / tot), 6)}) + print(f" [mode-c] chunk {ci}/{len(chunks)} ({len(chunk)}) infer={infer:.1f}s " + f"langs={set(r['lang'] for r in rows[-len(chunk):])}", file=sys.stderr, flush=True) + return rows, {"infer_total_sec": round(infer_total, 6), "wall_sec": round(wall_total, 6), + "chunks": len(chunks), "recognizer": "whisper-tiny", "lid": "whisper-auto"} diff --git a/deploy/parakeet-stt/edge-stt/transcribe b/deploy/parakeet-stt/edge-stt/transcribe new file mode 100755 index 0000000..e10ee7e --- /dev/null +++ b/deploy/parakeet-stt/edge-stt/transcribe @@ -0,0 +1,6 @@ +#!/usr/bin/env bash +# Top-level grader entrypoint shim. The README Deployment Guide ends at this command. +# Frozen CLI lives in docs/CONTRACT.md; impl in src/entrypoint/transcribe.py. +set -euo pipefail +cd "$(dirname "$0")" +exec "${PYTHON:-python3}" -m src.entrypoint.transcribe "$@"