@danything/arib 1.2.0 → 1.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/synth.js CHANGED
@@ -10,7 +10,7 @@ import { PACKET, SYNC, withCrc } from "./psi.js";
10
10
  export { withCrc };
11
11
  const be = (value) => [(value >> 8) & 0xff, value & 0xff];
12
12
  const be32 = (value) => [...be(value >>> 16), ...be(value & 0xffff)];
13
- /** セクションの頭8バイト (長さは `withCrc` が埋める) */
13
+ /** セクションの頭 8 バイト (長さは `withCrc` が埋める) */
14
14
  function head(tableId, extension, part = {}) {
15
15
  return [
16
16
  tableId,
@@ -35,8 +35,8 @@ export function putPcr(packet, pcr) {
35
35
  /**
36
36
  * Unicode → JIS X 0208 の区点。**読む側の裏返し。**
37
37
  *
38
- * 表を抱え込まずに、EUC-JP のデコーダを1回だけ総当たりして作る
39
- * (84区 × 94点 = 7896 文字)。テストと偽放送局からしか呼ばないので、
38
+ * 表を抱え込まずに、EUC-JP のデコーダを 1 回だけ総当たりして作る
39
+ * (84 区 × 94 点 = 7896 文字)。テストと偽放送局からしか呼ばないので、
40
40
  * 最初に使うときまで作らない。
41
41
  */
42
42
  let jis = null;
@@ -57,7 +57,7 @@ function jisTable() {
57
57
  return jis;
58
58
  }
59
59
  /**
60
- * 文字列を ARIB STD-B24 の8単位符号にする。
60
+ * 文字列を ARIB STD-B24 の 8 単位符号にする。
61
61
  *
62
62
  * 初期状態 (G0=漢字) から始めて、ASCII のところだけ英数集合へ切り替える。
63
63
  * 本物の放送はもっと凝った切り替え方をするが、**読む側が同じ経路を通れば足りる**。
@@ -81,13 +81,13 @@ export function encodeAribText(text, half = false) {
81
81
  out.push(0x1b, 0x24, 0x42, ...(half ? [0x8a] : []));
82
82
  alnum = false;
83
83
  const kuten = jisTable().get(char);
84
- // 表に無い字は下駄で埋める (2区14点)。長さが変わらないので位置がずれない
84
+ // 表に無い字は下駄で埋める (2 区 14 点)。長さが変わらないので位置がずれない
85
85
  out.push(...be(kuten ?? 0x222e));
86
86
  }
87
87
  return out;
88
88
  }
89
89
  /**
90
- * 番組名・局名 (SI) に書く形式。**ASCII は中型 (MSZ) で挟んで半角で読ませる** — 標準の大きさの
90
+ * 番組名・局名 (SI) に書く形式。**ASCII は中型 (MSZ) で挟んで半角で読ませる。** 標準の大きさの
91
91
  * 英数はテレビが全角で描く (読む側 `aribtext.ts` も全角にする)。全角の英数 (「Venue」) は
92
92
  * 漢字の集合の字として書くので、読めば書いたとおりの文字列に戻る
93
93
  */
@@ -96,7 +96,7 @@ function encodeSiText(text) {
96
96
  }
97
97
  /** 言語の符号 "jpn" (ISO 639-2) */
98
98
  const JPN = [0x6a, 0x70, 0x6e];
99
- /** 長さ1バイトを頭に付けた文字列。SI の記述子はどこもこの形式 */
99
+ /** 長さ 1 バイトを頭に付けた文字列。SI の記述子はどこもこの形式 */
100
100
  const sized = (text) => {
101
101
  const body = encodeSiText(text);
102
102
  return [body.length, ...body];
@@ -117,9 +117,9 @@ options = {}) {
117
117
  }
118
118
  return withCrc(body);
119
119
  }
120
- /** 2桁の10進を BCD の1バイトに */
120
+ /** 2 桁の 10 進を BCD の 1 バイトに */
121
121
  const bcd = (value) => ((Math.floor(value / 10) << 4) | (value % 10)) & 0xff;
122
- /** epoch ms → MJD + BCD の5バイト。放送の時刻は日本時間で書く */
122
+ /** epoch ms → MJD + BCD の 5 バイト。放送の時刻は日本時間で書く */
123
123
  function mjdTime(at) {
124
124
  const jst = Math.floor(at / 1000) + 9 * 3600;
125
125
  const mjd = Math.floor(jst / 86400) + 40587;
@@ -131,7 +131,7 @@ function mjdTime(at) {
131
131
  bcd(rest % 60),
132
132
  ];
133
133
  }
134
- /** ms → BCD 3バイトの尺 */
134
+ /** ms → BCD 3 バイトの尺 */
135
135
  function bcdDuration(ms) {
136
136
  const total = Math.floor(ms / 1000);
137
137
  return [
@@ -141,11 +141,11 @@ function bcdDuration(ms) {
141
141
  ];
142
142
  }
143
143
  /**
144
- * シリーズ記述子 (0xD5。ARIB STD-B10 第2部)。
144
+ * シリーズ記述子 (0xD5。ARIB STD-B10 第 2 部)。
145
145
  *
146
146
  * series_id(16) / repeat_label(4) program_pattern(3) expire_date_valid_flag(1) /
147
147
  * expire_date(16) / episode_number(12) last_episode_number(12) / series_name_char。
148
- * 有効期限は載せない (flag 0、日付は全ビット1)
148
+ * 有効期限は載せない (flag 0、日付は全ビット 1)
149
149
  */
150
150
  function seriesDescriptor(series) {
151
151
  const episode = series.episode ?? 0;
@@ -164,7 +164,7 @@ function seriesDescriptor(series) {
164
164
  }
165
165
  /**
166
166
  * デジタルコピー制御記述子 (0xC1)。EIT の番組と PMT に載る。
167
- * 中身は1バイトだけ: 記録制御 (2) 最大ビットレートの有無 (1) 部品ごとの制御の有無 (1) 出力の制御 (4)
167
+ * 中身は 1 バイトだけ: 記録制御 (2) 最大ビットレートの有無 (1) 部品ごとの制御の有無 (1) 出力の制御 (4)
168
168
  */
169
169
  export function copyControlDescriptor(control) {
170
170
  return [0xc1, 0x01, ((control & 0b11) << 6) | 0b0100];
@@ -203,7 +203,7 @@ function eventDescriptors(event) {
203
203
  * simulcast_group_tag / フラグ / 言語 / **放送が付けた名前**。
204
204
  *
205
205
  * フラグは 多言語(1) 主音声(1) 品質(2) 標本化周波数(3) reserved(1)。
206
- * 名前は、種別も言語も同じ音声が2本あるとき**唯一の見分け**になる
206
+ * 名前は、種別も言語も同じ音声が 2 本あるとき**唯一の見分け**になる
207
207
  */
208
208
  const lang = [...(audio.lang ?? "jpn")].map((c) => c.charCodeAt(0));
209
209
  const text = encodeSiText(audio.text ?? "");
@@ -320,11 +320,11 @@ export function packetize(pid, section, counter = 0) {
320
320
  }
321
321
  return Uint8Array.from(packets);
322
322
  }
323
- /** 部品を1本のバイト列に繋ぐ。組んだパケットを流し込むときの糊 */
323
+ /** 部品を 1 本のバイト列に繋ぐ。組んだパケットを流し込むときの糊 */
324
324
  export function stream(...parts) {
325
325
  return joinBytes(parts);
326
326
  }
327
- /** PCR を1つ運ぶだけのパケット */
327
+ /** PCR を 1 つ運ぶだけのパケット */
328
328
  export function pcrPacket(pid, seconds, counter = 0) {
329
329
  const packet = new Uint8Array(PACKET).fill(0xff);
330
330
  packet[0] = SYNC;
@@ -337,11 +337,11 @@ export function pcrPacket(pid, seconds, counter = 0) {
337
337
  putPcr(packet, seconds * 90_000);
338
338
  return packet;
339
339
  }
340
- /** 放送の実時刻 (TDT) を1パケットに。BML の `getCurrentDateTime` が見る */
340
+ /** 放送の実時刻 (TDT) を 1 パケットに。データ放送の時刻 (`BmlDecoder` の `currentTime`) はこれから作る */
341
341
  export function tdtPacket(unixMs) {
342
342
  return packetize(0x0014, Uint8Array.from([0x70, 0x70, 0x05, ...mjdTime(unixMs)]));
343
343
  }
344
- /** PAT。サービスID → PMT の PID */
344
+ /** PAT。サービス ID → PMT の PID */
345
345
  export function patSection(programs, transportStreamId = 1) {
346
346
  const body = head(0x00, transportStreamId);
347
347
  for (const [serviceId, pmtPid] of programs) {
@@ -350,7 +350,7 @@ export function patSection(programs, transportStreamId = 1) {
350
350
  return withCrc(body);
351
351
  }
352
352
  /**
353
- * PMT。ロゴのカルーセルが乗る ES を1つだけ持たせる。
353
+ * PMT。ロゴのカルーセルが乗る ES を 1 つだけ持たせる。
354
354
  * 目印は stream_identifier_descriptor (0x52) の component_tag
355
355
  */
356
356
  export function pmtSection(serviceId, esPid, componentTag) {
@@ -377,7 +377,7 @@ export function pmtSection(serviceId, esPid, componentTag) {
377
377
  * [service-filter.ts](service-filter.ts) を試すのに要る
378
378
  */
379
379
  export function programMap(serviceId, pcrPid,
380
- /** `[種別, PID]`。**3つ目は記述子**の並び (字幕の部品タグなど) */
380
+ /** `[種別, PID]`。**3 つ目は記述子**の並び (字幕の部品タグなど) */
381
381
  streams, ecmPid,
382
382
  /** 番組ぜんたいに掛かる記述子 (program_info) に足すもの。コピー制御 ({@link copyControlDescriptor}) など */
383
383
  extra = []) {
@@ -409,7 +409,7 @@ export function bxmlDescriptor(options = {}) {
409
409
  const { dataComponentId = 0x0c, entryPoint = true } = options;
410
410
  const body = [
411
411
  ...be(dataComponentId),
412
- // 伝送方式00 / 入口 / 自動起動 / 解像度0011 (960x540)
412
+ // 伝送方式 00 / 入口 / 自動起動 / 解像度 0011 (960x540)
413
413
  ...(entryPoint ? [0x33, 0x70] : [0x00, 0xff]),
414
414
  0xf8, // dataEventId 0xF / event_section_flag
415
415
  0xa0, // 即時取得あり / 蓄積不可 / 起動優先
@@ -420,7 +420,7 @@ export function bxmlDescriptor(options = {}) {
420
420
  * 字幕の ES (stream_type 0x06) に付ける記述子。**字幕の目印。**
421
421
  *
422
422
  * 部品タグ (stream_identifier_descriptor。ふつうの字幕は 0x30〜0x37) と、データ符号化方式記述子の
423
- * data_component_id 0x0008 (字幕)。続く1バイトの DMF・時刻制御モードは denpa も ffmpeg も見ない
423
+ * data_component_id 0x0008 (字幕)。続く 1 バイトの DMF・時刻制御モードは denpa も ffmpeg も見ない
424
424
  */
425
425
  export function captionDescriptors(componentTag = 0x30) {
426
426
  return [0x52, 0x01, componentTag, 0xfd, 0x03, 0x00, 0x08, 0x3d];
@@ -433,7 +433,7 @@ function dsmccSection(tableId, message) {
433
433
  * DII。「このモジュールは何バイトで、名前は何か」を伝える。
434
434
  *
435
435
  * **複数のモジュールを載せられる。** 本物の BS はここに `LOGO-05` と
436
- * `CS_LOGO-05` を並べて流していて (実機の `BS15:16625` で確認)、1つしか
436
+ * `CS_LOGO-05` を並べて流していて (実機の `BS15:16625` で確認)、1 つしか
437
437
  * 載せられない作りでは CS を取りこぼす経路を試せない。
438
438
  */
439
439
  export function diiSection(downloadId, blockSize, modules,
@@ -469,7 +469,7 @@ transactionId = 1) {
469
469
  0x00, // ackPeriod
470
470
  ...be32(0), // tCDownloadWindow
471
471
  ...be32(0), // tCDownloadScenario
472
- ...be(0), // compatibilityDescriptor: 長さ0
472
+ ...be(0), // compatibilityDescriptor: 長さ 0
473
473
  ...be(list.length), // numberOfModules
474
474
  ...entries,
475
475
  ...be(0), // privateDataLength
@@ -485,7 +485,7 @@ transactionId = 1) {
485
485
  ...rest,
486
486
  ]);
487
487
  }
488
- /** DDB。モジュールを割ったブロックを1つ運ぶ */
488
+ /** DDB。モジュールを割ったブロックを 1 つ運ぶ */
489
489
  export function ddbSection(downloadId, moduleId, moduleVersion, blockNumber, block) {
490
490
  return dsmccSection(0x3c, [
491
491
  0x11,
@@ -516,7 +516,7 @@ export function logoModule(logoType, logos) {
516
516
  }
517
517
  /*
518
518
  * --- データ放送のテストで使う定番の割り振り ---
519
- * denpa の bml / data-timeline / recorded-bml の3つのテストが、同じ表と同じ組み立てを
519
+ * denpa の bml / data-timeline / recorded-bml の 3 つのテストが、同じ表と同じ組み立てを
520
520
  * それぞれに書いていた。番号そのものに意味は無く、揃っていることに意味がある。
521
521
  */
522
522
  export const BML_TS = {
@@ -527,7 +527,7 @@ export const BML_TS = {
527
527
  downloadId: 0xf0000001,
528
528
  componentTag: 0x40,
529
529
  };
530
- /** BML の ES が1本だけ載った PMT (`BML_TS` の割り振り) */
530
+ /** BML の ES が 1 本だけ載った PMT (`BML_TS` の割り振り) */
531
531
  export function bmlPmt() {
532
532
  return programMap(BML_TS.service, BML_TS.videoPid, [
533
533
  [0x02, BML_TS.videoPid, [0x52, 0x01, 0x00]],
@@ -546,7 +546,7 @@ export function bmlHead() {
546
546
  ];
547
547
  }
548
548
  /**
549
- * モジュール1つぶんの中身。**放送は multipart/mixed で複数のファイルを詰める。**
549
+ * モジュール 1 つぶんの中身。**放送は multipart/mixed で複数のファイルを詰める。**
550
550
  * 本物と同じく、頭に Content-Type、境界で区切って各ファイルに Content-Location
551
551
  */
552
552
  export function multipartModule(files) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@danything/arib",
3
- "version": "1.2.0",
3
+ "version": "1.2.2",
4
4
  "description": "日本のデジタル放送 (ARIB) の TS を読む: PSI・PES・EIT・ARIB の文字・字幕・データ放送",
5
5
  "license": "MIT",
6
6
  "repository": {