@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 = "stem-spectrogram-analysator-online";
|
|
5
|
+
const title = "Stem Spectrogram Analysator Online";
|
|
6
|
+
const description = "Visualiseer frequentie, tijd, intensiteit en formantwaarden van twee geluidsfragmenten privé in uw browser.";
|
|
7
|
+
|
|
8
|
+
const howTo = [
|
|
9
|
+
{
|
|
10
|
+
"name": "Kies twee audiosamples",
|
|
11
|
+
"text": "Gebruik lokale bestanden of synthetische voorbeelden."
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"name": "Stel frequentieplafond in",
|
|
15
|
+
"text": "Kies 4, 6 of 8 kHz passend bij het stemtype."
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"name": "Lees het spectrogram",
|
|
19
|
+
"text": "Bekijk tijd, frequentie en formantgidsen."
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"name": "Luister en vergelijk",
|
|
23
|
+
"text": "Vergelijk F1, F2 en F3 waarden op een verantwoorde manier."
|
|
24
|
+
}
|
|
25
|
+
];
|
|
26
|
+
|
|
27
|
+
const faq = [
|
|
28
|
+
{
|
|
29
|
+
"question": "Wat toont een stemspectrogram?",
|
|
30
|
+
"answer": "Een spectrogram toont tijd op de horizontale as, frequentie op de verticale as en signaalintensiteit via helderheid."
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"question": "Worden mijn opnamen geüpload?",
|
|
34
|
+
"answer": "Nee. Alles wordt lokaal berekend in uw browser."
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"question": "Wat betekenen F1, F2 en F3?",
|
|
38
|
+
"answer": "Het zijn educatieve schattingen van de resonanties van het spraakkanaal."
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"question": "Kan deze analysator een spreker identificeren?",
|
|
42
|
+
"answer": "Nee. Visuele gelijkenis bewijst geen identiteit."
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"question": "Waarom veranderen formanten bij een ander frequentieplafond?",
|
|
46
|
+
"answer": "De frequentieschaal beïnvloedt hoe pieken worden gescheiden."
|
|
47
|
+
}
|
|
48
|
+
];
|
|
49
|
+
|
|
50
|
+
export const content: VoiceSpectrogramLocaleContent = {
|
|
51
|
+
slug,
|
|
52
|
+
title,
|
|
53
|
+
description,
|
|
54
|
+
ui: {
|
|
55
|
+
"privacyBadge": "Alleen lokaal",
|
|
56
|
+
"privacyNote": "Uw opnamen blijven op dit apparaat. Analyse en decodering worden uitgevoerd in de browser.",
|
|
57
|
+
"loadHeading": "Laad twee geluiden om te analyseren",
|
|
58
|
+
"sampleALabel": "Sample A",
|
|
59
|
+
"sampleBLabel": "Sample B",
|
|
60
|
+
"chooseFileLabel": "Kies audio",
|
|
61
|
+
"replaceFileLabel": "Vervang audio",
|
|
62
|
+
"dropHint": "Sleep hier een audiobestand naartoe (max. 25 MB). De eerste 20 seconden worden geanalyseerd.",
|
|
63
|
+
"presetHint": "Probeer direct de twee synthetische klinkerstudies.",
|
|
64
|
+
"presetWarmLabel": "Warme klinkerstudie",
|
|
65
|
+
"presetBrightLabel": "Heldere klinkerstudie",
|
|
66
|
+
"emptySampleLabel": "Wachten op audio",
|
|
67
|
+
"readySampleLabel": "Spectraalplaat gereed",
|
|
68
|
+
"decodingSampleLabel": "Spectraalplaat verwerken",
|
|
69
|
+
"errorSampleLabel": "Sample kon niet worden geanalyseerd",
|
|
70
|
+
"durationLabel": "Duur",
|
|
71
|
+
"ceilingHeading": "Frequentieplafond",
|
|
72
|
+
"ceilingFourLabel": "4 kHz",
|
|
73
|
+
"ceilingSixLabel": "6 kHz",
|
|
74
|
+
"ceilingEightLabel": "8 kHz",
|
|
75
|
+
"stageLabel": "Gespiegelde stem spectrogram stage",
|
|
76
|
+
"mirrorViewLabel": "Gespiegelde platen",
|
|
77
|
+
"splitViewLabel": "Parallele platen",
|
|
78
|
+
"playALabel": "Speel sample A",
|
|
79
|
+
"playBLabel": "Speel sample B",
|
|
80
|
+
"stopLabel": "Stoppen",
|
|
81
|
+
"timeAxisLabel": "Tijd",
|
|
82
|
+
"frequencyAxisLabel": "Frequentie",
|
|
83
|
+
"intensityLegendLabel": "Heldere inkt duidt op hogere energie",
|
|
84
|
+
"formantLegendLabel": "Geschatte formantgidsen",
|
|
85
|
+
"sampleAEmptyCanvasLabel": "Laad sample A om het spectrum te bekijken",
|
|
86
|
+
"sampleBEmptyCanvasLabel": "Laad sample B om het spectrum te bekijken",
|
|
87
|
+
"comparisonHeading": "Analyse van resonantiepatronen",
|
|
88
|
+
"comparisonNote": "Gemiddelde pieken in stemhebbende fragmenten. Verschillen zijn metingen, geen identiteitsbewijs.",
|
|
89
|
+
"formantOneLabel": "Eerste resonantiegebied (F1)",
|
|
90
|
+
"formantTwoLabel": "Tweede resonantiegebied (F2)",
|
|
91
|
+
"formantThreeLabel": "Derde resonantiegebied (F3)",
|
|
92
|
+
"averageLabel": "Gemiddelde",
|
|
93
|
+
"differenceLabel": "Verschil",
|
|
94
|
+
"unavailableLabel": "Niet beschikbaar",
|
|
95
|
+
"statusEmptyLabel": "Laad een sample om te beginnen",
|
|
96
|
+
"statusSingleLabel": "Eén plaat is gereed",
|
|
97
|
+
"statusReadyLabel": "Beide spectraalplaten zijn gereed",
|
|
98
|
+
"limitError": "Bestand overschrijdt de lokale limiet van 25 MB.",
|
|
99
|
+
"decodeError": "Browser kon dit audioformaat niet decoderen.",
|
|
100
|
+
"browserError": "Web Audio API niet beschikbaar in deze browser.",
|
|
101
|
+
"educationalNote": "Educatieve visualisatietool. Formantgidsen zijn schattingen en niet geschikt voor forensische sprekeridentificatie."
|
|
102
|
+
},
|
|
103
|
+
seo: [
|
|
104
|
+
{ type: 'title', text: "Hoe een spectrogram geluid omzet in een visueel landschap", level: 2 },
|
|
105
|
+
{ type: 'paragraph', html: "Een <strong>stemspectrogram</strong> zet een opname om in een kaart met tijd op de horizontale as en frequentie op de verticale as. Sterkere energie verschijnt als een helderdere kleur. Dit maakt aangehouden klinkers, boventonen, stilte en resonanties gemakkelijker waar te nemen dan op een gewone golfvorm. Deze visualisatie vergemakkelijkt de gedetailleerde analyse van het geluidssignaal op elk moment. Hierdoor krijgen onderzoekers een helder inzicht in de akoestische kenmerken." },
|
|
106
|
+
{ type: 'paragraph', html: "De analysator verdeelt het signaal in korte overlappende segmenten, past een Hamming-venster toe en berekent de energieverdeling per frequentie via FFT. Een kort segment bepaalt het exacte tijdstip, terwijl de frequentieresolutie toont waar energie zich concentreert. Vanwege het onzekerheidsprincipe is er altijd een afweging tussen tijd- en frequentieresolutie. Deze instellingen bepalen de scherpte." },
|
|
107
|
+
|
|
108
|
+
{ type: 'diagnostic', variant: 'info', title: "Privéverwerking in de browser", html: "Visualiseer frequentie, tijd, intensiteit en formantwaarden van twee geluidsfragmenten privé in uw browser." },
|
|
109
|
+
{ type: 'stats', columns: 3, items: [
|
|
110
|
+
{ value: "Tijd", label: "Lees van links naar rechts" },
|
|
111
|
+
{ value: "Hz", label: "Frequentiepositie" },
|
|
112
|
+
{ value: "Energie", label: "Weergegeven als helderheid" }
|
|
113
|
+
] },
|
|
114
|
+
{ type: 'title', text: "Formanten interpreteren zonder overdrijving", level: 3 },
|
|
115
|
+
{ type: 'paragraph', html: "Formanten zijn resonantiegebieden die gevormd worden door het spraakkanaal. F1 en F2 worden in de fonetiek gebruikt om klinkerhoogte en articulatieplaats gedetailleerd te beschrijven. Deze analysator volgt vloeiende pieken in drie frequentiegebieden zodat gebruikers zichtbare banden kunnen koppelen aan het gedrag van F1, F2 en F3 op een intuïtieve wijze." },
|
|
116
|
+
{ type: 'paragraph', html: "Professionele formantmeting gebruikt meestal een Lineaire Predictieve Codering (LPC) afgestemd op de spreker. Grondtonen, nasalisatie, galm en achtergrondruis kunnen eenvoudige schattingen beïnvloeden. Gebruik deze gidsen als educatieve hulp en controleer altijd het onderliggende visuele spectrum." },
|
|
117
|
+
{ type: 'table', headers: ['Guide', 'Region', 'Meaning'], rows: [["F1","180 tot 1000 Hz","Eerste resonantiegebied, gerelateerd aan klinkeropening"],["F2","900 tot 3000 Hz","Tweede resonantiegebied, gerelateerd aan tongpositie"],["F3","2000 tot 4500 Hz","Hoger resonantiegebied, beïnvloed door het spraakkanaal"]] },
|
|
118
|
+
{ type: 'title', text: "De invloed van frequentie-instellingen", level: 3 },
|
|
119
|
+
{ type: 'comparative', columns: 2, items: [
|
|
120
|
+
{ title: "Lage grens (4 kHz)", description: "Beter zicht op lage frequenties", points: ["Nuttig voor klinkers", "Kan hoge energie uitsluiten", "Garandeert geen hogere nauwkeurigheid"] },
|
|
121
|
+
{ title: "Hoge grens (6/8 kHz)", description: "Meer bovenste details", highlight: true, points: ["Voor heldere stemmen", "Toont wrijvingsklanken", "Comprimeert onderste banden"] }
|
|
122
|
+
] },
|
|
123
|
+
{ type: 'title', text: "Een verantwoorde vergelijking van twee audiosamples", level: 3 },
|
|
124
|
+
{ type: 'paragraph', html: "Het vergelijken van twee platen is het meest nuttig wanneer beide opnamen dezelfde klinker of zin bevatten onder soortgelijke akoestische omstandigheden. De weergegeven verschillen zijn absolute fysieke metingen tussen de spectrale pieken. Ze vormen geen gelijkheidspercentage of biometrisch identiteitsbewijs." },
|
|
125
|
+
{ type: 'list', items: ["<strong>Vergelijk dezelfde gesproken inhoud:</strong> herhaalde klinkers of woorden zijn eenvoudiger te vergelijken.","<strong>Gebruik gelijke opname-omstandigheden:</strong> microfoon en kamerakoestiek beïnvloeden het spectrum sterk.","<strong>Luister met de cursor:</strong> koppel visuele gebeurtenissen aan het exacte geluidsmoment.","<strong>Vermijd identiteitsclaims:</strong> een vergelijkbaar spectrogram bewijst geen sprekeridentiteit."] },
|
|
126
|
+
{ type: 'summary', title: "Samenvatting van de analysator", items: ["Genereer lokaal een audiospectrogram uit compatibele bestanden.","Verken twee samples op gespiegelde of parallele platen.","Leer hoe spectrale energie en formantgebieden veranderen.","Houd vergelijkingen beschrijvend en educatief."] }
|
|
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,136 @@
|
|
|
1
|
+
import { bibliography } from '../bibliography';
|
|
2
|
+
import type { VoiceSpectrogramLocaleContent } from '../entry';
|
|
3
|
+
|
|
4
|
+
const slug = "analizator-spektrogramu-glosu-online";
|
|
5
|
+
const title = "Analizator Spektrogramu Głosu Online";
|
|
6
|
+
const description = "Wizualizuj częstotliwość, czas, intensywność i szacowane formanty dwóch próbek dźwiękowych prywatnie w przeglądarce.";
|
|
7
|
+
|
|
8
|
+
const howTo = [
|
|
9
|
+
{
|
|
10
|
+
"name": "Wybierz dwie próbki",
|
|
11
|
+
"text": "Użyj plików lokalnych lub próbki syntezy."
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"name": "Ustaw granicę częstotliwości",
|
|
15
|
+
"text": "Wybierz 4, 6 lub 8 kHz w zależności od głosu."
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"name": "Odczytaj spektrogram",
|
|
19
|
+
"text": "Zaobserwuj czas, częstotliwości i linie formantów."
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"name": "Odsłuchaj i porównaj",
|
|
23
|
+
"text": "Porównaj wartości F1, F2 i F3 w celach edukacyjnych."
|
|
24
|
+
}
|
|
25
|
+
];
|
|
26
|
+
|
|
27
|
+
const faq = [
|
|
28
|
+
{
|
|
29
|
+
"question": "Co przedstawia spektrogram głosu?",
|
|
30
|
+
"answer": "Spektrogram ukazuje czas na osi poziomej, częstotliwość na pionowej oraz natężenie dźwięku za pomocą jasności koloru."
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"question": "Czy moje nagrania są przesyłane do sieci?",
|
|
34
|
+
"answer": "Nie. Cały proces odbywa się lokalnie na Twoim urządzeniu."
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"question": "Czym są formant F1, F2 i F3?",
|
|
38
|
+
"answer": "To przybliżone częstotliwości rezonansowe traktu głosowego."
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"question": "Czy to narzędzie może zidentyfikować osobę po głosie?",
|
|
42
|
+
"answer": "Nie. Podobieństwo wizualne nie stanowi dowodu tożsamości."
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"question": "Dlaczego zmiana granicy częstotliwości zmienia formant?",
|
|
46
|
+
"answer": "Zmiana zakresu widma wpływa na rozdzielczość szczytów częstotliwości."
|
|
47
|
+
}
|
|
48
|
+
];
|
|
49
|
+
|
|
50
|
+
export const content: VoiceSpectrogramLocaleContent = {
|
|
51
|
+
slug,
|
|
52
|
+
title,
|
|
53
|
+
description,
|
|
54
|
+
ui: {
|
|
55
|
+
"privacyBadge": "Tylko lokalnie",
|
|
56
|
+
"privacyNote": "Nagrania pozostają na Twoim urządzeniu. Analiza odbywa się bezpośrednio w przeglądarce.",
|
|
57
|
+
"loadHeading": "Wczytaj dwa pliki dźwiękowe do analizy",
|
|
58
|
+
"sampleALabel": "Próbka A",
|
|
59
|
+
"sampleBLabel": "Próbka B",
|
|
60
|
+
"chooseFileLabel": "Wybierz audio",
|
|
61
|
+
"replaceFileLabel": "Zmień audio",
|
|
62
|
+
"dropHint": "Przeciągnij plik audio tutaj (maks. 25 MB). Analizowane jest pierwsze 20 sekund.",
|
|
63
|
+
"presetHint": "Wypróbuj gotowe syntezy samogłosek.",
|
|
64
|
+
"presetWarmLabel": "Ciepła samogłoska",
|
|
65
|
+
"presetBrightLabel": "Jasna samogłoska",
|
|
66
|
+
"emptySampleLabel": "Oczekiwanie na plik",
|
|
67
|
+
"readySampleLabel": "Płyta spektrogramu gotowa",
|
|
68
|
+
"decodingSampleLabel": "Generowanie spektrogramu",
|
|
69
|
+
"errorSampleLabel": "Nie udało się przeanalizować próbki",
|
|
70
|
+
"durationLabel": "Czas trwania",
|
|
71
|
+
"ceilingHeading": "Górna granica częstotliwości",
|
|
72
|
+
"ceilingFourLabel": "4 kHz",
|
|
73
|
+
"ceilingSixLabel": "6 kHz",
|
|
74
|
+
"ceilingEightLabel": "8 kHz",
|
|
75
|
+
"stageLabel": "Lustrzane płyty spektrogramu",
|
|
76
|
+
"mirrorViewLabel": "Widok lustrzany",
|
|
77
|
+
"splitViewLabel": "Widok równoległy",
|
|
78
|
+
"playALabel": "Odtwórz próbkę A",
|
|
79
|
+
"playBLabel": "Odtwórz próbkę B",
|
|
80
|
+
"stopLabel": "Zatrzymaj",
|
|
81
|
+
"timeAxisLabel": "Czas",
|
|
82
|
+
"frequencyAxisLabel": "Częstotliwość",
|
|
83
|
+
"intensityLegendLabel": "Jaśniejszy kolor oznacza wyższą energię",
|
|
84
|
+
"formantLegendLabel": "Linie szacowanych formantów",
|
|
85
|
+
"sampleAEmptyCanvasLabel": "Wczytaj próbkę A, aby zobaczyć spektrogram",
|
|
86
|
+
"sampleBEmptyCanvasLabel": "Wczytaj próbkę B, aby zobaczyć spektrogram",
|
|
87
|
+
"comparisonHeading": "Analiza rezonansów akustycznych",
|
|
88
|
+
"comparisonNote": "Średnie wartości punktów rezonansowych. Różnice są pomiarami fizycznymi, a nie dowodem tożsamości.",
|
|
89
|
+
"formantOneLabel": "Pierwszy obszar rezonansu (F1)",
|
|
90
|
+
"formantTwoLabel": "Drugi obszar rezonansu (F2)",
|
|
91
|
+
"formantThreeLabel": "Trzeci obszar rezonansu (F3)",
|
|
92
|
+
"averageLabel": "Średnia",
|
|
93
|
+
"differenceLabel": "Różnica",
|
|
94
|
+
"unavailableLabel": "Niedostępne",
|
|
95
|
+
"statusEmptyLabel": "Wczytaj próbkę, aby rozpocząć",
|
|
96
|
+
"statusSingleLabel": "Jedna płyta jest gotowa",
|
|
97
|
+
"statusReadyLabel": "Obie płyty są gotowe",
|
|
98
|
+
"limitError": "Plik przekracza lokalny limit 25 MB.",
|
|
99
|
+
"decodeError": "Przeglądarka nie mogła zdekodować tego formatu.",
|
|
100
|
+
"browserError": "Brak obsługi Web Audio API.",
|
|
101
|
+
"educationalNote": "Narzędzie edukacyjne. Linie formantów mają charakter poglądowy i nie służą do identyfikacji głosowej."
|
|
102
|
+
},
|
|
103
|
+
seo: [
|
|
104
|
+
{ type: 'title', text: "Jak spektrogram głosu zamienia dźwięk w obraz widmowy", level: 2 },
|
|
105
|
+
{ type: 'paragraph', html: "<strong>Spektrogram głosu</strong> przekształca nagranie w mapę z czasem na osi poziomej i częstotliwością na pionowej. Wyższa energia jest widoczna jako jaśniejszy kolor. Ułatwia to obserwację wybrzmiewających samogłosek, alikwotów, ciszy i zmian rezonansu w porównaniu ze zwykłym falogramem. Wizualizacja wspomaga szczegółową i dogłębną analizę sygnału w każdym momencie trwania nagrania audio oraz analizę barwy dźwięku." },
|
|
106
|
+
{ type: 'paragraph', html: "Analizator dzieli sygnał na krótkie nakładające się segmenty, stosuje okno Hamminga i oblicza rozkład energii w częstotliwościach za pomocą FFT. Krótki segment precyzyjnie określa czas, a rozdzielczość częstotliwościowa pokazuje koncentrację energii. Z powodu zasady nieoznaczoności istnieje kompromis między rozdzielczością czasową a częstotliwościową. Ustawienia te wpływają na ostrość obrazu oraz precyzję detekcji sygnału. Pozwala to na dokładne zrozumienie struktury mowy i akustyki w analizowanym materiale dźwiękowym." },
|
|
107
|
+
|
|
108
|
+
{ type: 'diagnostic', variant: 'info', title: "Prywatne przetwarzanie w przeglądarce", html: "Wizualizuj częstotliwość, czas, intensywność i szacowane formanty dwóch próbek dźwiękowych prywatnie w przeglądarce. Wszystkie nagrania pozostają wyłącznie na Twoim urządzeniu bez wysyłania danych." },
|
|
109
|
+
{ type: 'stats', columns: 3, items: [
|
|
110
|
+
{ value: "Czas", label: "Odczyt od lewej do prawej" },
|
|
111
|
+
{ value: "Hz", label: "Pozycja częstotliwości" },
|
|
112
|
+
{ value: "Energia", label: "Przedstawiona jako jasność" }
|
|
113
|
+
] },
|
|
114
|
+
{ type: 'title', text: "Prawidłowe odczytywanie formantów", level: 3 },
|
|
115
|
+
{ type: 'paragraph', html: "Formanty to obszary rezonansowe ukształtowane przez trakt głosowy. F1 i F2 są używane w fonetyce do dokładnego opisu wysokości samogłosek i miejsca artykulacji. Analizator śledzi wygładzone szczyty w trzech obszarach częstotliwości, pomagając połączyć widoczne pasma z zachowaniem F1, F2 i F3 w sposób przejrzysty i intuicyjny." },
|
|
116
|
+
{ type: 'paragraph', html: "Profesjonalny pomiar formantów wykorzystuje zazwyczaj kodowanie predykcyjne (LPC) dostosowane do mówcy. Harmonie tonu podstawowego, szumy i pogłos mogą zniekształcać proste szacunki. Traktuj te linie jako wskazówki edukacyjne i zawsze sprawdzaj tło spektrogramu w celu weryfikacji nakładających się częstotliwości." },
|
|
117
|
+
{ type: 'table', headers: ['Guide', 'Region', 'Meaning'], rows: [["F1","180 do 1000 Hz","Pierwszy obszar rezonansu, związany z otwarciem samogłoski"],["F2","900 do 3000 Hz","Drugi obszar rezonansu, związany z pozycją języka"],["F3","2000 do 4500 Hz","Wyższy obszar rezonansu, zależny od kształtu traktu głosu"]] },
|
|
118
|
+
{ type: 'title', text: "Wpływ ustawień częstotliwości na analizę", level: 3 },
|
|
119
|
+
{ type: 'comparative', columns: 2, items: [
|
|
120
|
+
{ title: "Niska granica (4 kHz)", description: "Lepszy widok niskich częstotliwości", points: ["Przydatne dla samogłosek", "Może wykluczać wysoką energię", "Nie gwarantuje wyższej dokładności"] },
|
|
121
|
+
{ title: "Wysoka granica (6/8 kHz)", description: "Więcej górnych detali", highlight: true, points: ["Dla jasnych głosów", "Pokazuje spółgłoski trące", "Kompresuje dolne pasma"] }
|
|
122
|
+
] },
|
|
123
|
+
{ type: 'title', text: "Odpowiedzialne porównywanie dwóch próbek głosu", level: 3 },
|
|
124
|
+
{ type: 'paragraph', html: "Porównanie dwóch płyt jest najbardziej przydatne, gdy oba nagrania zawierają tę samą samogłoskę lub frazę w podobnych warunkach akustycznych. Wyświetlane różnice są bezwzględnymi pomiarami fizycznymi pomiędzy szczytami częstotliwości. Nie stanowią one procentu podobieństwa ani dowodu tożsamości." },
|
|
125
|
+
{ type: 'list', items: ["<strong>Porównuj tę samą treść:</strong> powtarzane samogłoski lub słowa są łatwiejsze do porównania.","<strong>Ujednolicaj warunki nagrania:</strong> mikrofon i akustyka pomieszczenia silnie wpływają na widmo.","<strong>Słuchaj z kursorami:</strong> łącz wydarzenia wizualne z dokładnym momentem dźwięku.","<strong>Unikaj roszczeń tożsamościowych:</strong> podobny spektrogram nie dowodzi tożsamości mówcy."] },
|
|
126
|
+
{ type: 'summary', title: "Podsumowanie analizatora", items: ["Generuj spektrogram audio lokalnie z kompatybilnych plików.","Badaj dwie próbki na płytach lustrzanych lub równoległych.","Ucz się, jak zmienia się energia widmowa i obszary formantów.","Zachowaj podejście opisowe i edukacyjne."] }
|
|
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 = "analisador-espectrograma-voz-online";
|
|
5
|
+
const title = "Analisador de Espectrograma de Voz Online";
|
|
6
|
+
const description = "Visualize a frequência, tempo, intensidade e formantes de duas amostras de áudio de forma privada no seu navegador.";
|
|
7
|
+
|
|
8
|
+
const howTo = [
|
|
9
|
+
{
|
|
10
|
+
"name": "Selecione duas amostras",
|
|
11
|
+
"text": "Utilize ficheiros locais ou os exemplos sintéticos."
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"name": "Ajuste o teto de frequência",
|
|
15
|
+
"text": "Escolha 4, 6 ou 8 kHz conforme o tipo de voz."
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"name": "Examine o espectrograma",
|
|
19
|
+
"text": "Analise tempo, frequência e formantes."
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"name": "Escute e compare",
|
|
23
|
+
"text": "Compare as médias F1, F2 e F3 pedagogicamente."
|
|
24
|
+
}
|
|
25
|
+
];
|
|
26
|
+
|
|
27
|
+
const faq = [
|
|
28
|
+
{
|
|
29
|
+
"question": "O que mostra um espectrograma de voz?",
|
|
30
|
+
"answer": "Um espectrograma mapeia o tempo no eixo horizontal, a frequência no vertical e a energia pela luminosidade."
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"question": "As minhas gravações são enviadas para um servidor?",
|
|
34
|
+
"answer": "Não. Todo o processo é executado localmente."
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"question": "O que são F1, F2 e F3?",
|
|
38
|
+
"answer": "São estimativas educativas das ressonâncias do trato vocal."
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"question": "Esta ferramenta pode identificar um falante?",
|
|
42
|
+
"answer": "Não. Semelhança visual não constitui prova biométrica."
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"question": "Por que os formantes mudam com o teto de frequência?",
|
|
46
|
+
"answer": "A escala de frequência altera a separação dos picos."
|
|
47
|
+
}
|
|
48
|
+
];
|
|
49
|
+
|
|
50
|
+
export const content: VoiceSpectrogramLocaleContent = {
|
|
51
|
+
slug,
|
|
52
|
+
title,
|
|
53
|
+
description,
|
|
54
|
+
ui: {
|
|
55
|
+
"privacyBadge": "Apenas local",
|
|
56
|
+
"privacyNote": "As suas gravações permanecem no seu dispositivo. O processamento ocorre no navegador.",
|
|
57
|
+
"loadHeading": "Carregue dois sons para analisar",
|
|
58
|
+
"sampleALabel": "Amostra A",
|
|
59
|
+
"sampleBLabel": "Amostra B",
|
|
60
|
+
"chooseFileLabel": "Selecionar áudio",
|
|
61
|
+
"replaceFileLabel": "Substituir áudio",
|
|
62
|
+
"dropHint": "Arraste um ficheiro de áudio para aqui (máx. 25 MB). Os primeiros 20 segundos serão analisados.",
|
|
63
|
+
"presetHint": "Experimente os dois estudos sintéticos de vogais.",
|
|
64
|
+
"presetWarmLabel": "Estudo de vogal quente",
|
|
65
|
+
"presetBrightLabel": "Estudo de vogal brilhante",
|
|
66
|
+
"emptySampleLabel": "A aguardar áudio",
|
|
67
|
+
"readySampleLabel": "Placa espectral gerada",
|
|
68
|
+
"decodingSampleLabel": "A processar placa espectral",
|
|
69
|
+
"errorSampleLabel": "Não foi possível analisar a amostra",
|
|
70
|
+
"durationLabel": "Duração",
|
|
71
|
+
"ceilingHeading": "Teto de frequência",
|
|
72
|
+
"ceilingFourLabel": "4 kHz",
|
|
73
|
+
"ceilingSixLabel": "6 kHz",
|
|
74
|
+
"ceilingEightLabel": "8 kHz",
|
|
75
|
+
"stageLabel": "Mosaico de espectrogramas espelhados",
|
|
76
|
+
"mirrorViewLabel": "Placas espelhadas",
|
|
77
|
+
"splitViewLabel": "Placas paralelas",
|
|
78
|
+
"playALabel": "Reproduzir amostra A",
|
|
79
|
+
"playBLabel": "Reproduzir amostra B",
|
|
80
|
+
"stopLabel": "Parar",
|
|
81
|
+
"timeAxisLabel": "Tempo",
|
|
82
|
+
"frequencyAxisLabel": "Frequência",
|
|
83
|
+
"intensityLegendLabel": "Tinta mais brilhante indica maior energia sonora",
|
|
84
|
+
"formantLegendLabel": "Guias de formantes estimados",
|
|
85
|
+
"sampleAEmptyCanvasLabel": "Carregue a amostra A para ver o espectro",
|
|
86
|
+
"sampleBEmptyCanvasLabel": "Carregue a amostra B para ver o espectro",
|
|
87
|
+
"comparisonHeading": "Análise de ressonâncias espectrais",
|
|
88
|
+
"comparisonNote": "Valores médios dos picos espectrais. As diferenças são medições físicas, não uma prova de identidade.",
|
|
89
|
+
"formantOneLabel": "Primeira região de ressonância (F1)",
|
|
90
|
+
"formantTwoLabel": "Segunda região de ressonância (F2)",
|
|
91
|
+
"formantThreeLabel": "Terceira região de ressonância (F3)",
|
|
92
|
+
"averageLabel": "Média",
|
|
93
|
+
"differenceLabel": "Diferença",
|
|
94
|
+
"unavailableLabel": "Não disponível",
|
|
95
|
+
"statusEmptyLabel": "Carregue uma amostra para começar",
|
|
96
|
+
"statusSingleLabel": "Uma placa pronta",
|
|
97
|
+
"statusReadyLabel": "Ambas as placas espectrais prontas",
|
|
98
|
+
"limitError": "O ficheiro excede o limite local de 25 MB.",
|
|
99
|
+
"decodeError": "O navegador não conseguiu descodificar o ficheiro.",
|
|
100
|
+
"browserError": "API Web Audio não disponível neste navegador.",
|
|
101
|
+
"educationalNote": "Ferramenta educativa. As guias de formantes não devem ser usadas para identificação forense de voz."
|
|
102
|
+
},
|
|
103
|
+
seo: [
|
|
104
|
+
{ type: 'title', text: "Como um espectrograma transforma som em imagem", level: 2 },
|
|
105
|
+
{ type: 'paragraph', html: "Um <strong>espectrograma de voz</strong> transforma uma gravação num mapa visual onde o tempo decorre no eixo horizontal e a frequência no vertical. Uma energia mais forte surge com cor mais brilhante. Isso torna as vogais sustentadas, harmónicos, silêncio e ressonâncias mais fáceis de observar do que numa forma de onda tradicional. Esta representação facilita a análise do sinal." },
|
|
106
|
+
{ type: 'paragraph', html: "O analisador divide o sinal em pequenos segmentos sobrepostos, aplica uma janela de Hamming e calcula a distribuição de energia por frequência via FFT. Um segmento curto permite situar precisamente um evento, enquanto a resolução em frequência mostra onde a energia se concentra. Devido ao princípio da incerteza, existe sempre um compromisso entre resolução temporal e frequencial. Estas configurações definem a nitidez." },
|
|
107
|
+
{ type: 'diagnostic', variant: 'info', title: "Processamento privado no navegador", html: "Visualize a frequência, tempo, intensidade e formantes de duas amostras de áudio de forma privada no seu navegador." },
|
|
108
|
+
{ type: 'stats', columns: 3, items: [
|
|
109
|
+
{ value: "Tempo", label: "Leitura da esquerda para a direita" },
|
|
110
|
+
{ value: "Hz", label: "Posição de frequência" },
|
|
111
|
+
{ value: "Energia", label: "Representada pelo brilho" }
|
|
112
|
+
] },
|
|
113
|
+
{ type: 'title', text: "Interpretar formantes com responsabilidade", level: 3 },
|
|
114
|
+
{ type: 'paragraph', html: "Os formantes são regiões de ressonância moldadas pelo trato vocal. F1 e F2 são usados na fonética para descrever a altura e o local de articulação das vogais. Este analisador rastreia picos suavizados em três regiões de frequência para que os utilizadores relacionem as bandas visíveis ao comportamento de F1, F2 e F3." },
|
|
115
|
+
{ type: 'paragraph', html: "A medição profissional de formantes utiliza normalmente uma codificação preditiva linear (LPC) ajustada ao falante. Os harmónicos do fundamental, ruído de fundo, reverberação e compressão de áudio podem deslocar estimativas simples. Utilize estas guias como referências didáticas e controle sempre o espectro subjacente." },
|
|
116
|
+
{ type: 'table', headers: ['Guide', 'Region', 'Meaning'], rows: [["F1","180 a 1000 Hz","Primeira região de ressonância, associada à abertura da vogal"],["F2","900 a 3000 Hz","Segunda região de ressonância, associada à posição da língua"],["F3","2000 a 4500 Hz","Região de ressonância superior, influenciada pelo trato vocal"]] },
|
|
117
|
+
{ type: 'title', text: "O impacto dos ajustes de frequência", level: 3 },
|
|
118
|
+
{ type: 'comparative', columns: 2, items: [
|
|
119
|
+
{ title: "Teto baixo (4 kHz)", description: "Melhor visualização de frequências baixas", points: ["Útil para vogais", "Pode excluir alta energia", "Não garante maior precisão"] },
|
|
120
|
+
{ title: "Teto alto (6/8 kHz)", description: "Mais detalhes superiores", highlight: true, points: ["Para vozes brilhantes", "Mostra fricativas", "Comprime bandas inferiores"] }
|
|
121
|
+
] },
|
|
122
|
+
{ type: 'title', text: "Comparação adequada entre duas amostras de voz", level: 3 },
|
|
123
|
+
{ type: 'paragraph', html: "A comparação entre duas placas é especialmente útil quando as gravações contêm a mesma vogal ou frase em condições acústicas semelhantes. As diferenças apresentadas são distâncias físicas absolutas. Não constituem uma percentagem de semelhança nem uma prova biométrica de identidade." },
|
|
124
|
+
{ type: 'list', items: ["<strong>Comparar o mesmo conteúdo falado:</strong> vogais ou palavras idênticas facilitam o contraste.","<strong>Harmonizar condições de gravação:</strong> o microfone e a acústica influenciam fortemente o espectro.","<strong>Ouvir com o cursor:</strong> relacione eventos visuais com o som exato.","<strong>Evitar afirmações de identidade:</strong> um espectrograma semelhante não prova a identidade do falante."] },
|
|
125
|
+
{ type: 'summary', title: "Resumo do analisador", items: ["Gerar um espectrograma de áudio localmente a partir de ficheiros compatíveis.","Explorar duas amostras em placas espelhadas ou paralelas.","Aprender como a energia espectral e os formantes variam.","Manter uma abordagem descritiva e pedagógica."] }
|
|
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,136 @@
|
|
|
1
|
+
import { bibliography } from '../bibliography';
|
|
2
|
+
import type { VoiceSpectrogramLocaleContent } from '../entry';
|
|
3
|
+
|
|
4
|
+
const slug = "analizator-spektrogrammy-golosa-onlajn";
|
|
5
|
+
const title = "Анализатор Спектрограммы Голоса Онлайн";
|
|
6
|
+
const description = "Визуализируйте частоту, время, интенсивность и форманты двух аудиозаписей локально и конфиденциально в вашем браузере.";
|
|
7
|
+
|
|
8
|
+
const howTo = [
|
|
9
|
+
{
|
|
10
|
+
"name": "Выберите два образца",
|
|
11
|
+
"text": "Загрузите файлы с компьютера или используйте синтетические тесты."
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"name": "Настройте предел частоты",
|
|
15
|
+
"text": "Выберите 4, 6 или 8 кГц в зависимости от голоса."
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"name": "Изучите спектрограмму",
|
|
19
|
+
"text": "Анализируйте время, частоты и форманты."
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"name": "Слушайте и сравнивайте",
|
|
23
|
+
"text": "Сравнивайте средние значения F1, F2 и F3."
|
|
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": "Перетащите аудиофайл сюда (макс. 25 МБ). Анализируются первые 20 секунд.",
|
|
63
|
+
"presetHint": "Попробуйте готовые примеры синтетических гласных.",
|
|
64
|
+
"presetWarmLabel": "Теплая гласная",
|
|
65
|
+
"presetBrightLabel": "Яркая гласная",
|
|
66
|
+
"emptySampleLabel": "Ожидание аудио",
|
|
67
|
+
"readySampleLabel": "Спектральная пластина готова",
|
|
68
|
+
"decodingSampleLabel": "Обработка спектрограммы",
|
|
69
|
+
"errorSampleLabel": "Не удалось проанализировать образец",
|
|
70
|
+
"durationLabel": "Длительность",
|
|
71
|
+
"ceilingHeading": "Верхний предел частоты",
|
|
72
|
+
"ceilingFourLabel": "4 кГц",
|
|
73
|
+
"ceilingSixLabel": "6 кГц",
|
|
74
|
+
"ceilingEightLabel": "8 кГц",
|
|
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": "Файл превышает локальный лимит 25 МБ.",
|
|
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: "Анализатор делит сигнал на короткие перекрывающиеся отрезки, применяет окно Хэмминга и вычисляет распределение энергии по частотам с помощью БПФ. Короткий отрезок определяет точное время события, а частотное разрешение показывает концентрацию энергии. Из-за принципа неопределенности всегда существует компромисс между временным и частотным разрешением. Эти параметры определяют итоговую четкость и детализацию графического отображения речевых сигналов в реальном времени." },
|
|
107
|
+
|
|
108
|
+
{ type: 'diagnostic', variant: 'info', title: "Конфиденциальная обработка в браузере", html: "Визуализируйте частоту, время, интенсивность и форманты двух аудиозаписей локально и конфиденциально в вашем браузере. Все исходные файлы остаются строго на вашем компьютере без передачи на серверы." },
|
|
109
|
+
{ type: 'stats', columns: 3, items: [
|
|
110
|
+
{ value: "Время", label: "Чтение слева направо" },
|
|
111
|
+
{ value: "Гц", label: "Позиция по частоте" },
|
|
112
|
+
{ value: "Энергия", label: "Отображается яркостью" }
|
|
113
|
+
] },
|
|
114
|
+
{ type: 'title', text: "Правильное чтение формант", level: 3 },
|
|
115
|
+
{ type: 'paragraph', html: "Форманты - это области резонанса, формируемые речевым трактом. F1 и F2 используются в фонетике для детального описания подъема и ряда гласных. Этот анализатор отслеживает сглаженные пики в трех частотных областях, помогая наглядно сопоставить видимые полосы с поведением F1, F2 и F3 в удобном формате." },
|
|
116
|
+
{ type: 'paragraph', html: "Профессиональное измерение формант обычно использует линейное предиктивное кодирование (LPC), настроенное под диктора. Гармоники основного тона, реверберация и фоновый шум могут смещать простые оценки. Используйте эти линии как учебные ориентиры и всегда проверяйте фоновую спектрограмму для визуальной верификации частотных наложений." },
|
|
117
|
+
{ type: 'table', headers: ['Guide', 'Region', 'Meaning'], rows: [["F1","от 180 до 1000 Гц","Первая область резонанса, связанная с подъемом гласной"],["F2","от 900 до 3000 Гц","Вторая область резонанса, связанная с рядом гласной"],["F3","от 2000 до 4500 Гц","Верхняя область резонанса, зависящая от геометрии тракта"]] },
|
|
118
|
+
{ type: 'title', text: "Влияние настроек частоты на результат", level: 3 },
|
|
119
|
+
{ type: 'comparative', columns: 2, items: [
|
|
120
|
+
{ title: "Низкий предел (4 кГц)", description: "Лучше видны низкие частоты", points: ["Полезно для гласных", "Может исключить высокую энергию", "Не гарантирует высокую точность"] },
|
|
121
|
+
{ title: "Высокий предел (6/8 кГц)", description: "Больше деталей вверху", highlight: true, points: ["Для ярких голосов", "Показывает щелевые звуки", "Сжимает нижние полосы"] }
|
|
122
|
+
] },
|
|
123
|
+
{ type: 'title', text: "Корректное сравнение двух аудиозаписей", level: 3 },
|
|
124
|
+
{ type: 'paragraph', html: "Сравнение двух образцов наиболее полезно, когда обе записи содержат одинаковые гласные или фразы в схожих акустических условиях. Отображаемые различия являются физическими расстояниями между спектральными пиками. Они не составляют процент сходства и не служат биометрическим доказательством идентичности." },
|
|
125
|
+
{ type: 'list', items: ["<strong>Сравнивайте одинаковый речевой материал:</strong> повторяющиеся гласные или слова легче сравнивать.","<strong>Соблюдайте условия записи:</strong> микрофон и акустика помещения сильно влияют на спектр.","<strong>Слушайте с курсором:</strong> связывайте визуальные события с точным моментом звука.","<strong>Избегайте утверждений об идентичности:</strong> похожая спектрограмма не доказывает идентичность диктора."] },
|
|
126
|
+
{ type: 'summary', title: "Резюме анализатора", items: ["Создавайте спектрограмму локально из совместимых файлов.","Изучайте два образца на зеркальных или параллельных пластинах.","Изучайте изменения спектральной энергии и формантных областей.","Сохраняйте описательный и учебный подход."] }
|
|
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
|
+
};
|