@ghoran/audio 0.0.0-stage → 0.2.0
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/README.md +150 -2
- package/dist/abdulbasit-CgLk633T.mjs +14 -0
- package/dist/abdulbasit-vmZoDL5W.mjs +12 -0
- package/dist/almuiqly-DMovgqFY.mjs +12 -0
- package/dist/almuiqly-Ds8QVRUj.mjs +14 -0
- package/dist/ansarian-CsfxGgu4.mjs +14 -0
- package/dist/ansarian-DAYqks3x.mjs +93 -0
- package/dist/ayah-index-p8ffdA40.mjs +7 -0
- package/dist/catalog.d.ts +4 -0
- package/dist/catalog.mjs +31 -0
- package/dist/fooladvand-hedayatfar-DPOvoFnl.mjs +14 -0
- package/dist/fooladvand-hedayatfar-bfGu26PN.mjs +12 -0
- package/dist/ghamadi-Gq4oILyo.mjs +14 -0
- package/dist/ghamadi-IUX7AtH-.mjs +20 -0
- package/dist/hashes/abdulbasit.d.ts +5 -0
- package/dist/hashes/abdulbasit.mjs +7 -0
- package/dist/hashes/almuiqly.d.ts +5 -0
- package/dist/hashes/almuiqly.mjs +7 -0
- package/dist/hashes/ansarian.d.ts +5 -0
- package/dist/hashes/ansarian.mjs +7 -0
- package/dist/hashes/fooladvand-hedayatfar.d.ts +5 -0
- package/dist/hashes/fooladvand-hedayatfar.mjs +7 -0
- package/dist/hashes/ghamadi.d.ts +5 -0
- package/dist/hashes/ghamadi.mjs +7 -0
- package/dist/hashes/husary.d.ts +5 -0
- package/dist/hashes/husary.mjs +7 -0
- package/dist/hashes/jafarpour.d.ts +5 -0
- package/dist/hashes/jafarpour.mjs +7 -0
- package/dist/hashes/makarem-kabiri.d.ts +5 -0
- package/dist/hashes/makarem-kabiri.mjs +7 -0
- package/dist/hashes/maleki.d.ts +5 -0
- package/dist/hashes/maleki.mjs +7 -0
- package/dist/hashes/minshawy-mujawwad.d.ts +5 -0
- package/dist/hashes/minshawy-mujawwad.mjs +7 -0
- package/dist/hashes/minshawy-murattal.d.ts +5 -0
- package/dist/hashes/minshawy-murattal.mjs +7 -0
- package/dist/hashes/motaz.d.ts +5 -0
- package/dist/hashes/motaz.mjs +7 -0
- package/dist/hashes/parhizgar.d.ts +5 -0
- package/dist/hashes/parhizgar.mjs +7 -0
- package/dist/husary-58J-Hbbz.mjs +14 -0
- package/dist/husary-RnRQi5i-.mjs +12 -0
- package/dist/index-OUGKp8YA.d.ts +64 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.mjs +15 -0
- package/dist/jafarpour--RmpKsL1.mjs +12 -0
- package/dist/jafarpour-2Nco5LM6.mjs +14 -0
- package/dist/load.d.ts +7 -0
- package/dist/load.mjs +94 -0
- package/dist/makarem-kabiri-DNCrtExW.mjs +12 -0
- package/dist/makarem-kabiri-Di0qt0pO.mjs +14 -0
- package/dist/maleki-BtTzBMIi.mjs +14 -0
- package/dist/maleki-CrOeub6K.mjs +2433 -0
- package/dist/minshawy-mujawwad-BduwtoWV.mjs +12 -0
- package/dist/minshawy-mujawwad-CF0_Aws9.mjs +14 -0
- package/dist/minshawy-murattal-BCila8ep.mjs +12 -0
- package/dist/minshawy-murattal-DWTJ7Vbi.mjs +14 -0
- package/dist/motaz-B3SeKFg1.mjs +333 -0
- package/dist/motaz-BPiSDPjo.mjs +14 -0
- package/dist/parhizgar-DI28CJpf.mjs +14 -0
- package/dist/parhizgar-DkUYzfYH.mjs +12 -0
- package/dist/playback-BK0IJjxS.mjs +130 -0
- package/dist/sources/abdulbasit.d.ts +2 -0
- package/dist/sources/abdulbasit.mjs +1 -0
- package/dist/sources/almuiqly.d.ts +2 -0
- package/dist/sources/almuiqly.mjs +1 -0
- package/dist/sources/ansarian.d.ts +2 -0
- package/dist/sources/ansarian.mjs +1 -0
- package/dist/sources/fooladvand-hedayatfar.d.ts +2 -0
- package/dist/sources/fooladvand-hedayatfar.mjs +1 -0
- package/dist/sources/ghamadi.d.ts +2 -0
- package/dist/sources/ghamadi.mjs +1 -0
- package/dist/sources/husary.d.ts +2 -0
- package/dist/sources/husary.mjs +1 -0
- package/dist/sources/jafarpour.d.ts +2 -0
- package/dist/sources/jafarpour.mjs +1 -0
- package/dist/sources/makarem-kabiri.d.ts +2 -0
- package/dist/sources/makarem-kabiri.mjs +1 -0
- package/dist/sources/maleki.d.ts +2 -0
- package/dist/sources/maleki.mjs +1 -0
- package/dist/sources/minshawy-mujawwad.d.ts +2 -0
- package/dist/sources/minshawy-mujawwad.mjs +1 -0
- package/dist/sources/minshawy-murattal.d.ts +2 -0
- package/dist/sources/minshawy-murattal.mjs +1 -0
- package/dist/sources/motaz.d.ts +2 -0
- package/dist/sources/motaz.mjs +1 -0
- package/dist/sources/parhizgar.d.ts +2 -0
- package/dist/sources/parhizgar.mjs +1 -0
- package/dist/targets/-16/abdulbasit.d.ts +5 -0
- package/dist/targets/-16/abdulbasit.mjs +333 -0
- package/dist/targets/-16/almuiqly.d.ts +5 -0
- package/dist/targets/-16/almuiqly.mjs +3953 -0
- package/dist/targets/-16/ansarian.d.ts +5 -0
- package/dist/targets/-16/ansarian.mjs +29723 -0
- package/dist/targets/-16/fooladvand-hedayatfar.d.ts +5 -0
- package/dist/targets/-16/fooladvand-hedayatfar.mjs +13818 -0
- package/dist/targets/-16/ghamadi.d.ts +5 -0
- package/dist/targets/-16/ghamadi.mjs +2133 -0
- package/dist/targets/-16/husary.d.ts +5 -0
- package/dist/targets/-16/husary.mjs +7958 -0
- package/dist/targets/-16/jafarpour.d.ts +5 -0
- package/dist/targets/-16/jafarpour.mjs +9243 -0
- package/dist/targets/-16/makarem-kabiri.d.ts +5 -0
- package/dist/targets/-16/makarem-kabiri.mjs +24293 -0
- package/dist/targets/-16/maleki.d.ts +5 -0
- package/dist/targets/-16/maleki.mjs +23403 -0
- package/dist/targets/-16/minshawy-mujawwad.d.ts +5 -0
- package/dist/targets/-16/minshawy-mujawwad.mjs +38 -0
- package/dist/targets/-16/minshawy-murattal.d.ts +5 -0
- package/dist/targets/-16/minshawy-murattal.mjs +108 -0
- package/dist/targets/-16/motaz.d.ts +5 -0
- package/dist/targets/-16/motaz.mjs +7813 -0
- package/dist/targets/-16/parhizgar.d.ts +5 -0
- package/dist/targets/-16/parhizgar.mjs +183 -0
- package/dist/targets/-18/abdulbasit.d.ts +5 -0
- package/dist/targets/-18/abdulbasit.mjs +12 -0
- package/dist/targets/-18/almuiqly.d.ts +5 -0
- package/dist/targets/-18/almuiqly.mjs +73 -0
- package/dist/targets/-18/ansarian.d.ts +5 -0
- package/dist/targets/-18/ansarian.mjs +16483 -0
- package/dist/targets/-18/fooladvand-hedayatfar.d.ts +5 -0
- package/dist/targets/-18/fooladvand-hedayatfar.mjs +1308 -0
- package/dist/targets/-18/ghamadi.d.ts +5 -0
- package/dist/targets/-18/ghamadi.mjs +248 -0
- package/dist/targets/-18/husary.d.ts +5 -0
- package/dist/targets/-18/husary.mjs +12 -0
- package/dist/targets/-18/jafarpour.d.ts +5 -0
- package/dist/targets/-18/jafarpour.mjs +233 -0
- package/dist/targets/-18/makarem-kabiri.d.ts +5 -0
- package/dist/targets/-18/makarem-kabiri.mjs +2873 -0
- package/dist/targets/-18/maleki.d.ts +5 -0
- package/dist/targets/-18/maleki.mjs +11178 -0
- package/dist/targets/-18/minshawy-mujawwad.d.ts +5 -0
- package/dist/targets/-18/minshawy-mujawwad.mjs +12 -0
- package/dist/targets/-18/minshawy-murattal.d.ts +5 -0
- package/dist/targets/-18/minshawy-murattal.mjs +12 -0
- package/dist/targets/-18/motaz.d.ts +5 -0
- package/dist/targets/-18/motaz.mjs +1978 -0
- package/dist/targets/-18/parhizgar.d.ts +5 -0
- package/dist/targets/-18/parhizgar.mjs +12 -0
- package/dist/targets/-23/abdulbasit.d.ts +5 -0
- package/dist/targets/-23/abdulbasit.mjs +12 -0
- package/dist/targets/-23/almuiqly.d.ts +5 -0
- package/dist/targets/-23/almuiqly.mjs +12 -0
- package/dist/targets/-23/ansarian.d.ts +5 -0
- package/dist/targets/-23/ansarian.mjs +12 -0
- package/dist/targets/-23/fooladvand-hedayatfar.d.ts +5 -0
- package/dist/targets/-23/fooladvand-hedayatfar.mjs +12 -0
- package/dist/targets/-23/ghamadi.d.ts +5 -0
- package/dist/targets/-23/ghamadi.mjs +20 -0
- package/dist/targets/-23/husary.d.ts +5 -0
- package/dist/targets/-23/husary.mjs +12 -0
- package/dist/targets/-23/jafarpour.d.ts +5 -0
- package/dist/targets/-23/jafarpour.mjs +12 -0
- package/dist/targets/-23/makarem-kabiri.d.ts +5 -0
- package/dist/targets/-23/makarem-kabiri.mjs +12 -0
- package/dist/targets/-23/maleki.d.ts +5 -0
- package/dist/targets/-23/maleki.mjs +16 -0
- package/dist/targets/-23/minshawy-mujawwad.d.ts +5 -0
- package/dist/targets/-23/minshawy-mujawwad.mjs +12 -0
- package/dist/targets/-23/minshawy-murattal.d.ts +5 -0
- package/dist/targets/-23/minshawy-murattal.mjs +12 -0
- package/dist/targets/-23/motaz.d.ts +5 -0
- package/dist/targets/-23/motaz.mjs +16 -0
- package/dist/targets/-23/parhizgar.d.ts +5 -0
- package/dist/targets/-23/parhizgar.mjs +12 -0
- package/dist/types-BiTocnkC.d.ts +76 -0
- package/dist/url.d.ts +5 -0
- package/dist/url.mjs +135 -0
- package/dist/verify.d.ts +7 -0
- package/dist/verify.mjs +26 -0
- package/package.json +61 -3
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { r as createAudioSource } from "../../playback-BK0IJjxS.mjs";
|
|
2
|
+
import { t as metadata } from "../../parhizgar-DI28CJpf.mjs";
|
|
3
|
+
//#endregion
|
|
4
|
+
//#region src/targets/-18/parhizgar.ts
|
|
5
|
+
const parhizgar = /* @__PURE__ */ createAudioSource(metadata, {
|
|
6
|
+
"targetLufs": -18,
|
|
7
|
+
"base": -554,
|
|
8
|
+
"overrides": [],
|
|
9
|
+
"unavailable": []
|
|
10
|
+
});
|
|
11
|
+
//#endregion
|
|
12
|
+
export { parhizgar as default, parhizgar };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { r as createAudioSource } from "../../playback-BK0IJjxS.mjs";
|
|
2
|
+
import { t as metadata } from "../../abdulbasit-CgLk633T.mjs";
|
|
3
|
+
//#endregion
|
|
4
|
+
//#region src/targets/-23/abdulbasit.ts
|
|
5
|
+
const abdulbasit = /* @__PURE__ */ createAudioSource(metadata, {
|
|
6
|
+
"targetLufs": -23,
|
|
7
|
+
"base": -886,
|
|
8
|
+
"overrides": [],
|
|
9
|
+
"unavailable": []
|
|
10
|
+
});
|
|
11
|
+
//#endregion
|
|
12
|
+
export { abdulbasit, abdulbasit as default };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { r as createAudioSource } from "../../playback-BK0IJjxS.mjs";
|
|
2
|
+
import { t as metadata } from "../../almuiqly-Ds8QVRUj.mjs";
|
|
3
|
+
//#endregion
|
|
4
|
+
//#region src/targets/-23/almuiqly.ts
|
|
5
|
+
const almuiqly = /* @__PURE__ */ createAudioSource(metadata, {
|
|
6
|
+
"targetLufs": -23,
|
|
7
|
+
"base": -718,
|
|
8
|
+
"overrides": [],
|
|
9
|
+
"unavailable": []
|
|
10
|
+
});
|
|
11
|
+
//#endregion
|
|
12
|
+
export { almuiqly, almuiqly as default };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { r as createAudioSource } from "../../playback-BK0IJjxS.mjs";
|
|
2
|
+
import { t as metadata } from "../../ansarian-CsfxGgu4.mjs";
|
|
3
|
+
//#endregion
|
|
4
|
+
//#region src/targets/-23/ansarian.ts
|
|
5
|
+
const ansarian = /* @__PURE__ */ createAudioSource(metadata, {
|
|
6
|
+
"targetLufs": -23,
|
|
7
|
+
"base": -630,
|
|
8
|
+
"overrides": [],
|
|
9
|
+
"unavailable": []
|
|
10
|
+
});
|
|
11
|
+
//#endregion
|
|
12
|
+
export { ansarian, ansarian as default };
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { c as AudioSourceProfile } from "../../types-BiTocnkC.js";
|
|
2
|
+
//#region src/targets/-23/fooladvand-hedayatfar.d.ts
|
|
3
|
+
declare const fooladvandHedayatfar: AudioSourceProfile<"fooladvand-hedayatfar">;
|
|
4
|
+
//#endregion
|
|
5
|
+
export { fooladvandHedayatfar as default, fooladvandHedayatfar };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { r as createAudioSource } from "../../playback-BK0IJjxS.mjs";
|
|
2
|
+
import { t as metadata } from "../../fooladvand-hedayatfar-DPOvoFnl.mjs";
|
|
3
|
+
//#endregion
|
|
4
|
+
//#region src/targets/-23/fooladvand-hedayatfar.ts
|
|
5
|
+
const fooladvandHedayatfar = /* @__PURE__ */ createAudioSource(metadata, {
|
|
6
|
+
"targetLufs": -23,
|
|
7
|
+
"base": -848,
|
|
8
|
+
"overrides": [],
|
|
9
|
+
"unavailable": []
|
|
10
|
+
});
|
|
11
|
+
//#endregion
|
|
12
|
+
export { fooladvandHedayatfar as default, fooladvandHedayatfar };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { r as createAudioSource } from "../../playback-BK0IJjxS.mjs";
|
|
2
|
+
import { t as metadata } from "../../ghamadi-Gq4oILyo.mjs";
|
|
3
|
+
//#endregion
|
|
4
|
+
//#region src/targets/-23/ghamadi.ts
|
|
5
|
+
const ghamadi = /* @__PURE__ */ createAudioSource(metadata, {
|
|
6
|
+
"targetLufs": -23,
|
|
7
|
+
"base": -721,
|
|
8
|
+
"overrides": [[
|
|
9
|
+
235,
|
|
10
|
+
-1275,
|
|
11
|
+
true
|
|
12
|
+
], [
|
|
13
|
+
3314,
|
|
14
|
+
-835,
|
|
15
|
+
true
|
|
16
|
+
]],
|
|
17
|
+
"unavailable": []
|
|
18
|
+
});
|
|
19
|
+
//#endregion
|
|
20
|
+
export { ghamadi as default, ghamadi };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { r as createAudioSource } from "../../playback-BK0IJjxS.mjs";
|
|
2
|
+
import { t as metadata } from "../../husary-58J-Hbbz.mjs";
|
|
3
|
+
//#endregion
|
|
4
|
+
//#region src/targets/-23/husary.ts
|
|
5
|
+
const husary = /* @__PURE__ */ createAudioSource(metadata, {
|
|
6
|
+
"targetLufs": -23,
|
|
7
|
+
"base": -699,
|
|
8
|
+
"overrides": [],
|
|
9
|
+
"unavailable": []
|
|
10
|
+
});
|
|
11
|
+
//#endregion
|
|
12
|
+
export { husary as default, husary };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { r as createAudioSource } from "../../playback-BK0IJjxS.mjs";
|
|
2
|
+
import { t as metadata } from "../../jafarpour-2Nco5LM6.mjs";
|
|
3
|
+
//#endregion
|
|
4
|
+
//#region src/targets/-23/jafarpour.ts
|
|
5
|
+
const jafarpour = /* @__PURE__ */ createAudioSource(metadata, {
|
|
6
|
+
"targetLufs": -23,
|
|
7
|
+
"base": -820,
|
|
8
|
+
"overrides": [],
|
|
9
|
+
"unavailable": []
|
|
10
|
+
});
|
|
11
|
+
//#endregion
|
|
12
|
+
export { jafarpour as default, jafarpour };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { r as createAudioSource } from "../../playback-BK0IJjxS.mjs";
|
|
2
|
+
import { t as metadata } from "../../makarem-kabiri-Di0qt0pO.mjs";
|
|
3
|
+
//#endregion
|
|
4
|
+
//#region src/targets/-23/makarem-kabiri.ts
|
|
5
|
+
const makaremKabiri = /* @__PURE__ */ createAudioSource(metadata, {
|
|
6
|
+
"targetLufs": -23,
|
|
7
|
+
"base": -814,
|
|
8
|
+
"overrides": [],
|
|
9
|
+
"unavailable": []
|
|
10
|
+
});
|
|
11
|
+
//#endregion
|
|
12
|
+
export { makaremKabiri as default, makaremKabiri };
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { r as createAudioSource } from "../../playback-BK0IJjxS.mjs";
|
|
2
|
+
import { t as metadata } from "../../maleki-BtTzBMIi.mjs";
|
|
3
|
+
//#endregion
|
|
4
|
+
//#region src/targets/-23/maleki.ts
|
|
5
|
+
const maleki = /* @__PURE__ */ createAudioSource(metadata, {
|
|
6
|
+
"targetLufs": -23,
|
|
7
|
+
"base": -289,
|
|
8
|
+
"overrides": [[
|
|
9
|
+
3308,
|
|
10
|
+
-305,
|
|
11
|
+
true
|
|
12
|
+
]],
|
|
13
|
+
"unavailable": []
|
|
14
|
+
});
|
|
15
|
+
//#endregion
|
|
16
|
+
export { maleki as default, maleki };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { r as createAudioSource } from "../../playback-BK0IJjxS.mjs";
|
|
2
|
+
import { t as metadata } from "../../minshawy-mujawwad-CF0_Aws9.mjs";
|
|
3
|
+
//#endregion
|
|
4
|
+
//#region src/targets/-23/minshawy-mujawwad.ts
|
|
5
|
+
const minshawyMujawwad = /* @__PURE__ */ createAudioSource(metadata, {
|
|
6
|
+
"targetLufs": -23,
|
|
7
|
+
"base": -966,
|
|
8
|
+
"overrides": [],
|
|
9
|
+
"unavailable": []
|
|
10
|
+
});
|
|
11
|
+
//#endregion
|
|
12
|
+
export { minshawyMujawwad as default, minshawyMujawwad };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { r as createAudioSource } from "../../playback-BK0IJjxS.mjs";
|
|
2
|
+
import { t as metadata } from "../../minshawy-murattal-DWTJ7Vbi.mjs";
|
|
3
|
+
//#endregion
|
|
4
|
+
//#region src/targets/-23/minshawy-murattal.ts
|
|
5
|
+
const minshawyMurattal = /* @__PURE__ */ createAudioSource(metadata, {
|
|
6
|
+
"targetLufs": -23,
|
|
7
|
+
"base": -887,
|
|
8
|
+
"overrides": [],
|
|
9
|
+
"unavailable": []
|
|
10
|
+
});
|
|
11
|
+
//#endregion
|
|
12
|
+
export { minshawyMurattal as default, minshawyMurattal };
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { r as createAudioSource } from "../../playback-BK0IJjxS.mjs";
|
|
2
|
+
import { t as metadata } from "../../motaz-BPiSDPjo.mjs";
|
|
3
|
+
//#endregion
|
|
4
|
+
//#region src/targets/-23/motaz.ts
|
|
5
|
+
const motaz = /* @__PURE__ */ createAudioSource(metadata, {
|
|
6
|
+
"targetLufs": -23,
|
|
7
|
+
"base": -34,
|
|
8
|
+
"overrides": [[
|
|
9
|
+
475,
|
|
10
|
+
-35,
|
|
11
|
+
true
|
|
12
|
+
]],
|
|
13
|
+
"unavailable": []
|
|
14
|
+
});
|
|
15
|
+
//#endregion
|
|
16
|
+
export { motaz as default, motaz };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { r as createAudioSource } from "../../playback-BK0IJjxS.mjs";
|
|
2
|
+
import { t as metadata } from "../../parhizgar-DI28CJpf.mjs";
|
|
3
|
+
//#endregion
|
|
4
|
+
//#region src/targets/-23/parhizgar.ts
|
|
5
|
+
const parhizgar = /* @__PURE__ */ createAudioSource(metadata, {
|
|
6
|
+
"targetLufs": -23,
|
|
7
|
+
"base": -1054,
|
|
8
|
+
"overrides": [],
|
|
9
|
+
"unavailable": []
|
|
10
|
+
});
|
|
11
|
+
//#endregion
|
|
12
|
+
export { parhizgar as default, parhizgar };
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
//#region src/types.d.ts
|
|
2
|
+
type AudioSourceId = 'parhizgar' | 'ghamadi' | 'husary' | 'minshawy-murattal' | 'minshawy-mujawwad' | 'motaz' | 'abdulbasit' | 'almuiqly' | 'jafarpour' | 'ansarian' | 'maleki' | 'makarem-kabiri' | 'fooladvand-hedayatfar';
|
|
3
|
+
type AudioLoudnessTarget = -23 | -20 | -18 | -16;
|
|
4
|
+
/** Zero-based Quran ayah index (0..6235), shared with text arrays and Ayah.index. */
|
|
5
|
+
type AyahIndex = number;
|
|
6
|
+
type AudioUnavailableReason = 'invalid-audio' | 'unmeasurable' | 'unprocessed' | 'missing-audio' | 'download-error' | 'peak-limit-unreachable';
|
|
7
|
+
interface AudioSource {
|
|
8
|
+
readonly id: AudioSourceId;
|
|
9
|
+
readonly nameFa: string;
|
|
10
|
+
readonly kind: 'recitation' | 'mujawwad' | 'translation';
|
|
11
|
+
readonly urlTemplate: string;
|
|
12
|
+
readonly baselinePlaybackLufs: number | null;
|
|
13
|
+
/** Ordered reference audio hashes/statuses digest; not an individual file hash. */
|
|
14
|
+
readonly contentRevision: string;
|
|
15
|
+
readonly measuredFiles: number;
|
|
16
|
+
readonly inventoryComplete: boolean;
|
|
17
|
+
/** Accepted reference revisions awaiting verification at their canonical URLs. */
|
|
18
|
+
readonly pendingPublicationFiles?: number;
|
|
19
|
+
}
|
|
20
|
+
interface AudioGainPolicyInfo {
|
|
21
|
+
readonly targetLufs: AudioLoudnessTarget;
|
|
22
|
+
readonly truePeakCeilingDbtp: number;
|
|
23
|
+
readonly truePeakMarginDb: number;
|
|
24
|
+
readonly maximumBoostDb: number;
|
|
25
|
+
readonly maximumCutDb: number;
|
|
26
|
+
readonly quantizationDb: number;
|
|
27
|
+
readonly inferredCorrectionsApplied: false;
|
|
28
|
+
}
|
|
29
|
+
interface AudioRecommendationDetails {
|
|
30
|
+
readonly sourceId: AudioSourceId;
|
|
31
|
+
readonly ayahIndex: AyahIndex;
|
|
32
|
+
readonly targetLufs: AudioLoudnessTarget;
|
|
33
|
+
readonly snapshotId: string;
|
|
34
|
+
readonly contentRevision: string;
|
|
35
|
+
/** Reference lookup does not verify audio bytes; see /verify. */
|
|
36
|
+
readonly contentVerified: false;
|
|
37
|
+
readonly baseGainDb: number | null;
|
|
38
|
+
readonly peakLimited: boolean;
|
|
39
|
+
readonly provisional: boolean;
|
|
40
|
+
}
|
|
41
|
+
/** Status narrows both gains to numbers or null in TypeScript. */
|
|
42
|
+
type AudioRecommendation = AudioRecommendationDetails & ({
|
|
43
|
+
readonly status: 'ready';
|
|
44
|
+
readonly reason: null;
|
|
45
|
+
readonly gainDb: number;
|
|
46
|
+
readonly gainLinear: number;
|
|
47
|
+
} | {
|
|
48
|
+
readonly status: 'unavailable';
|
|
49
|
+
readonly reason: AudioUnavailableReason;
|
|
50
|
+
readonly gainDb: null;
|
|
51
|
+
readonly gainLinear: null;
|
|
52
|
+
});
|
|
53
|
+
interface AudioSourceProfile<Id extends AudioSourceId = AudioSourceId> {
|
|
54
|
+
readonly id: Id;
|
|
55
|
+
readonly metadata: AudioSource;
|
|
56
|
+
readonly targetLufs: AudioLoudnessTarget;
|
|
57
|
+
readonly snapshotId: string;
|
|
58
|
+
readonly policy: AudioGainPolicyInfo;
|
|
59
|
+
getGain(ayahIndex: AyahIndex): number | null;
|
|
60
|
+
getGainDb(ayahIndex: AyahIndex): number | null;
|
|
61
|
+
getRecommendation(ayahIndex: AyahIndex): AudioRecommendation;
|
|
62
|
+
}
|
|
63
|
+
interface AudioNormalizer<Id extends AudioSourceId = AudioSourceId> {
|
|
64
|
+
readonly targetLufs: AudioLoudnessTarget;
|
|
65
|
+
readonly snapshotId: string;
|
|
66
|
+
getGain(source: Id, ayahIndex: AyahIndex): number | null;
|
|
67
|
+
getGainDb(source: Id, ayahIndex: AyahIndex): number | null;
|
|
68
|
+
getRecommendation(source: Id, ayahIndex: AyahIndex): AudioRecommendation;
|
|
69
|
+
}
|
|
70
|
+
interface AudioContentManifest {
|
|
71
|
+
readonly sourceId: AudioSourceId;
|
|
72
|
+
readonly contentRevision: string;
|
|
73
|
+
getHash(ayahIndex: AyahIndex): string | null;
|
|
74
|
+
}
|
|
75
|
+
//#endregion
|
|
76
|
+
export { AudioRecommendation as a, AudioSourceProfile as c, AudioNormalizer as i, AudioUnavailableReason as l, AudioGainPolicyInfo as n, AudioSource as o, AudioLoudnessTarget as r, AudioSourceId as s, AudioContentManifest as t, AyahIndex as u };
|
package/dist/url.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { c as AudioSourceProfile, o as AudioSource, u as AyahIndex } from "./types-BiTocnkC.js";
|
|
2
|
+
//#region src/url.d.ts
|
|
3
|
+
/** Build a canonical URL without downloading or verifying its content. */
|
|
4
|
+
export declare function getAudioUrl(source: AudioSource | AudioSourceProfile, ayahIndex: AyahIndex): string;
|
|
5
|
+
//#endregion
|
package/dist/url.mjs
ADDED
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { t as assertAyahIndex } from "./ayah-index-p8ffdA40.mjs";
|
|
2
|
+
//#region src/generated/addressing.ts
|
|
3
|
+
const surahLengths = [
|
|
4
|
+
7,
|
|
5
|
+
286,
|
|
6
|
+
200,
|
|
7
|
+
176,
|
|
8
|
+
120,
|
|
9
|
+
165,
|
|
10
|
+
206,
|
|
11
|
+
75,
|
|
12
|
+
129,
|
|
13
|
+
109,
|
|
14
|
+
123,
|
|
15
|
+
111,
|
|
16
|
+
43,
|
|
17
|
+
52,
|
|
18
|
+
99,
|
|
19
|
+
128,
|
|
20
|
+
111,
|
|
21
|
+
110,
|
|
22
|
+
98,
|
|
23
|
+
135,
|
|
24
|
+
112,
|
|
25
|
+
78,
|
|
26
|
+
118,
|
|
27
|
+
64,
|
|
28
|
+
77,
|
|
29
|
+
227,
|
|
30
|
+
93,
|
|
31
|
+
88,
|
|
32
|
+
69,
|
|
33
|
+
60,
|
|
34
|
+
34,
|
|
35
|
+
30,
|
|
36
|
+
73,
|
|
37
|
+
54,
|
|
38
|
+
45,
|
|
39
|
+
83,
|
|
40
|
+
182,
|
|
41
|
+
88,
|
|
42
|
+
75,
|
|
43
|
+
85,
|
|
44
|
+
54,
|
|
45
|
+
53,
|
|
46
|
+
89,
|
|
47
|
+
59,
|
|
48
|
+
37,
|
|
49
|
+
35,
|
|
50
|
+
38,
|
|
51
|
+
29,
|
|
52
|
+
18,
|
|
53
|
+
45,
|
|
54
|
+
60,
|
|
55
|
+
49,
|
|
56
|
+
62,
|
|
57
|
+
55,
|
|
58
|
+
78,
|
|
59
|
+
96,
|
|
60
|
+
29,
|
|
61
|
+
22,
|
|
62
|
+
24,
|
|
63
|
+
13,
|
|
64
|
+
14,
|
|
65
|
+
11,
|
|
66
|
+
11,
|
|
67
|
+
18,
|
|
68
|
+
12,
|
|
69
|
+
12,
|
|
70
|
+
30,
|
|
71
|
+
52,
|
|
72
|
+
52,
|
|
73
|
+
44,
|
|
74
|
+
28,
|
|
75
|
+
28,
|
|
76
|
+
20,
|
|
77
|
+
56,
|
|
78
|
+
40,
|
|
79
|
+
31,
|
|
80
|
+
50,
|
|
81
|
+
40,
|
|
82
|
+
46,
|
|
83
|
+
42,
|
|
84
|
+
29,
|
|
85
|
+
19,
|
|
86
|
+
36,
|
|
87
|
+
25,
|
|
88
|
+
22,
|
|
89
|
+
17,
|
|
90
|
+
19,
|
|
91
|
+
26,
|
|
92
|
+
30,
|
|
93
|
+
20,
|
|
94
|
+
15,
|
|
95
|
+
21,
|
|
96
|
+
11,
|
|
97
|
+
8,
|
|
98
|
+
8,
|
|
99
|
+
19,
|
|
100
|
+
5,
|
|
101
|
+
8,
|
|
102
|
+
8,
|
|
103
|
+
11,
|
|
104
|
+
11,
|
|
105
|
+
8,
|
|
106
|
+
3,
|
|
107
|
+
9,
|
|
108
|
+
5,
|
|
109
|
+
4,
|
|
110
|
+
7,
|
|
111
|
+
3,
|
|
112
|
+
6,
|
|
113
|
+
3,
|
|
114
|
+
5,
|
|
115
|
+
4,
|
|
116
|
+
5,
|
|
117
|
+
6
|
|
118
|
+
];
|
|
119
|
+
//#endregion
|
|
120
|
+
//#region src/url.ts
|
|
121
|
+
/** Optional URL addressing. This module is never imported by gain profiles. */
|
|
122
|
+
/** Build a canonical URL without downloading or verifying its content. */
|
|
123
|
+
function getAudioUrl(source, ayahIndex) {
|
|
124
|
+
assertAyahIndex(ayahIndex);
|
|
125
|
+
let surahIndex = 0;
|
|
126
|
+
let localIndex = ayahIndex;
|
|
127
|
+
while (localIndex >= surahLengths[surahIndex]) {
|
|
128
|
+
localIndex -= surahLengths[surahIndex];
|
|
129
|
+
surahIndex++;
|
|
130
|
+
}
|
|
131
|
+
const fileStem = `${String(surahIndex + 1).padStart(3, "0")}${String(localIndex + 1).padStart(3, "0")}`;
|
|
132
|
+
return ("metadata" in source ? source.metadata : source).urlTemplate.replace("{file_stem}", fileStem);
|
|
133
|
+
}
|
|
134
|
+
//#endregion
|
|
135
|
+
export { getAudioUrl };
|
package/dist/verify.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { c as AudioSourceProfile, s as AudioSourceId, t as AudioContentManifest, u as AyahIndex } from "./types-BiTocnkC.js";
|
|
2
|
+
//#region src/verify.d.ts
|
|
3
|
+
export declare function createAudioContentManifest(sourceId: AudioSourceId, contentRevision: string, hashes: string): AudioContentManifest;
|
|
4
|
+
export declare function verifyAudioContent(manifest: AudioContentManifest, ayahIndex: AyahIndex, actualSha256: string): boolean;
|
|
5
|
+
/** Mismatched source revisions, changed bytes, and unavailable gains return null. */
|
|
6
|
+
export declare function getVerifiedAudioGain(source: AudioSourceProfile, manifest: AudioContentManifest, ayahIndex: AyahIndex, actualSha256: string): number | null;
|
|
7
|
+
//#endregion
|
package/dist/verify.mjs
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { t as assertAyahIndex } from "./ayah-index-p8ffdA40.mjs";
|
|
2
|
+
//#region src/verify.ts
|
|
3
|
+
/** Optional, data-free verification helpers. The caller supplies the actual file hash. */
|
|
4
|
+
function createAudioContentManifest(sourceId, contentRevision, hashes) {
|
|
5
|
+
if (hashes.length !== 399104 || !/^[0-9a-f]+$/.test(hashes)) throw new TypeError("Invalid original-file SHA-256 manifest");
|
|
6
|
+
return Object.freeze({
|
|
7
|
+
sourceId,
|
|
8
|
+
contentRevision,
|
|
9
|
+
getHash(ayahIndex) {
|
|
10
|
+
assertAyahIndex(ayahIndex);
|
|
11
|
+
const hash = hashes.slice(ayahIndex * 64, (ayahIndex + 1) * 64);
|
|
12
|
+
return hash === "0".repeat(64) ? null : hash;
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
function verifyAudioContent(manifest, ayahIndex, actualSha256) {
|
|
17
|
+
if (!/^[0-9a-f]{64}$/.test(actualSha256)) throw new TypeError("Expected lowercase original-file SHA-256");
|
|
18
|
+
return manifest.getHash(ayahIndex) === actualSha256;
|
|
19
|
+
}
|
|
20
|
+
/** Mismatched source revisions, changed bytes, and unavailable gains return null. */
|
|
21
|
+
function getVerifiedAudioGain(source, manifest, ayahIndex, actualSha256) {
|
|
22
|
+
if (source.id !== manifest.sourceId || source.metadata.contentRevision !== manifest.contentRevision) return null;
|
|
23
|
+
return verifyAudioContent(manifest, ayahIndex, actualSha256) ? source.getGain(ayahIndex) : null;
|
|
24
|
+
}
|
|
25
|
+
//#endregion
|
|
26
|
+
export { createAudioContentManifest, getVerifiedAudioGain, verifyAudioContent };
|
package/package.json
CHANGED
|
@@ -1,6 +1,64 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ghoran/audio",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "Tree-shakable Quran audio gain profiles, per-file peak protection and optional content verification",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.mjs",
|
|
7
|
+
"module": "dist/index.mjs",
|
|
8
|
+
"types": "dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"import": "./dist/index.mjs"
|
|
13
|
+
},
|
|
14
|
+
"./catalog": {
|
|
15
|
+
"types": "./dist/catalog.d.ts",
|
|
16
|
+
"import": "./dist/catalog.mjs"
|
|
17
|
+
},
|
|
18
|
+
"./load": {
|
|
19
|
+
"types": "./dist/load.d.ts",
|
|
20
|
+
"import": "./dist/load.mjs"
|
|
21
|
+
},
|
|
22
|
+
"./verify": {
|
|
23
|
+
"types": "./dist/verify.d.ts",
|
|
24
|
+
"import": "./dist/verify.mjs"
|
|
25
|
+
},
|
|
26
|
+
"./sources/*": {
|
|
27
|
+
"types": "./dist/sources/*.d.ts",
|
|
28
|
+
"import": "./dist/sources/*.mjs"
|
|
29
|
+
},
|
|
30
|
+
"./targets/*": {
|
|
31
|
+
"types": "./dist/targets/*.d.ts",
|
|
32
|
+
"import": "./dist/targets/*.mjs"
|
|
33
|
+
},
|
|
34
|
+
"./hashes/*": {
|
|
35
|
+
"types": "./dist/hashes/*.d.ts",
|
|
36
|
+
"import": "./dist/hashes/*.mjs"
|
|
37
|
+
},
|
|
38
|
+
"./url": {
|
|
39
|
+
"types": "./dist/url.d.ts",
|
|
40
|
+
"import": "./dist/url.mjs"
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
"sideEffects": false,
|
|
44
|
+
"files": [
|
|
45
|
+
"dist/**/*",
|
|
46
|
+
"README.md"
|
|
47
|
+
],
|
|
48
|
+
"repository": {
|
|
49
|
+
"type": "git",
|
|
50
|
+
"url": "git+https://github.com/sabereen/ghoran.git",
|
|
51
|
+
"directory": "packages/audio"
|
|
52
|
+
},
|
|
53
|
+
"license": "MIT",
|
|
54
|
+
"publishConfig": {
|
|
55
|
+
"access": "public",
|
|
56
|
+
"registry": "https://registry.npmjs.org/"
|
|
57
|
+
},
|
|
58
|
+
"scripts": {
|
|
59
|
+
"build": "node scripts/generate-runtime.mjs && tsdown",
|
|
60
|
+
"generate:runtime": "node scripts/generate-runtime.mjs",
|
|
61
|
+
"check:runtime": "node scripts/generate-runtime.mjs --check",
|
|
62
|
+
"import:analysis": "node scripts/import-analysis.mjs"
|
|
63
|
+
}
|
|
6
64
|
}
|