@jjlmoya/utils-forensic-science 1.12.0 → 1.14.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/package.json +2 -1
- package/src/category/index.ts +63 -59
- package/src/category/seo.astro +1 -1
- package/src/components/PreviewNavSidebar.astro +1 -1
- package/src/components/PreviewToolbar.astro +1 -1
- package/src/data.ts +1 -1
- package/src/entries.ts +74 -68
- package/src/env.d.ts +1 -1
- package/src/index.ts +33 -31
- package/src/pages/[locale]/[slug].astro +161 -159
- package/src/pages/[locale].astro +8 -5
- package/src/pages/index.astro +1 -1
- package/src/tests/bibliography_wellformed_export.test.ts +46 -0
- package/src/tests/diacritics_density.test.ts +1 -1
- package/src/tests/faq_count.test.ts +19 -19
- package/src/tests/i18n_coverage.test.ts +36 -36
- package/src/tests/inverted_punctuation.test.ts +1 -1
- package/src/tests/locale_completeness.test.ts +2 -2
- package/src/tests/mocks/astro_mock.js +1 -1
- package/src/tests/no_h1_in_components.test.ts +1 -1
- package/src/tests/script_density.test.ts +94 -94
- package/src/tests/seo_length.test.ts +46 -46
- package/src/tests/seo_parity.test.ts +2 -7
- package/src/tests/seo_translation_completeness.test.ts +68 -0
- package/src/tests/seo_wellformed_export.test.ts +65 -0
- package/src/tests/tool_validation.test.ts +2 -2
- package/src/tests/translation_copy.test.ts +23 -24
- package/src/tool/bloodstain-pattern-origin-analyzer/component.astro +9 -9
- package/src/tool/bloodstain-pattern-origin-analyzer/i18n/zh.ts +1 -1
- package/src/tool/dna-profile-match-probability-lab/bibliography.astro +14 -0
- package/src/tool/dna-profile-match-probability-lab/bibliography.ts +16 -0
- package/src/tool/dna-profile-match-probability-lab/component.astro +121 -0
- package/src/tool/dna-profile-match-probability-lab/controller.ts +159 -0
- package/src/tool/dna-profile-match-probability-lab/dna-profile-match-probability-lab.css +485 -0
- package/src/tool/dna-profile-match-probability-lab/dom-views.ts +93 -0
- package/src/tool/dna-profile-match-probability-lab/entry.ts +29 -0
- package/src/tool/dna-profile-match-probability-lab/evaluator.ts +19 -0
- package/src/tool/dna-profile-match-probability-lab/i18n/de.ts +43 -0
- package/src/tool/dna-profile-match-probability-lab/i18n/en.ts +196 -0
- package/src/tool/dna-profile-match-probability-lab/i18n/es.ts +40 -0
- package/src/tool/dna-profile-match-probability-lab/i18n/fr.ts +10 -0
- package/src/tool/dna-profile-match-probability-lab/i18n/id.ts +41 -0
- package/src/tool/dna-profile-match-probability-lab/i18n/it.ts +10 -0
- package/src/tool/dna-profile-match-probability-lab/i18n/ja.ts +40 -0
- package/src/tool/dna-profile-match-probability-lab/i18n/ko.ts +40 -0
- package/src/tool/dna-profile-match-probability-lab/i18n/nl.ts +29 -0
- package/src/tool/dna-profile-match-probability-lab/i18n/pl.ts +10 -0
- package/src/tool/dna-profile-match-probability-lab/i18n/pt.ts +41 -0
- package/src/tool/dna-profile-match-probability-lab/i18n/ru.ts +29 -0
- package/src/tool/dna-profile-match-probability-lab/i18n/sv.ts +41 -0
- package/src/tool/dna-profile-match-probability-lab/i18n/tr.ts +10 -0
- package/src/tool/dna-profile-match-probability-lab/i18n/zh.ts +29 -0
- package/src/tool/dna-profile-match-probability-lab/index.ts +11 -0
- package/src/tool/dna-profile-match-probability-lab/localize.ts +107 -0
- package/src/tool/dna-profile-match-probability-lab/logic.test.ts +56 -0
- package/src/tool/dna-profile-match-probability-lab/logic.ts +139 -0
- package/src/tool/dna-profile-match-probability-lab/seo.astro +15 -0
- package/src/tool/dna-profile-match-probability-lab/storage.ts +26 -0
- package/src/tool/dna-profile-match-probability-lab/ui.ts +3 -0
- package/src/tool/fire-pattern-origin-analyzer/component.astro +1 -1
- package/src/tool/fire-pattern-origin-analyzer/i18n/zh.ts +5 -1
- package/src/tool/fire-pattern-origin-analyzer/logic.ts +9 -2
- package/src/tool/fire-pattern-origin-analyzer/view-bindings.ts +8 -4
- package/src/tool/fire-pattern-origin-analyzer/view-model.ts +6 -2
- package/src/tool/forensic-age-estimator/bibliography.astro +1 -1
- package/src/tool/forensic-age-estimator/component.astro +1 -1
- package/src/tool/forensic-age-estimator/entry.ts +17 -17
- package/src/tool/forensic-age-estimator/i18n/de.ts +244 -244
- package/src/tool/forensic-age-estimator/i18n/en.ts +244 -244
- package/src/tool/forensic-age-estimator/i18n/es.ts +244 -244
- package/src/tool/forensic-age-estimator/i18n/fr.ts +244 -244
- package/src/tool/forensic-age-estimator/i18n/id.ts +244 -244
- package/src/tool/forensic-age-estimator/i18n/it.ts +244 -244
- package/src/tool/forensic-age-estimator/i18n/nl.ts +244 -244
- package/src/tool/forensic-age-estimator/i18n/pl.ts +244 -244
- package/src/tool/forensic-age-estimator/i18n/pt.ts +244 -244
- package/src/tool/forensic-age-estimator/i18n/ru.ts +244 -244
- package/src/tool/forensic-age-estimator/i18n/sv.ts +244 -244
- package/src/tool/forensic-age-estimator/i18n/tr.ts +244 -244
- package/src/tool/forensic-age-estimator/i18n/zh.ts +245 -245
- package/src/tool/forensic-age-estimator/index.ts +1 -1
- package/src/tool/forensic-age-estimator/seo.astro +1 -1
- package/src/tool/forensic-blood-test-simulator/component.astro +1 -1
- package/src/tool/forensic-fiber-comparison-microscope/component.astro +1 -1
- package/src/tool/forensic-fiber-comparison-microscope/render.ts +1 -1
- package/src/tool/forensic-fiber-comparison-microscope/view.ts +1 -1
- package/src/tool/forensic-fingerprint-minutiae-identifier/component.astro +2 -2
- package/src/tool/forensic-fingerprint-minutiae-identifier/i18n/ja.ts +2 -1
- package/src/tool/forensic-fingerprint-minutiae-identifier/i18n/zh.ts +2 -0
- package/src/tool/forensic-fingerprint-minutiae-identifier/renderer.ts +9 -8
- package/src/tool/forensic-glass-becke-line-simulator/component.astro +1 -1
- package/src/tool/forensic-glass-becke-line-simulator/view.ts +8 -6
- package/src/tool/forensic-image-authenticity-analyzer/component.astro +1 -1
- package/src/tool/forensic-image-authenticity-analyzer/i18n/de.ts +105 -105
- package/src/tool/forensic-image-authenticity-analyzer/i18n/en.ts +105 -105
- package/src/tool/forensic-image-authenticity-analyzer/i18n/es.ts +105 -105
- package/src/tool/forensic-image-authenticity-analyzer/i18n/fr.ts +105 -105
- package/src/tool/forensic-image-authenticity-analyzer/i18n/id.ts +95 -90
- package/src/tool/forensic-image-authenticity-analyzer/i18n/it.ts +105 -105
- package/src/tool/forensic-image-authenticity-analyzer/i18n/ja.ts +7 -2
- package/src/tool/forensic-image-authenticity-analyzer/i18n/ko.ts +4 -1
- package/src/tool/forensic-image-authenticity-analyzer/i18n/nl.ts +95 -92
- package/src/tool/forensic-image-authenticity-analyzer/i18n/pl.ts +95 -92
- package/src/tool/forensic-image-authenticity-analyzer/i18n/pt.ts +105 -105
- package/src/tool/forensic-image-authenticity-analyzer/i18n/ru.ts +97 -92
- package/src/tool/forensic-image-authenticity-analyzer/i18n/sv.ts +97 -93
- package/src/tool/forensic-image-authenticity-analyzer/i18n/tr.ts +98 -93
- package/src/tool/forensic-image-authenticity-analyzer/i18n/zh.ts +11 -0
- package/src/tool/forensic-microcrystal-drug-simulator/component.astro +1 -1
- package/src/tool/forensic-sex-determinator/component.astro +3 -2
- package/src/tool/forensic-stature-estimator/component.astro +1 -1
- package/src/tool/forensic-stature-estimator/i18n/id.ts +4 -0
- package/src/tool/forensic-stature-estimator/i18n/nl.ts +4 -0
- package/src/tool/forensic-stature-estimator/i18n/ru.ts +4 -0
- package/src/tool/forensic-tlc-ink-simulator/component.astro +1 -1
- package/src/tool/forensic-tlc-ink-simulator/i18n/zh.ts +1 -0
- package/src/tool/forensic-toolmark-striation-matcher/component.astro +1 -1
- package/src/tool/forensic-toolmark-striation-matcher/logic.ts +1 -1
- package/src/tool/forensic-toolmark-striation-matcher/renderer.ts +7 -6
- package/src/tool/forensic-toolmark-striation-matcher/view.ts +19 -20
- package/src/tool/gsr-dispersion-calculator/component.astro +1 -1
- package/src/tool/gsr-dispersion-calculator/logic.ts +1 -1
- package/src/tool/time-of-death-algor-mortis-calculator/entry.ts +2 -0
- package/src/tool/voice-spectrogram-analyzer/audio-runtime.ts +75 -0
- package/src/tool/voice-spectrogram-analyzer/bibliography.astro +14 -0
- package/src/tool/voice-spectrogram-analyzer/bibliography.ts +16 -0
- package/src/tool/voice-spectrogram-analyzer/component.astro +116 -0
- package/src/tool/voice-spectrogram-analyzer/controller.ts +219 -0
- package/src/tool/voice-spectrogram-analyzer/dom-views.ts +204 -0
- package/src/tool/voice-spectrogram-analyzer/entry.ts +31 -0
- package/src/tool/voice-spectrogram-analyzer/evaluator.ts +13 -0
- package/src/tool/voice-spectrogram-analyzer/fft.ts +64 -0
- package/src/tool/voice-spectrogram-analyzer/i18n/de.ts +135 -0
- package/src/tool/voice-spectrogram-analyzer/i18n/en.ts +122 -0
- package/src/tool/voice-spectrogram-analyzer/i18n/es.ts +122 -0
- package/src/tool/voice-spectrogram-analyzer/i18n/fr.ts +135 -0
- package/src/tool/voice-spectrogram-analyzer/i18n/id.ts +136 -0
- package/src/tool/voice-spectrogram-analyzer/i18n/it.ts +135 -0
- package/src/tool/voice-spectrogram-analyzer/i18n/ja.ts +135 -0
- package/src/tool/voice-spectrogram-analyzer/i18n/ko.ts +135 -0
- package/src/tool/voice-spectrogram-analyzer/i18n/nl.ts +136 -0
- package/src/tool/voice-spectrogram-analyzer/i18n/pl.ts +136 -0
- package/src/tool/voice-spectrogram-analyzer/i18n/pt.ts +135 -0
- package/src/tool/voice-spectrogram-analyzer/i18n/ru.ts +136 -0
- package/src/tool/voice-spectrogram-analyzer/i18n/sv.ts +136 -0
- package/src/tool/voice-spectrogram-analyzer/i18n/tr.ts +136 -0
- package/src/tool/voice-spectrogram-analyzer/i18n/zh.ts +135 -0
- package/src/tool/voice-spectrogram-analyzer/index.ts +11 -0
- package/src/tool/voice-spectrogram-analyzer/logic.test.ts +46 -0
- package/src/tool/voice-spectrogram-analyzer/logic.ts +163 -0
- package/src/tool/voice-spectrogram-analyzer/seo.astro +15 -0
- package/src/tool/voice-spectrogram-analyzer/storage.ts +33 -0
- package/src/tool/voice-spectrogram-analyzer/ui.ts +49 -0
- package/src/tool/voice-spectrogram-analyzer/voice-spectrogram-analyzer.css +547 -0
- package/src/tool/widmark-alcohol-simulator/component.astro +1 -1
- package/src/tool/widmark-alcohol-simulator/i18n/de.ts +5 -0
- package/src/tool/widmark-alcohol-simulator/i18n/fr.ts +2 -1
- package/src/tool/widmark-alcohol-simulator/i18n/id.ts +1 -0
- package/src/tool/widmark-alcohol-simulator/i18n/it.ts +4 -1
- package/src/tool/widmark-alcohol-simulator/i18n/ja.ts +4 -1
- package/src/tool/widmark-alcohol-simulator/i18n/nl.ts +5 -1
- package/src/tool/widmark-alcohol-simulator/i18n/pl.ts +5 -1
- package/src/tool/widmark-alcohol-simulator/i18n/pt.ts +5 -1
- package/src/tool/widmark-alcohol-simulator/i18n/ru.ts +4 -1
- package/src/tool/widmark-alcohol-simulator/i18n/sv.ts +5 -1
- package/src/tool/widmark-alcohol-simulator/i18n/tr.ts +4 -1
- package/src/tool/widmark-alcohol-simulator/i18n/zh.ts +4 -1
- package/src/tools.ts +39 -35
- package/src/types.ts +4 -4
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { bibliography } from '../bibliography';
|
|
2
|
+
import type { VoiceSpectrogramLocaleContent } from '../entry';
|
|
3
|
+
|
|
4
|
+
const slug = "penganalisis-spektrogram-suara-online";
|
|
5
|
+
const title = "Penganalisis Spektrogram Suara Online";
|
|
6
|
+
const description = "Visualisasikan frekuensi, waktu, intensitas, dan estimasi formant dari dua sampel audio secara privat di peramban Anda.";
|
|
7
|
+
|
|
8
|
+
const howTo = [
|
|
9
|
+
{
|
|
10
|
+
"name": "Pilih dua sampel audio",
|
|
11
|
+
"text": "Gunakan file audio lokal atau studi vokal sintetis."
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"name": "Atur batas frekuensi",
|
|
15
|
+
"text": "Pilih 4, 6, atau 8 kHz sesuai jangkauan suara."
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"name": "Baca spektrogram",
|
|
19
|
+
"text": "Amati waktu, frekuensi, dan panduan formant."
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"name": "Dengarkan dan bandingkan",
|
|
23
|
+
"text": "Bandingkan rata-rata F1, F2, dan F3 secara deskriptif."
|
|
24
|
+
}
|
|
25
|
+
];
|
|
26
|
+
|
|
27
|
+
const faq = [
|
|
28
|
+
{
|
|
29
|
+
"question": "Apa yang ditampilkan oleh spektrogram suara?",
|
|
30
|
+
"answer": "Spektrogram memetakan waktu secara horizontal, frekuensi secara vertikal, dan intensitas sinyal melalui kecerahan warna."
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"question": "Apakah rekaman saya diunggah?",
|
|
34
|
+
"answer": "Tidak. Semua proses berjalan secara lokal di perangkat Anda."
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"question": "Apa itu F1, F2, dan F3?",
|
|
38
|
+
"answer": "Merupakan estimasi edukatif dari tiga puncak resonansi utama saluran vokal."
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"question": "Apakah alat ini dapat mengidentifikasi pembicara?",
|
|
42
|
+
"answer": "Tidak. Kemiripan visual tidak mengonfirmasi identitas pembicara."
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"question": "Mengapa estimasi formant berubah dengan batas frekuensi?",
|
|
46
|
+
"answer": "Perubahan skala frekuensi memengaruhi pemisahan puncak spektral."
|
|
47
|
+
}
|
|
48
|
+
];
|
|
49
|
+
|
|
50
|
+
export const content: VoiceSpectrogramLocaleContent = {
|
|
51
|
+
slug,
|
|
52
|
+
title,
|
|
53
|
+
description,
|
|
54
|
+
ui: {
|
|
55
|
+
"privacyBadge": "Hanya lokal",
|
|
56
|
+
"privacyNote": "Rekaman Anda tetap di perangkat ini. Proses dekode dan analisis berjalan di peramban.",
|
|
57
|
+
"loadHeading": "Muat dua suara untuk dianalisis",
|
|
58
|
+
"sampleALabel": "Sampel A",
|
|
59
|
+
"sampleBLabel": "Sampel B",
|
|
60
|
+
"chooseFileLabel": "Pilih audio",
|
|
61
|
+
"replaceFileLabel": "Ganti audio",
|
|
62
|
+
"dropHint": "Tarik file audio ke sini (maksimal 25 MB). 20 detik pertama akan dianalisis.",
|
|
63
|
+
"presetHint": "Mulai langsung dengan dua studi vokal sintetis.",
|
|
64
|
+
"presetWarmLabel": "Studi vokal hangat",
|
|
65
|
+
"presetBrightLabel": "Studi vokal cerah",
|
|
66
|
+
"emptySampleLabel": "Menunggu audio",
|
|
67
|
+
"readySampleLabel": "Plat spektral siap",
|
|
68
|
+
"decodingSampleLabel": "Memproses plat spektral",
|
|
69
|
+
"errorSampleLabel": "Sampel tidak dapat dianalisis",
|
|
70
|
+
"durationLabel": "Durasi",
|
|
71
|
+
"ceilingHeading": "Batas frekuensi atas",
|
|
72
|
+
"ceilingFourLabel": "4 kHz",
|
|
73
|
+
"ceilingSixLabel": "6 kHz",
|
|
74
|
+
"ceilingEightLabel": "8 kHz",
|
|
75
|
+
"stageLabel": "Panggung spektrogram suara cermin",
|
|
76
|
+
"mirrorViewLabel": "Plat cermin",
|
|
77
|
+
"splitViewLabel": "Plat sejajar",
|
|
78
|
+
"playALabel": "Putar sampel A",
|
|
79
|
+
"playBLabel": "Putar sampel B",
|
|
80
|
+
"stopLabel": "Hentikan",
|
|
81
|
+
"timeAxisLabel": "Waktu",
|
|
82
|
+
"frequencyAxisLabel": "Frekuensi",
|
|
83
|
+
"intensityLegendLabel": "Tinta lebih terang menunjukkan energi lebih kuat",
|
|
84
|
+
"formantLegendLabel": "Garis panduan estimasi formant",
|
|
85
|
+
"sampleAEmptyCanvasLabel": "Muat sampel A untuk menampilkan spektrum",
|
|
86
|
+
"sampleBEmptyCanvasLabel": "Muat sampel B untuk menampilkan spektrum",
|
|
87
|
+
"comparisonHeading": "Analisis jejak resonansi",
|
|
88
|
+
"comparisonNote": "Nilai rata-rata puncak spektral. Perbedaan adalah hasil pengukuran, bukan persentase kemiripan atau bukti identitas.",
|
|
89
|
+
"formantOneLabel": "Wilayah resonansi pertama (F1)",
|
|
90
|
+
"formantTwoLabel": "Wilayah resonansi kedua (F2)",
|
|
91
|
+
"formantThreeLabel": "Wilayah resonansi ketiga (F3)",
|
|
92
|
+
"averageLabel": "Rata-rata",
|
|
93
|
+
"differenceLabel": "Selisih",
|
|
94
|
+
"unavailableLabel": "Tidak tersedia",
|
|
95
|
+
"statusEmptyLabel": "Muat sampel untuk memulai",
|
|
96
|
+
"statusSingleLabel": "Satu plat siap",
|
|
97
|
+
"statusReadyLabel": "Dua plat spektral siap",
|
|
98
|
+
"limitError": "Ukuran file melebihi batas analisis lokal 25 MB.",
|
|
99
|
+
"decodeError": "Peramban tidak dapat mendekode format audio ini.",
|
|
100
|
+
"browserError": "Web Audio API tidak tersedia di peramban ini.",
|
|
101
|
+
"educationalNote": "Alat visualisasi edukatif. Garis formant tidak boleh digunakan untuk identifikasi pembicara forensik."
|
|
102
|
+
},
|
|
103
|
+
seo: [
|
|
104
|
+
{ type: 'title', text: "Bagaimana spektrogram suara mengubah suara menjadi lanskap visual", level: 2 },
|
|
105
|
+
{ type: 'paragraph', html: "Spektrogram suara mengubah rekaman menjadi peta visual yang sangat jelas dengan waktu pada sumbu horizontal dan frekuensi pada sumbu vertikal. Energi yang lebih kuat muncul sebagai warna yang lebih cerah. Ini membuat vokal yang ditahan, harmonik, keheningan, dan resonansi lebih mudah diamati dibandingkan bentuk gelombang biasa. Visualisasi ini mempermudah analisis sinyal suara secara mendalam dan terstruktur di setiap frekuensi. Hasilnya memungkinkan pemahaman karakter vokal secara ilmiah." },
|
|
106
|
+
{ type: 'paragraph', html: "Penganalisis membagi sinyal menjadi segmen-segmen pendek yang tumpang tindih, menerapkan jendela Hamming, dan menghitung distribusi energi berdasarkan frekuensi menggunakan FFT. Segmen pendek menentukan waktu secara tepat, sedangkan resolusi frekuensi menunjukkan konsentrasi energi. Prinsip ketidakpastian selalu membuat kompromi antara resolusi waktu dan frekuensi. Pengaturan ini menentukan ketajaman tampilan." },
|
|
107
|
+
|
|
108
|
+
{ type: 'diagnostic', variant: 'info', title: "Pemrosesan privat di peramban", html: "Visualisasikan frekuensi, waktu, intensitas, dan estimasi formant dari dua sampel audio secara privat di peramban Anda." },
|
|
109
|
+
{ type: 'stats', columns: 3, items: [
|
|
110
|
+
{ value: "Waktu", label: "Baca dari kiri ke kanan" },
|
|
111
|
+
{ value: "Hz", label: "Posisi frekuensi" },
|
|
112
|
+
{ value: "Energi", label: "Ditampilkan sebagai kecerahan" }
|
|
113
|
+
] },
|
|
114
|
+
{ type: 'title', text: "Membaca formant secara bijak", level: 3 },
|
|
115
|
+
{ type: 'paragraph', html: "Formant adalah wilayah resonansi yang dibentuk oleh saluran vokal. F1 dan F2 digunakan dalam fonetik untuk menjelaskan tinggi vokal dan tempat artikulasi secara mendalam. Penganalisis ini melacak puncak halus di tiga wilayah frekuensi agar pengguna dapat menghubungkan pita yang terlihat dengan perilaku F1, F2, dan F3 secara lebih intuitif dan akurat." },
|
|
116
|
+
{ type: 'paragraph', html: "Pengukuran formant profesional umumnya menggunakan Linear Predictive Coding yang disesuaikan dengan pembicara. Harmonik nada dasar, desah, gema ruangan, dan kompresi dapat menggeser perkiraan sederhana. Gunakan garis panduan ini sebagai referensi edukatif dan selalu periksa spektrum visual di belakangnya." },
|
|
117
|
+
{ type: 'table', headers: ['Guide', 'Region', 'Meaning'], rows: [["F1","180 hingga 1000 Hz","Wilayah resonansi pertama, berkaitan dengan bukaan vokal"],["F2","900 hingga 3000 Hz","Wilayah resonansi kedua, berkaitan dengan posisi lidah"],["F3","2000 hingga 4500 Hz","Wilayah resonansi atas, dipengaruhi oleh saluran vokal"]] },
|
|
118
|
+
{ type: 'title', text: "Pengaruh pengaturan frekuensi pada analisis", level: 3 },
|
|
119
|
+
{ type: 'comparative', columns: 2, items: [
|
|
120
|
+
{ title: "Batas bawah (4 kHz)", description: "Tampilan frekuensi rendah lebih baik", points: ["Berguna untuk vokal", "Dapat mengabaikan energi tinggi", "Tidak menjamin akurasi tinggi"] },
|
|
121
|
+
{ title: "Batas atas (6/8 kHz)", description: "Lebih banyak detail atas", highlight: true, points: ["Untuk suara cerah", "Menampilkan gesekan", "Mengecilkan pita bawah"] }
|
|
122
|
+
] },
|
|
123
|
+
{ type: 'title', text: "Perbandingan dua sampel audio secara bertanggung jawab", level: 3 },
|
|
124
|
+
{ type: 'paragraph', html: "Perbandingan dua sampel paling berguna ketika kedua rekaman berisi vokal atau kalimat yang sama dalam kondisi akustik yang serupa. Perbedaan yang ditampilkan adalah jarak fisik mutlak antara puncak frekuensi. Perbedaan tersebut bukan persentase kemiripan atau bukti identitas biologis." },
|
|
125
|
+
{ type: 'list', items: ["<strong>Gunakan konten yang sama:</strong> vokal atau kata yang sama lebih mudah dibandingkan.","<strong>Samakan kondisi rekaman:</strong> mikrofon dan akustik ruangan sangat memengaruhi spektrum.","<strong>Dengarkan dengan kursor:</strong> hubungkan peristiwa visual dengan waktu suara yang tepat.","<strong>Hindari klaim identitas:</strong> spektrogram yang mirip tidak membuktikan identitas pembicara."] },
|
|
126
|
+
{ type: 'summary', title: "Ringkasan penganalisis", items: ["Hasilkan spektrogram audio secara lokal dari file yang kompatibel.","Jelajahi dua sampel dalam plat cermin atau sejajar.","Pelajari bagaimana energi spektral dan wilayah formant berubah.","Jaga pendekatan deskriptif dan edukatif."] }
|
|
127
|
+
],
|
|
128
|
+
faq,
|
|
129
|
+
bibliography,
|
|
130
|
+
howTo,
|
|
131
|
+
schemas: [
|
|
132
|
+
{ '@context': 'https://schema.org', '@type': 'SoftwareApplication', name: title, description, applicationCategory: 'MultimediaApplication', operatingSystem: 'Any' },
|
|
133
|
+
{ '@context': 'https://schema.org', '@type': 'FAQPage', mainEntity: faq.map((item) => ({ '@type': 'Question', name: item.question, acceptedAnswer: { '@type': 'Answer', text: item.answer } })) },
|
|
134
|
+
{ '@context': 'https://schema.org', '@type': 'HowTo', name: title, step: howTo.map((step) => ({ '@type': 'HowToStep', name: step.name, text: step.text })) }
|
|
135
|
+
]
|
|
136
|
+
};
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { bibliography } from '../bibliography';
|
|
2
|
+
import type { VoiceSpectrogramLocaleContent } from '../entry';
|
|
3
|
+
|
|
4
|
+
const slug = "analizzatore-spettrogramma-voce-online";
|
|
5
|
+
const title = "Analizzatore di Spettrogramma della Voce Online";
|
|
6
|
+
const description = "Visualizza frequenza, tempo, intensità ed stima dei formanti di due campioni audio in modo privato nel tuo browser.";
|
|
7
|
+
|
|
8
|
+
const howTo = [
|
|
9
|
+
{
|
|
10
|
+
"name": "Carica due campioni",
|
|
11
|
+
"text": "Seleziona file audio locali o usa gli studi sintetici."
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"name": "Imposta il limite di frequenza",
|
|
15
|
+
"text": "Scegli 4, 6 o 8 kHz a seconda del tipo di voce."
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"name": "Leggi lo spettrogramma",
|
|
19
|
+
"text": "Analizza tempo, frequenza e guide dei formanti."
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"name": "Ascolta e confronta",
|
|
23
|
+
"text": "Confronta le medie F1, F2 e F3 a scopo educativo."
|
|
24
|
+
}
|
|
25
|
+
];
|
|
26
|
+
|
|
27
|
+
const faq = [
|
|
28
|
+
{
|
|
29
|
+
"question": "Cosa mostra uno spettrogramma vocale?",
|
|
30
|
+
"answer": "Uno spettrogramma mostra il tempo sull asse orizzontale, la frequenza su quello verticale e l intensità tramite la luminosità."
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"question": "Le mie registrazioni vengono caricate su un server?",
|
|
34
|
+
"answer": "No. Tutti i calcoli avvengono in locale nel tuo browser."
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"question": "Cosa rappresentano F1, F2 e F3?",
|
|
38
|
+
"answer": "Sono stime didattiche delle risonanze del tratto vocale."
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"question": "Questo strumento può identificare un parlante?",
|
|
42
|
+
"answer": "No. La somiglianza spettrale non costituisce una prova biometrica."
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"question": "Perché i formanti variano cambiando il limite di frequenza?",
|
|
46
|
+
"answer": "La scala di frequenza modifica la separazione visiva dei picchi."
|
|
47
|
+
}
|
|
48
|
+
];
|
|
49
|
+
|
|
50
|
+
export const content: VoiceSpectrogramLocaleContent = {
|
|
51
|
+
slug,
|
|
52
|
+
title,
|
|
53
|
+
description,
|
|
54
|
+
ui: {
|
|
55
|
+
"privacyBadge": "Solo locale",
|
|
56
|
+
"privacyNote": "Le tue registrazioni rimangono sul tuo dispositivo. L analisi avviene interamente nel browser.",
|
|
57
|
+
"loadHeading": "Carica due suoni da analizzare",
|
|
58
|
+
"sampleALabel": "Campione A",
|
|
59
|
+
"sampleBLabel": "Campione B",
|
|
60
|
+
"chooseFileLabel": "Seleziona audio",
|
|
61
|
+
"replaceFileLabel": "Sostituisci audio",
|
|
62
|
+
"dropHint": "Trascina un file audio qui (max 25 MB). Vengono analizzati i primi 20 secondi.",
|
|
63
|
+
"presetHint": "Prova subito i due studi sintetici di vocali.",
|
|
64
|
+
"presetWarmLabel": "Studio vocale calda",
|
|
65
|
+
"presetBrightLabel": "Studio vocale brillante",
|
|
66
|
+
"emptySampleLabel": "In attesa di audio",
|
|
67
|
+
"readySampleLabel": "Piastra spettrale generata",
|
|
68
|
+
"decodingSampleLabel": "Elaborazione piastra spettrale",
|
|
69
|
+
"errorSampleLabel": "Impossibile analizzare il campione",
|
|
70
|
+
"durationLabel": "Durata",
|
|
71
|
+
"ceilingHeading": "Limite di frequenza",
|
|
72
|
+
"ceilingFourLabel": "4 kHz",
|
|
73
|
+
"ceilingSixLabel": "6 kHz",
|
|
74
|
+
"ceilingEightLabel": "8 kHz",
|
|
75
|
+
"stageLabel": "Mosaico spettrogrammi vocali specchiati",
|
|
76
|
+
"mirrorViewLabel": "Piastre specchiate",
|
|
77
|
+
"splitViewLabel": "Piastre parallele",
|
|
78
|
+
"playALabel": "Riproduci campione A",
|
|
79
|
+
"playBLabel": "Riproduci campione B",
|
|
80
|
+
"stopLabel": "Interrompi",
|
|
81
|
+
"timeAxisLabel": "Tempo",
|
|
82
|
+
"frequencyAxisLabel": "Frequenza",
|
|
83
|
+
"intensityLegendLabel": "Un inchiostro più luminoso indica maggiore energia",
|
|
84
|
+
"formantLegendLabel": "Guida formanti stimati",
|
|
85
|
+
"sampleAEmptyCanvasLabel": "Carica il campione A per visualizzare lo spettro",
|
|
86
|
+
"sampleBEmptyCanvasLabel": "Carica il campione B per visualizzare lo spettro",
|
|
87
|
+
"comparisonHeading": "Analisi delle risonanze spettrali",
|
|
88
|
+
"comparisonNote": "Valori medi dei picchi spettrali. Le differenze sono misurazioni fisiche, non una percentuale di corrispondenza o prova di identità.",
|
|
89
|
+
"formantOneLabel": "Prima regione di risonanza (F1)",
|
|
90
|
+
"formantTwoLabel": "Seconda regione di risonanza (F2)",
|
|
91
|
+
"formantThreeLabel": "Terza regione di risonanza (F3)",
|
|
92
|
+
"averageLabel": "Media",
|
|
93
|
+
"differenceLabel": "Differenza",
|
|
94
|
+
"unavailableLabel": "Non disponibile",
|
|
95
|
+
"statusEmptyLabel": "Carica un campione per iniziare",
|
|
96
|
+
"statusSingleLabel": "Una piastra è pronta",
|
|
97
|
+
"statusReadyLabel": "Entrambe le piastre spettrali sono pronte",
|
|
98
|
+
"limitError": "Il file supera il limite di analisi locale di 25 MB.",
|
|
99
|
+
"decodeError": "Il browser non ha potuto decodificare questo formato audio.",
|
|
100
|
+
"browserError": "L API Web Audio non è disponibile in questo browser.",
|
|
101
|
+
"educationalNote": "Strumento di visualizzazione didattico. Le guide dei formanti non devono essere utilizzate per l identificazione del parlante."
|
|
102
|
+
},
|
|
103
|
+
seo: [
|
|
104
|
+
{ type: 'title', text: "Come uno spettrogramma trasforma il suono in immagine", level: 2 },
|
|
105
|
+
{ type: 'paragraph', html: "Uno <strong>spettrogramma vocale</strong> trasforma una registrazione in una mappa con il tempo sull asse orizzontale e la frequenza su quello verticale. Un energia più forte appare come colore più luminoso. Questo rende vocali tenute, armoniche, silenzi e risonanze più facili da osservare rispetto a una forma d onda classica. La visualizzazione aiuta l analisi spettrale." },
|
|
106
|
+
{ type: 'paragraph', html: "L analizzatore divide il segnale in brevi finestre sovrapposte, applica una finestra di Hamming e calcola la distribuzione dell energia per frequenza tramite la FFT. Una finestra breve individua il momento esatto di un evento, mentre la risoluzione in frequenza mostra dove si concentra l energia. A causa del principio di indeterminazione, esiste sempre un compromesso tra risoluzione temporale e frequenziale. Queste impostazioni determinano la definizione visiva." },
|
|
107
|
+
{ type: 'diagnostic', variant: 'info', title: "Elaborazione privata nel browser", html: "Visualizza frequenza, tempo, intensità ed stima dei formanti di due campioni audio in modo privato nel tuo browser." },
|
|
108
|
+
{ type: 'stats', columns: 3, items: [
|
|
109
|
+
{ value: "Tempo", label: "Lettura da sinistra a destra" },
|
|
110
|
+
{ value: "Hz", label: "Posizione in frequenza" },
|
|
111
|
+
{ value: "Energia", label: "Rappresentata come luminosità" }
|
|
112
|
+
] },
|
|
113
|
+
{ type: 'title', text: "Leggere i formanti in modo corretto", level: 3 },
|
|
114
|
+
{ type: 'paragraph', html: "I formanti sono regioni di risonanza modellate dal tratto vocale. F1 e F2 sono usati in fonetica per descrivere l altezza e il punto di articolazione delle vocali. Questo analizzatore traccia picchi smussati in tre regioni di frequenza in modo che l utente possa collegare le bande visibili al comportamento di F1, F2 e F3." },
|
|
115
|
+
{ type: 'paragraph', html: "La misurazione professionale dei formanti utilizza solitamente una codifica predittiva lineare (LPC) adattata al parlante. Le armoniche del fondamentale, il rumore di fondo, il riverbero e la compressione audio possono spostare le stime semplici. Utilizza queste guide come riferimenti didattici e controlla sempre lo spettro sottostante." },
|
|
116
|
+
{ type: 'table', headers: ['Guide', 'Region', 'Meaning'], rows: [["F1","da 180 a 1000 Hz","Prima regione di risonanza, associata all apertura della vocale"],["F2","da 900 a 3000 Hz","Seconda regione di risonanza, associata alla posizione della lingua"],["F3","da 2000 a 4500 Hz","Regione di risonanza superiore, influenzata dal tratto vocale"]] },
|
|
117
|
+
{ type: 'title', text: "L impatto delle impostazioni di frequenza", level: 3 },
|
|
118
|
+
{ type: 'comparative', columns: 2, items: [
|
|
119
|
+
{ title: "Limite basso (4 kHz)", description: "Migliore vista per basse frequenze", points: ["Utile per vocali", "Può escludere alte frequenze", "Non garantisce maggiore precisione"] },
|
|
120
|
+
{ title: "Limite alto (6/8 kHz)", description: "Più dettagli superiori", highlight: true, points: ["Per voci brillanti", "Mostra fricative", "Comprime bande inferiori"] }
|
|
121
|
+
] },
|
|
122
|
+
{ type: 'title', text: "Un confronto responsabile tra due campioni", level: 3 },
|
|
123
|
+
{ type: 'paragraph', html: "Il confronto tra due campioni è particolarmente utile quando le registrazioni contengono la stessa vocale o frase in condizioni acustiche simili. Le differenze mostrate sono distanze fisiche assolute. Non costituiscono una percentuale di somiglianza né una prova biometrica di identità." },
|
|
124
|
+
{ type: 'list', items: ["<strong>Confrontare lo stesso contenuto parlato:</strong> vocali o parole identiche facilitano il confronto.","<strong>Uniformare le condizioni di registrazione:</strong> microfono e acustica influenzano notevolmente lo spettro.","<strong>Ascoltare con il cursore:</strong> collega gli eventi visivi al suono esatto.","<strong>Evitare affermazioni di identità:</strong> uno spettrogramma simile non dimostra l identità del parlante."] },
|
|
125
|
+
{ type: 'summary', title: "Sintesi dell analizzatore", items: ["Generare uno spettrogramma audio in locale da file compatibili.","Esplorare due campioni in piastre specchiate o parallele.","Imparare come variano l energia spettrale e i formanti.","Mantenere un approccio descrittivo e didattico."] }
|
|
126
|
+
],
|
|
127
|
+
faq,
|
|
128
|
+
bibliography,
|
|
129
|
+
howTo,
|
|
130
|
+
schemas: [
|
|
131
|
+
{ '@context': 'https://schema.org', '@type': 'SoftwareApplication', name: title, description, applicationCategory: 'MultimediaApplication', operatingSystem: 'Any' },
|
|
132
|
+
{ '@context': 'https://schema.org', '@type': 'FAQPage', mainEntity: faq.map((item) => ({ '@type': 'Question', name: item.question, acceptedAnswer: { '@type': 'Answer', text: item.answer } })) },
|
|
133
|
+
{ '@context': 'https://schema.org', '@type': 'HowTo', name: title, step: howTo.map((step) => ({ '@type': 'HowToStep', name: step.name, text: step.text })) }
|
|
134
|
+
]
|
|
135
|
+
};
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { bibliography } from '../bibliography';
|
|
2
|
+
import type { VoiceSpectrogramLocaleContent } from '../entry';
|
|
3
|
+
|
|
4
|
+
const slug = "voice-spectrogram-analyzer-online";
|
|
5
|
+
const title = "音声スペクトログラム解析ツール オンライン";
|
|
6
|
+
const description = "2つの音声サンプルの周波数、時間、音量強度、推定フォルマントをブラウザ内でローカルに解析・比較します。";
|
|
7
|
+
|
|
8
|
+
const howTo = [
|
|
9
|
+
{
|
|
10
|
+
"name": "音声サンプルを選択",
|
|
11
|
+
"text": "手元の音声ファイルまたはプリセットを読み込みます。"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"name": "周波数上限を設定",
|
|
15
|
+
"text": "声の性質に合わせて4kHz、6kHz、8kHzを選択します。"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"name": "スペクトログラムを確認",
|
|
19
|
+
"text": "時間、周波数、フォルマントの分布を観察します。"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"name": "再生して比較",
|
|
23
|
+
"text": "カーソルと音声を同期させながら比較します。"
|
|
24
|
+
}
|
|
25
|
+
];
|
|
26
|
+
|
|
27
|
+
const faq = [
|
|
28
|
+
{
|
|
29
|
+
"question": "音声スペクトログラムとは何ですか?",
|
|
30
|
+
"answer": "横軸に時間、縦軸に周波数、色の明るさで音の強さを表したグラフです。"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"question": "録音データはサーバーに送信されますか?",
|
|
34
|
+
"answer": "いいえ。すべての処理はお使いのブラウザ内で完結します。"
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"question": "F1、F2、F3ガイドとは?",
|
|
38
|
+
"answer": "声道の共鳴周波数(フォルマント)の推定位置を示す補助線です。"
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"question": "このツールで話者を特定できますか?",
|
|
42
|
+
"answer": "いいえ。見た目の類似性だけで個人の同一性を判定することはできません。"
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"question": "周波数上限を変えるとフォルマントが変わる理由は?",
|
|
46
|
+
"answer": "表示範囲が変わることで、検出されるピークの分離具合が変化するためです。"
|
|
47
|
+
}
|
|
48
|
+
];
|
|
49
|
+
|
|
50
|
+
export const content: VoiceSpectrogramLocaleContent = {
|
|
51
|
+
slug,
|
|
52
|
+
title,
|
|
53
|
+
description,
|
|
54
|
+
ui: {
|
|
55
|
+
"privacyBadge": "ローカル専用",
|
|
56
|
+
"privacyNote": "音声ファイルは外部サーバーに送信されません。ブラウザ内でローカル処理されます。",
|
|
57
|
+
"loadHeading": "解析する2つの音声ファイルを読み込み",
|
|
58
|
+
"sampleALabel": "サンプル A",
|
|
59
|
+
"sampleBLabel": "サンプル B",
|
|
60
|
+
"chooseFileLabel": "音声を選択",
|
|
61
|
+
"replaceFileLabel": "声を変更",
|
|
62
|
+
"dropHint": "ここに音声ファイルをドラッグ&ドロップ(最大25MB)。最初の20秒間を解析します。",
|
|
63
|
+
"presetHint": "合成母音サンプルですぐにテストできます。",
|
|
64
|
+
"presetWarmLabel": "温かみのある母音サンプル",
|
|
65
|
+
"presetBrightLabel": "明朗な母音サンプル",
|
|
66
|
+
"emptySampleLabel": "音声待機中",
|
|
67
|
+
"readySampleLabel": "スペクトルプレート作成完了",
|
|
68
|
+
"decodingSampleLabel": "スペクトルプレート解析中",
|
|
69
|
+
"errorSampleLabel": "解析に失敗しました",
|
|
70
|
+
"durationLabel": "再生時間",
|
|
71
|
+
"ceilingHeading": "周波数上限設定",
|
|
72
|
+
"ceilingFourLabel": "4 kHz",
|
|
73
|
+
"ceilingSixLabel": "6 kHz",
|
|
74
|
+
"ceilingEightLabel": "8 kHz",
|
|
75
|
+
"stageLabel": "ミラー表示スペクトログラムステージ",
|
|
76
|
+
"mirrorViewLabel": "対向表示",
|
|
77
|
+
"splitViewLabel": "並列表示",
|
|
78
|
+
"playALabel": "サンプルAを再生",
|
|
79
|
+
"playBLabel": "サンプルBを再生",
|
|
80
|
+
"stopLabel": "停止",
|
|
81
|
+
"timeAxisLabel": "時間",
|
|
82
|
+
"frequencyAxisLabel": "周波数",
|
|
83
|
+
"intensityLegendLabel": "明るい色ほど音響エネルギーが強力",
|
|
84
|
+
"formantLegendLabel": "推定フォルマントガイドライン",
|
|
85
|
+
"sampleAEmptyCanvasLabel": "サンプルAを読み込むとスペクトログラムが表示されます",
|
|
86
|
+
"sampleBEmptyCanvasLabel": "サンプルBを読み込むとスペクトログラムが表示されます",
|
|
87
|
+
"comparisonHeading": "共鳴周波数分析",
|
|
88
|
+
"comparisonNote": "有声音フレームにおける平均スペクトルピーク位置。差分は物理測定値であり同一性の証明ではありません。",
|
|
89
|
+
"formantOneLabel": "第1共鳴領域 (F1)",
|
|
90
|
+
"formantTwoLabel": "第2共鳴領域 (F2)",
|
|
91
|
+
"formantThreeLabel": "第3共鳴領域 (F3)",
|
|
92
|
+
"averageLabel": "平均値",
|
|
93
|
+
"differenceLabel": "差分",
|
|
94
|
+
"unavailableLabel": "利用不可",
|
|
95
|
+
"statusEmptyLabel": "音声を選択して開始",
|
|
96
|
+
"statusSingleLabel": "1つのプレートが準備完了",
|
|
97
|
+
"statusReadyLabel": "両方のプレートが準備完了",
|
|
98
|
+
"limitError": "ファイルサイズがローカル制限の25MBを超えています。",
|
|
99
|
+
"decodeError": "このブラウザでは対応していない音声形式です。",
|
|
100
|
+
"browserError": "Web Audio APIが非対応のブラウザです。",
|
|
101
|
+
"educationalNote": "学習用可視化ツールです。フォルマントガイドは簡易計算に基づくため、声紋鑑定や個人特定には使用できません。"
|
|
102
|
+
},
|
|
103
|
+
seo: [
|
|
104
|
+
{ type: 'title', text: "スペクトログラムが音を視覚的な風景に変える仕組み", level: 2 },
|
|
105
|
+
{ type: 'paragraph', html: "<strong>音声スペクトログラム</strong>は、録音データを横軸に時間、縦軸に周波数を配置したマップに変換します。強度の高い音響エネルギーは明るい色として表示されます。これにより、単純な波形表示よりも持続母音、高調波、無音状態、および共鳴の変化をはっきりと確認・分析できます。音響信号の視覚的理解が容易になります。" },
|
|
106
|
+
{ type: 'paragraph', html: "本解析ツールは、信号を短いオーバーラップ区間に分割し、ハン窓を適用した上で高速フーリエ変換(FFT)を実行して周波数ごとのエネルギー分布を計算します。区間を短くすると時間的な発生タイミングが明確になり、周波数分解能を高めるとエネルギーの集中場所が判明します。不確定性原理のため時間と周波数の分解能には常にトレードオフが存在します。" },
|
|
107
|
+
{ type: 'diagnostic', variant: 'info', title: "ブラウザ内プライベート処理", html: "2つの音声サンプルの周波数、時間、音量強度、推定フォルマントをブラウザ内でローカルに解析・比較します。" },
|
|
108
|
+
{ type: 'stats', columns: 3, items: [
|
|
109
|
+
{ value: "時間", label: "左から右へ読み取り" },
|
|
110
|
+
{ value: "Hz", label: "周波数位置" },
|
|
111
|
+
{ value: "エネルギー", label: "明るさで表現" }
|
|
112
|
+
] },
|
|
113
|
+
{ type: 'title', text: "フォルマントを正しく読み解く", level: 3 },
|
|
114
|
+
{ type: 'paragraph', html: "フォルマントとは、声道形状によって形成される共鳴領域です。音声学においてF1とF2は母音の高さや舌の位置を表すために頻繁に使用されます。本ツールは3つの周波数領域における滑らかなピークを追跡し、視覚的な帯域とF1、F2、F3の挙動を結びつけて観察できるように設計されています。" },
|
|
115
|
+
{ type: 'paragraph', html: "専門的なフォルマント計測では、話者に合わせて調整された線形予測符号化(LPC)手順が用いられます。 pitch高調波、鼻声化、部屋の反響、背景ノイズは簡易的なピーク推定をずらす要因となります。表示されるガイドラインは教育的な参考目安として利用し、常に背景のスペクトル表示と合わせて確認してください。" },
|
|
116
|
+
{ type: 'table', headers: ['Guide', 'Region', 'Meaning'], rows: [["F1","180 〜 1000 Hz","第1共鳴領域。母音の口の開き具合に関連"],["F2","900 〜 3000 Hz","第2共鳴領域。舌の前後位置に関連"],["F3","2000 〜 4500 Hz","高次共鳴領域。声道全体の形状に影響を受ける"]] },
|
|
117
|
+
{ type: 'title', text: "周波数設定が解析結果に与える影響", level: 3 },
|
|
118
|
+
{ type: 'comparative', columns: 2, items: [
|
|
119
|
+
{ title: "低い上限 (4 kHz)", description: "低周波数の観察に最適", points: ["母音の観察に有用", "高音域エネルギーを除外する可能性", "高精度を保証するものではありません"] },
|
|
120
|
+
{ title: "高い上限 (6/8 kHz)", description: "高音域の詳細を表示", highlight: true, points: ["明るい声に最適", "摩擦音を表示", "低音域を垂直方向に圧縮"] }
|
|
121
|
+
] },
|
|
122
|
+
{ type: 'title', text: "2つの音声サンプルの適正な比較方法", level: 3 },
|
|
123
|
+
{ type: 'paragraph', html: "2つのプレートの比較は、両方の録音が同様の音響環境で同じ母音やフレーズを含んでいる場合に最も効果的です。表示される差分はスペクトルピーク間の絶対的な物理測定値であり、同一性の割合や個人識別の証明を提供するものではありません。" },
|
|
124
|
+
{ type: 'list', items: ["<strong>同じ発話内容を比較する:</strong> 繰り返された母音や単語は、異なるフレーズよりも比較が容易です。","<strong>録音条件を揃える:</strong> マイクの種類や部屋の音響特性はスペクトルに大きく影響します。","<strong>カーソルを合わせて聴く:</strong> 視覚的なイベントと実際の音の瞬間を同期させて確認します。","<strong>個人特定を避ける:</strong> 類似したスペクトログラムであっても同一人物の証明にはなりません。"] },
|
|
125
|
+
{ type: 'summary', title: "本解析ツールの要点まとめ", items: ["ブラウザ対応ファイルからローカルでスペクトログラムを生成。","ミラー表示または並列表示で2つのサンプルを同期比較。","音響エネルギーと推定フォルマント領域の変化を学習。","鑑定ではなく記述的・教育的な目的で活用。"] }
|
|
126
|
+
],
|
|
127
|
+
faq,
|
|
128
|
+
bibliography,
|
|
129
|
+
howTo,
|
|
130
|
+
schemas: [
|
|
131
|
+
{ '@context': 'https://schema.org', '@type': 'SoftwareApplication', name: title, description, applicationCategory: 'MultimediaApplication', operatingSystem: 'Any' },
|
|
132
|
+
{ '@context': 'https://schema.org', '@type': 'FAQPage', mainEntity: faq.map((item) => ({ '@type': 'Question', name: item.question, acceptedAnswer: { '@type': 'Answer', text: item.answer } })) },
|
|
133
|
+
{ '@context': 'https://schema.org', '@type': 'HowTo', name: title, step: howTo.map((step) => ({ '@type': 'HowToStep', name: step.name, text: step.text })) }
|
|
134
|
+
]
|
|
135
|
+
};
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { bibliography } from '../bibliography';
|
|
2
|
+
import type { VoiceSpectrogramLocaleContent } from '../entry';
|
|
3
|
+
|
|
4
|
+
const slug = "voice-spectrogram-analyzer-online";
|
|
5
|
+
const title = "음성 스펙트로그램 분석기 온라인";
|
|
6
|
+
const description = "두 개의 오디오 샘플의 주파수, 시간, 강도 및 추정 포르망트 패턴을 브라우저에서 개인적으로 분석하고 비교합니다.";
|
|
7
|
+
|
|
8
|
+
const howTo = [
|
|
9
|
+
{
|
|
10
|
+
"name": "두 개의 샘플 선택",
|
|
11
|
+
"text": "로컬 오디오 파일이나 합성 모음 예제를 선택합니다."
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"name": "주파수 상한선 설정",
|
|
15
|
+
"text": "음성 특성에 맞게 4kHz, 6kHz, 8kHz 중 선택합니다."
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"name": "스펙트로그램 분석",
|
|
19
|
+
"text": "시간, 주파수, 포르망트 영역을 확인합니다."
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"name": "재생 및 비교",
|
|
23
|
+
"text": "동기화된 커서로 소리를 들으며 공명 평균값을 비교합니다."
|
|
24
|
+
}
|
|
25
|
+
];
|
|
26
|
+
|
|
27
|
+
const faq = [
|
|
28
|
+
{
|
|
29
|
+
"question": "음성 스펙트로그램은 무엇을 보여주나요?",
|
|
30
|
+
"answer": "가로축은 시간, 세로축은 주파수, 색상의 밝기는 음향 에너지를 나타냅니다."
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"question": "내 녹음 파일이 업로드되나요?",
|
|
34
|
+
"answer": "아니오. 모든 디코딩과 분석은 브라우저 내에서 로컬로 진행됩니다."
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"question": "F1, F2, F3 가이드는 무엇인가요?",
|
|
38
|
+
"answer": "성도의 공명 주파수를 추정한 교육용 안내선입니다."
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"question": "이 도구로 화자를 식별할 수 있나요?",
|
|
42
|
+
"answer": "아니오. 시각적 유사성만으로 화자의 동일성을 판단할 수 없습니다."
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"question": "주파수 상한선에 따라 포르망트가 달라지는 이유는?",
|
|
46
|
+
"answer": "표시되는 주파수 범위에 따라 탐지되는 스펙트럼 피크가 달라지기 때문입니다."
|
|
47
|
+
}
|
|
48
|
+
];
|
|
49
|
+
|
|
50
|
+
export const content: VoiceSpectrogramLocaleContent = {
|
|
51
|
+
slug,
|
|
52
|
+
title,
|
|
53
|
+
description,
|
|
54
|
+
ui: {
|
|
55
|
+
"privacyBadge": "로컬 전용",
|
|
56
|
+
"privacyNote": "녹음 파일은 이 기기에만 유지됩니다. 분석과 디코딩은 브라우저 내부에서 실행됩니다.",
|
|
57
|
+
"loadHeading": "분석할 두 개의 음성 선택",
|
|
58
|
+
"sampleALabel": "샘플 A",
|
|
59
|
+
"sampleBLabel": "샘플 B",
|
|
60
|
+
"chooseFileLabel": "오디오 선택",
|
|
61
|
+
"replaceFileLabel": "오디오 교체",
|
|
62
|
+
"dropHint": "오디오 파일을 여기에 끌어다 놓으세요 (최대 25MB). 처음 20초가 분석됩니다.",
|
|
63
|
+
"presetHint": "합성 모음 연구 샘플로 즉시 테스트해보세요.",
|
|
64
|
+
"presetWarmLabel": "따뜻한 모음 샘플",
|
|
65
|
+
"presetBrightLabel": "밝은 모음 샘플",
|
|
66
|
+
"emptySampleLabel": "오디오 대기 중",
|
|
67
|
+
"readySampleLabel": "스펙트럼 플레이트 생성됨",
|
|
68
|
+
"decodingSampleLabel": "스펙트럼 플레이트 분석 중",
|
|
69
|
+
"errorSampleLabel": "샘플을 분석할 수 없습니다",
|
|
70
|
+
"durationLabel": "재생 시간",
|
|
71
|
+
"ceilingHeading": "주파수 상한선",
|
|
72
|
+
"ceilingFourLabel": "4 kHz",
|
|
73
|
+
"ceilingSixLabel": "6 kHz",
|
|
74
|
+
"ceilingEightLabel": "8 kHz",
|
|
75
|
+
"stageLabel": "미러 음성 스펙트로그램 스테이지",
|
|
76
|
+
"mirrorViewLabel": "대칭 표시",
|
|
77
|
+
"splitViewLabel": "병렬 표시",
|
|
78
|
+
"playALabel": "샘플 A 재생",
|
|
79
|
+
"playBLabel": "샘플 B 재생",
|
|
80
|
+
"stopLabel": "정지",
|
|
81
|
+
"timeAxisLabel": "시간",
|
|
82
|
+
"frequencyAxisLabel": "주파수",
|
|
83
|
+
"intensityLegendLabel": "밝은 색상일수록 강한 음향 에너지를 나타냅니다",
|
|
84
|
+
"formantLegendLabel": "추정 포르망트 가이드",
|
|
85
|
+
"sampleAEmptyCanvasLabel": "샘플 A를 불러오면 스펙트럼이 표시됩니다",
|
|
86
|
+
"sampleBEmptyCanvasLabel": "샘플 B를 불러오면 스펙트럼이 표시됩니다",
|
|
87
|
+
"comparisonHeading": "공명 주파수 분석",
|
|
88
|
+
"comparisonNote": "유성음 구간의 평균 스펙트럼 피크 위치입니다. 차이는 물리적 측정값이며 동일성 증명이 아닙니다.",
|
|
89
|
+
"formantOneLabel": "첫 번째 공명 영역 (F1)",
|
|
90
|
+
"formantTwoLabel": "두 번째 공명 영역 (F2)",
|
|
91
|
+
"formantThreeLabel": "세 번째 공명 영역 (F3)",
|
|
92
|
+
"averageLabel": "평균",
|
|
93
|
+
"differenceLabel": "차이",
|
|
94
|
+
"unavailableLabel": "사용 불가",
|
|
95
|
+
"statusEmptyLabel": "샘플을 불러와 시작하세요",
|
|
96
|
+
"statusSingleLabel": "한 개의 플레이트가 준비되었습니다",
|
|
97
|
+
"statusReadyLabel": "두 개의 스펙트럼 플레이트가 모두 준비되었습니다",
|
|
98
|
+
"limitError": "파일 크기가 로컬 제한인 25MB를 초과합니다.",
|
|
99
|
+
"decodeError": "브라우저가 이 오디오 형식을 디코딩할 수 없습니다.",
|
|
100
|
+
"browserError": "이 브라우저에서는 Web Audio API를 사용할 수 없습니다.",
|
|
101
|
+
"educationalNote": "교육용 시각화 도구입니다. 포르망트 가이드는 간이 계산에 기반하므로 화자 식별용으로 사용할 수 없습니다."
|
|
102
|
+
},
|
|
103
|
+
seo: [
|
|
104
|
+
{ type: 'title', text: "스펙트로그램이 소리를 시각적 지도로 변환하는 원리", level: 2 },
|
|
105
|
+
{ type: 'paragraph', html: "<strong>음성 스펙트로그램</strong>은 녹음 데이터를 가로축 시간, 세로축 주파수로 배치한 시각적 지도로 변환합니다. 강한 음향 에너지는 더 밝은 색상으로 표현됩니다. 이는 단일 파형보다 지속 모음, 고조파, 정적 및 공명의 변화를 훨씬 명확하게 분석할 수 있게 해줍니다. 오디오 신호의 시각적 이해가 쉬워집니다." },
|
|
106
|
+
{ type: 'paragraph', html: "분석기는 신호를 짧은 중첩 구간으로 나누고 해밍 창을 적용한 후 FFT를 통해 주파수별 에너지 분포를 계산합니다. 짧은 구간은 특정 사건의 정확한 시점을 판별하게 해주며, 주파수 분해능은 에너지가 집중된 위치를 보여줍니다. 신호 처리의 불확정성 원리로 인해 시간과 주파수 분해능 사이에는 절충이 존재합니다." },
|
|
107
|
+
{ type: 'diagnostic', variant: 'info', title: "브라우저 내부 개인 처리", html: "두 개의 오디오 샘플의 주파수, 시간, 강도 및 추정 포르망트 패턴을 브라우저에서 개인적으로 분석하고 비교합니다." },
|
|
108
|
+
{ type: 'stats', columns: 3, items: [
|
|
109
|
+
{ value: "시간", label: "왼쪽에서 오른쪽으로 읽기" },
|
|
110
|
+
{ value: "Hz", label: "주파수 위치" },
|
|
111
|
+
{ value: "에너지", label: "밝기로 표현" }
|
|
112
|
+
] },
|
|
113
|
+
{ type: 'title', text: "포르망트 올바르게 해석하기", level: 3 },
|
|
114
|
+
{ type: 'paragraph', html: "포르망트는 성도 모양에 의해 형성되는 공명 영역입니다. 음성학에서 F1과 F2는 모음의 높낮이와 혀의 위치를 설명하는 데 흔히 사용됩니다. 본 분석기는 3개 주파수 영역의 매끄러운 피크를 추적하여 시각적 대역과 F1, F2, F3의 동작을 연결하여 관찰할 수 있도록 돕습니다." },
|
|
115
|
+
{ type: 'paragraph', html: "전문적인 포르망트 측정은 일반적으로 화자에 맞춘 선형 예측 부호화(LPC) 절차를 사용합니다. 피치 고조파, 비음화, 방 안의 울림, 배경 소음은 단순 추정치를 변형시킬 수 있습니다. 가이드라인을 교육적 참고용으로 활용하고 배경의 스펙트럼 표시를 함께 확인하세요." },
|
|
116
|
+
{ type: 'table', headers: ['Guide', 'Region', 'Meaning'], rows: [["F1","180 ~ 1000 Hz","첫 번째 공명 영역, 모음의 구강 개포도와 관련"],["F2","900 ~ 3000 Hz","두 번째 공명 영역, 혀의 전후 위치와 관련"],["F3","2000 ~ 4500 Hz","고차 공명 영역, 성도 전체의 형상에 영향을 받음"]] },
|
|
117
|
+
{ type: 'title', text: "주파수 설정이 분석에 미치는 영향", level: 3 },
|
|
118
|
+
{ type: 'comparative', columns: 2, items: [
|
|
119
|
+
{ title: "낮은 상한 (4 kHz)", description: "저주파 관찰에 용이", points: ["모음 관찰에 유용", "고주파 에너지 제외 가능성", "더 높은 정밀도를 보장하지는 않음"] },
|
|
120
|
+
{ title: "높은 상한 (6/8 kHz)", description: "더 많은 고주파 세부정보", highlight: true, points: ["밝은 음성에 적합", "마찰음 표시", "저주파 대역 압축"] }
|
|
121
|
+
] },
|
|
122
|
+
{ type: 'title', text: "책임감 있는 두 오디오 샘플 비교", level: 3 },
|
|
123
|
+
{ type: 'paragraph', html: "두 플레이트의 비교는 두 녹음이 동일한 모음이나 문장을 유사한 음향 조건에서 포함할 때 가장 유용합니다. 표시된 차이는 스펙트럼 피크 간의 절대적 물리 측정값이며 동일성 비율이나 생체 인식을 증명하지 않습니다." },
|
|
124
|
+
{ type: 'list', items: ["<strong>동일한 발화 내용 비교:</strong> 반복된 모음이나 단어는 서로 다른 문장보다 비교가 용이합니다.","<strong>녹음 환경 맞추기:</strong> 마이크와 방의 음향 특성은 스펙트럼에 큰 영향을 미칩니다.","<strong>커서와 함께 청취:</strong> 시각적 사건과 실제 소리의 순간을 동기화하여 확인합니다.","<strong>화자 동일성 주장 자제:</strong> 유사하게 보이는 스펙트로그램이라도 동일 화자를 증명하지 않습니다."] },
|
|
125
|
+
{ type: 'summary', title: "분석기 요약", items: ["지원되는 파일에서 로컬로 스펙트로그램을 생성합니다.","대칭 또는 병렬 플레이트에서 두 샘플을 시각적으로 탐색합니다.","음향 에너지와 포르망트 영역의 변화를 학습합니다.","법의학적 판정이 아닌 기술적·교육적 목적을 유지합니다."] }
|
|
126
|
+
],
|
|
127
|
+
faq,
|
|
128
|
+
bibliography,
|
|
129
|
+
howTo,
|
|
130
|
+
schemas: [
|
|
131
|
+
{ '@context': 'https://schema.org', '@type': 'SoftwareApplication', name: title, description, applicationCategory: 'MultimediaApplication', operatingSystem: 'Any' },
|
|
132
|
+
{ '@context': 'https://schema.org', '@type': 'FAQPage', mainEntity: faq.map((item) => ({ '@type': 'Question', name: item.question, acceptedAnswer: { '@type': 'Answer', text: item.answer } })) },
|
|
133
|
+
{ '@context': 'https://schema.org', '@type': 'HowTo', name: title, step: howTo.map((step) => ({ '@type': 'HowToStep', name: step.name, text: step.text })) }
|
|
134
|
+
]
|
|
135
|
+
};
|