Skip to content

Commit 158bbd2

Browse files
authored
LiveTR v2.0.0の記事を公開し、既存記事へ現在価格を追記する
LiveTR v2.0.0の記事を公開し、既存記事へ現在価格を追記する
2 parents baf4eae + e9958a3 commit 158bbd2

11 files changed

Lines changed: 181 additions & 6 deletions

File tree

‎.github/scripts/crosspost-devto.mjs‎

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -252,12 +252,15 @@ function readHugoMeta(blogSlug) {
252252
}
253253

254254
export function listLocalCandidates() {
255-
const candidates = fs
255+
const posts = fs
256256
.readdirSync(POST_DIR, { withFileTypes: true })
257257
.filter(
258258
(entry) =>
259259
entry.isDirectory() && fs.existsSync(path.join(POST_DIR, entry.name, "index.md")),
260-
)
260+
);
261+
// 下書き記事もZennファイルを持つため、孤児判定には下書きを含む全記事を使う。
262+
const knownZennSlugs = new Set(posts.map((entry) => toZennSlug(entry.name)));
263+
const candidates = posts
261264
.map((entry) => {
262265
const meta = readHugoMeta(entry.name);
263266
return {
@@ -279,8 +282,7 @@ export function listLocalCandidates() {
279282
}
280283
readTopicsAndPublished(item.zennSlug);
281284
}
282-
const candidateSet = new Set(candidates.map((item) => item.zennSlug));
283-
const orphan = [...zennSlugs].filter((slug) => !candidateSet.has(slug));
285+
const orphan = [...zennSlugs].filter((slug) => !knownZennSlugs.has(slug));
284286
if (orphan.length) throw new Error(`管理外Zenn記事がある: ${orphan.join(", ")}`);
285287
return candidates;
286288
}

‎articles/livetr-realtime-translator.md‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,8 @@ OLTranslatorが画面のテキストを翻訳するアプリだったので、
7878

7979
@[card](https://qo-shop.booth.pm/items/8134987)
8080

81+
BOOTHの価格は現在980円です。
82+
8183
---
8284

8385
## 関連記事

‎articles/livetr-v2-release.md‎

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
---
2+
title: "LiveTR を v2.0.0 にした — 文字起こしを入れ替えて、完成した一文だけを訳す"
3+
emoji: "🎧"
4+
type: "tech"
5+
topics: ["claudecode", "個人開発", "翻訳", "音声認識", "windows"]
6+
published: true
7+
---
8+
9+
:::message
10+
この記事は [Claude Code 始めました](https://kitepon.dev/blog/) からの転載です。
11+
:::
12+
13+
俺が作っている LiveTR を v2.0.0 にした。メジャーバージョンアップだ。PCで流れている英語の音声をその場で日本語字幕にして、同時に日本語で読み上げるWindows用アプリで、今回の主眼は翻訳の質だ。そのために文字起こしから入れ替えて、翻訳の品質がほぼ最大化されたよ。
14+
15+
アプリ自体の紹介と、作った時の話は[前の記事](https://kitepon.dev/blog/post/livetr-app/)に書いてある。
16+
17+
---
18+
19+
## 訳の質は、翻訳へ渡す英文で決まる
20+
21+
LiveTR は翻訳そのものをオンラインの翻訳サービスへ投げている。向こうは渡された英文を忠実に訳して返してくるので、出てくる日本語の質は、こちらが渡す英文がどれだけ整っているかで決まる。完全な一文を渡せば、同じサービスがそのまま良い訳を返す。これは[前に一度書いた](https://kitepon.dev/blog/post/livetr-complete-sentence/)通りで、LiveTR の設計の要にしている。
22+
23+
v1 は音声を一定の時間ごとに区切って文字起こしして、途中で切れた断片を後ろで組み立ててから翻訳へ回していた。実況や会話の途中で文が切れると、前半と後半が別々に訳される。そのために v2.0.0 では文字起こしのモデルを Kyutai STT 1B に入れ替えて、この区切りかたごと作り直した。英語の音声を連続した流れのまま受け取り、文が完成するまで待って、一文につき一回だけ翻訳へ渡す。これで、納得のいかない文章の区切りが完全に解消した。
24+
25+
![v2.0.0の処理の流れ。連続した音声から文の完成を待ち、完成した一文に話者ラベルを付けて、一文につき一回だけ翻訳へ渡す](https://kitepon.dev/blog/post/livetr-v2-release/fig1.png)
26+
*v2.0.0の処理の流れ。連続した音声から文の完成を待ち、完成した一文に話者ラベルを付けて、一文につき一回だけ翻訳へ渡す*
27+
28+
停止した時も、最後に取り込んだ音声とまだ完成していない文を処理してから閉じる。
29+
30+
---
31+
32+
## 話者の判定は、完成した文につける
33+
34+
LiveTR は声の特徴で話者を見分けて、字幕の色と読み上げの声を話者ごとに変えている。最大8人まで区別する。
35+
36+
v2.0.0 では、この判定を完成した一文へのラベル付けに限定した。話者が切り替わったという理由で文章を分割しないので、判定が揺れても文の切れ目には影響しない。声の特徴を作る材料も、無音やエンジン音をできるだけ除いて、実際に人が話している部分から取るようにした。
37+
38+
---
39+
40+
## 読み上げが追いつかない時は、速度を上げる
41+
42+
英語の実況のように次から次へと文が来ると、日本語の読み上げが追いつかなくなる。v2.0.0 は、再生中のものを含めてまだ読み上げ終わっていない文の数、残っている読み上げの秒数、新しい文が来る間隔を見て、次に読む速度を決める。
43+
44+
![読み上げ速度の自動調整。未完了の文の数、残りの読み上げ秒数、新しい文が来る間隔から次の読み上げ速度を決め、通常速度と最大速度の間で動かす](https://kitepon.dev/blog/post/livetr-v2-release/fig2.png)
45+
*読み上げ速度の自動調整。未完了の文の数、残りの読み上げ秒数、新しい文が来る間隔から次の読み上げ速度を決め、通常速度と最大速度の間で動かす*
46+
47+
---
48+
49+
## 更新に買い直しは要らない
50+
51+
v2.0.0 は既存の購入者もそのまま更新できる。BOOTHの商品ページから最新版をダウンロードして、同じ手順で上書きすれば最新版になる。アンインストールは要らない。
52+
53+
---
54+
55+
## 動く条件は前と同じ
56+
57+
| 項目 | 要件 |
58+
|------|------|
59+
| OS | Windows 10 / 11(64bit) |
60+
| GPU | NVIDIA CUDA対応GPU(必須) |
61+
| VRAM | 4GB以上を推奨 |
62+
| メモリ | 16GB以上を推奨 |
63+
64+
NVIDIA製のGPUが必要で、AMDやIntelのGPUだけのPCでは動かない。翻訳には Google Cloud Translation、DeepL、Azure Translator、Amazon Translate のいずれかのキーが要る(各社に月間の無料枠がある。取得手順はアプリの設定の中にある)。この2つは v1 から変わっていない。読み上げの通常の速度と最大速度も、同じ設定の画面で決める。最大速度は0.1倍刻みで3.0倍まで選べる。
65+
66+
音声認識と機械翻訳を通すので、聞き間違いや誤訳、遅れは出る。用途は英語の動画を見るときの補助だ。
67+
68+
---
69+
70+
## ダウンロード
71+
72+
@[card](https://qo-shop.booth.pm/items/8134987)
73+
74+
BOOTHで980円の買い切りで、アプリ側の月額はない。文字起こしのモデルはインストーラに入れていないので、初回の起動時に取得するかどうかを確認する(約2.20GiB)。後から取ることもできて、進捗の表示、取消、途中からの再開に対応している。
75+
76+
---
77+
78+
## 関連記事
79+
80+
- [LiveTR — 動画の英語音声をリアルタイムで日本語にするアプリ](https://kitepon.dev/blog/post/livetr-app/) — アプリそのものの紹介と、作った時の話
81+
- [完全な文だけを訳に回す](https://kitepon.dev/blog/post/livetr-complete-sentence/) — 切れた断片を組み立てていた頃の話
82+
- [自力じゃ無理なロジック、Claudeと論文から組み立てた話](https://kitepon.dev/blog/post/claude-research-implementation/) — 話者まわりのロジックを組んだ時の話
83+
84+
---
85+
86+
*このブログ「Claude Code 始めました」は、Claude MAX ユーザーが実際の開発で使いながら学んだことを記録していくサイトです。*

‎content/post/livetr-app/index.md‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,8 @@ OLTranslatorが画面のテキストを翻訳するアプリだったので、
7373

7474
{{< linkcard url="https://qo-shop.booth.pm/items/8134987" title="LiveTR — リアルタイム音声翻訳アプリ" desc="PCで再生中の英語動画をリアルタイムで日本語字幕+読み上げ。BOOTHで配布中。" site="BOOTH" image="booth-thumb.png" >}}
7575

76+
BOOTHの価格は現在980円です。
77+
7678
---
7779

7880
## 関連記事
483 KB
Loading
262 KB
Loading
89.6 KB
Loading
84.6 KB
Loading
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
---
2+
title: "LiveTR を v2.0.0 にした — 文字起こしを入れ替えて、完成した一文だけを訳す"
3+
date: 2026-08-27T21:00:00+09:00
4+
draft: false
5+
description: "リアルタイム音声翻訳アプリLiveTRのメジャーバージョンアップ。文字起こしを連続処理に入れ替えて、完成した一文だけを翻訳へ回すようにした。BOOTHで980円、既存購入者はそのまま更新できる。"
6+
cover:
7+
image: "cover.png"
8+
tags: ["LiveTR", "Claude Code"]
9+
---
10+
11+
俺が作っている LiveTR を v2.0.0 にした。メジャーバージョンアップだ。PCで流れている英語の音声をその場で日本語字幕にして、同時に日本語で読み上げるWindows用アプリで、今回の主眼は翻訳の質だ。そのために文字起こしから入れ替えて、翻訳の品質がほぼ最大化されたよ。
12+
13+
アプリ自体の紹介と、作った時の話は[前の記事]({{< relref "/post/livetr-app" >}})に書いてある。
14+
15+
---
16+
17+
## 訳の質は、翻訳へ渡す英文で決まる
18+
19+
LiveTR は翻訳そのものをオンラインの翻訳サービスへ投げている。向こうは渡された英文を忠実に訳して返してくるので、出てくる日本語の質は、こちらが渡す英文がどれだけ整っているかで決まる。完全な一文を渡せば、同じサービスがそのまま良い訳を返す。これは[前に一度書いた]({{< relref "/post/livetr-complete-sentence" >}})通りで、LiveTR の設計の要にしている。
20+
21+
v1 は音声を一定の時間ごとに区切って文字起こしして、途中で切れた断片を後ろで組み立ててから翻訳へ回していた。実況や会話の途中で文が切れると、前半と後半が別々に訳される。そのために v2.0.0 では文字起こしのモデルを Kyutai STT 1B に入れ替えて、この区切りかたごと作り直した。英語の音声を連続した流れのまま受け取り、文が完成するまで待って、一文につき一回だけ翻訳へ渡す。これで、納得のいかない文章の区切りが完全に解消した。
22+
23+
![v2.0.0の処理の流れ。連続した音声から文の完成を待ち、完成した一文に話者ラベルを付けて、一文につき一回だけ翻訳へ渡す](fig1.png)
24+
25+
停止した時も、最後に取り込んだ音声とまだ完成していない文を処理してから閉じる。
26+
27+
---
28+
29+
## 話者の判定は、完成した文につける
30+
31+
LiveTR は声の特徴で話者を見分けて、字幕の色と読み上げの声を話者ごとに変えている。最大8人まで区別する。
32+
33+
v2.0.0 では、この判定を完成した一文へのラベル付けに限定した。話者が切り替わったという理由で文章を分割しないので、判定が揺れても文の切れ目には影響しない。声の特徴を作る材料も、無音やエンジン音をできるだけ除いて、実際に人が話している部分から取るようにした。
34+
35+
---
36+
37+
## 読み上げが追いつかない時は、速度を上げる
38+
39+
英語の実況のように次から次へと文が来ると、日本語の読み上げが追いつかなくなる。v2.0.0 は、再生中のものを含めてまだ読み上げ終わっていない文の数、残っている読み上げの秒数、新しい文が来る間隔を見て、次に読む速度を決める。
40+
41+
![読み上げ速度の自動調整。未完了の文の数、残りの読み上げ秒数、新しい文が来る間隔から次の読み上げ速度を決め、通常速度と最大速度の間で動かす](fig2.png)
42+
43+
---
44+
45+
## 更新に買い直しは要らない
46+
47+
v2.0.0 は既存の購入者もそのまま更新できる。BOOTHの商品ページから最新版をダウンロードして、同じ手順で上書きすれば最新版になる。アンインストールは要らない。
48+
49+
---
50+
51+
## 動く条件は前と同じ
52+
53+
| 項目 | 要件 |
54+
|------|------|
55+
| OS | Windows 10 / 11(64bit) |
56+
| GPU | NVIDIA CUDA対応GPU(必須) |
57+
| VRAM | 4GB以上を推奨 |
58+
| メモリ | 16GB以上を推奨 |
59+
60+
NVIDIA製のGPUが必要で、AMDやIntelのGPUだけのPCでは動かない。翻訳には Google Cloud Translation、DeepL、Azure Translator、Amazon Translate のいずれかのキーが要る(各社に月間の無料枠がある。取得手順はアプリの設定の中にある)。この2つは v1 から変わっていない。読み上げの通常の速度と最大速度も、同じ設定の画面で決める。最大速度は0.1倍刻みで3.0倍まで選べる。
61+
62+
音声認識と機械翻訳を通すので、聞き間違いや誤訳、遅れは出る。用途は英語の動画を見るときの補助だ。
63+
64+
---
65+
66+
## ダウンロード
67+
68+
{{< linkcard url="https://qo-shop.booth.pm/items/8134987" title="LiveTR — リアルタイム音声翻訳アプリ" desc="英語音声をその場で日本語字幕と日本語の読み上げに。v2.0.0で文字起こしを連続処理に刷新。Windows + NVIDIA GPU 向け。" site="BOOTH" >}}
69+
70+
BOOTHで980円の買い切りで、アプリ側の月額はない。文字起こしのモデルはインストーラに入れていないので、初回の起動時に取得するかどうかを確認する(約2.20GiB)。後から取ることもできて、進捗の表示、取消、途中からの再開に対応している。
71+
72+
---
73+
74+
## 関連記事
75+
76+
- [LiveTR — 動画の英語音声をリアルタイムで日本語にするアプリ]({{< relref "/post/livetr-app" >}}) — アプリそのものの紹介と、作った時の話
77+
- [完全な文だけを訳に回す]({{< relref "/post/livetr-complete-sentence" >}}) — 切れた断片を組み立てていた頃の話
78+
- [自力じゃ無理なロジック、Claudeと論文から組み立てた話]({{< relref "/post/claude-research-implementation" >}}) — 話者まわりのロジックを組んだ時の話
79+
80+
---
81+
82+
*このブログ「Claude Code 始めました」は、Claude MAX ユーザーが実際の開発で使いながら学んだことを記録していくサイトです。*

‎tools/cover/mobile-covers.json‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
"dns-blindspot": "「ありません」の正体",
2424
"kikoeru-listening": "読めるのに聞き取れない",
2525
"livetr-app": "LiveTR",
26+
"livetr-v2-release": "LiveTR v2.0.0",
2627
"livetr-complete-sentence": "完全な文だけを訳に回す",
2728
"max-plan-review": "MAXで何が変わるか",
2829
"oltranslator-app": "OLTranslator",

0 commit comments

Comments
 (0)