@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.
Files changed (169) hide show
  1. package/package.json +2 -1
  2. package/src/category/index.ts +63 -59
  3. package/src/category/seo.astro +1 -1
  4. package/src/components/PreviewNavSidebar.astro +1 -1
  5. package/src/components/PreviewToolbar.astro +1 -1
  6. package/src/data.ts +1 -1
  7. package/src/entries.ts +74 -68
  8. package/src/env.d.ts +1 -1
  9. package/src/index.ts +33 -31
  10. package/src/pages/[locale]/[slug].astro +161 -159
  11. package/src/pages/[locale].astro +8 -5
  12. package/src/pages/index.astro +1 -1
  13. package/src/tests/bibliography_wellformed_export.test.ts +46 -0
  14. package/src/tests/diacritics_density.test.ts +1 -1
  15. package/src/tests/faq_count.test.ts +19 -19
  16. package/src/tests/i18n_coverage.test.ts +36 -36
  17. package/src/tests/inverted_punctuation.test.ts +1 -1
  18. package/src/tests/locale_completeness.test.ts +2 -2
  19. package/src/tests/mocks/astro_mock.js +1 -1
  20. package/src/tests/no_h1_in_components.test.ts +1 -1
  21. package/src/tests/script_density.test.ts +94 -94
  22. package/src/tests/seo_length.test.ts +46 -46
  23. package/src/tests/seo_parity.test.ts +2 -7
  24. package/src/tests/seo_translation_completeness.test.ts +68 -0
  25. package/src/tests/seo_wellformed_export.test.ts +65 -0
  26. package/src/tests/tool_validation.test.ts +2 -2
  27. package/src/tests/translation_copy.test.ts +23 -24
  28. package/src/tool/bloodstain-pattern-origin-analyzer/component.astro +9 -9
  29. package/src/tool/bloodstain-pattern-origin-analyzer/i18n/zh.ts +1 -1
  30. package/src/tool/dna-profile-match-probability-lab/bibliography.astro +14 -0
  31. package/src/tool/dna-profile-match-probability-lab/bibliography.ts +16 -0
  32. package/src/tool/dna-profile-match-probability-lab/component.astro +121 -0
  33. package/src/tool/dna-profile-match-probability-lab/controller.ts +159 -0
  34. package/src/tool/dna-profile-match-probability-lab/dna-profile-match-probability-lab.css +485 -0
  35. package/src/tool/dna-profile-match-probability-lab/dom-views.ts +93 -0
  36. package/src/tool/dna-profile-match-probability-lab/entry.ts +29 -0
  37. package/src/tool/dna-profile-match-probability-lab/evaluator.ts +19 -0
  38. package/src/tool/dna-profile-match-probability-lab/i18n/de.ts +43 -0
  39. package/src/tool/dna-profile-match-probability-lab/i18n/en.ts +196 -0
  40. package/src/tool/dna-profile-match-probability-lab/i18n/es.ts +40 -0
  41. package/src/tool/dna-profile-match-probability-lab/i18n/fr.ts +10 -0
  42. package/src/tool/dna-profile-match-probability-lab/i18n/id.ts +41 -0
  43. package/src/tool/dna-profile-match-probability-lab/i18n/it.ts +10 -0
  44. package/src/tool/dna-profile-match-probability-lab/i18n/ja.ts +40 -0
  45. package/src/tool/dna-profile-match-probability-lab/i18n/ko.ts +40 -0
  46. package/src/tool/dna-profile-match-probability-lab/i18n/nl.ts +29 -0
  47. package/src/tool/dna-profile-match-probability-lab/i18n/pl.ts +10 -0
  48. package/src/tool/dna-profile-match-probability-lab/i18n/pt.ts +41 -0
  49. package/src/tool/dna-profile-match-probability-lab/i18n/ru.ts +29 -0
  50. package/src/tool/dna-profile-match-probability-lab/i18n/sv.ts +41 -0
  51. package/src/tool/dna-profile-match-probability-lab/i18n/tr.ts +10 -0
  52. package/src/tool/dna-profile-match-probability-lab/i18n/zh.ts +29 -0
  53. package/src/tool/dna-profile-match-probability-lab/index.ts +11 -0
  54. package/src/tool/dna-profile-match-probability-lab/localize.ts +107 -0
  55. package/src/tool/dna-profile-match-probability-lab/logic.test.ts +56 -0
  56. package/src/tool/dna-profile-match-probability-lab/logic.ts +139 -0
  57. package/src/tool/dna-profile-match-probability-lab/seo.astro +15 -0
  58. package/src/tool/dna-profile-match-probability-lab/storage.ts +26 -0
  59. package/src/tool/dna-profile-match-probability-lab/ui.ts +3 -0
  60. package/src/tool/fire-pattern-origin-analyzer/component.astro +1 -1
  61. package/src/tool/fire-pattern-origin-analyzer/i18n/zh.ts +5 -1
  62. package/src/tool/fire-pattern-origin-analyzer/logic.ts +9 -2
  63. package/src/tool/fire-pattern-origin-analyzer/view-bindings.ts +8 -4
  64. package/src/tool/fire-pattern-origin-analyzer/view-model.ts +6 -2
  65. package/src/tool/forensic-age-estimator/bibliography.astro +1 -1
  66. package/src/tool/forensic-age-estimator/component.astro +1 -1
  67. package/src/tool/forensic-age-estimator/entry.ts +17 -17
  68. package/src/tool/forensic-age-estimator/i18n/de.ts +244 -244
  69. package/src/tool/forensic-age-estimator/i18n/en.ts +244 -244
  70. package/src/tool/forensic-age-estimator/i18n/es.ts +244 -244
  71. package/src/tool/forensic-age-estimator/i18n/fr.ts +244 -244
  72. package/src/tool/forensic-age-estimator/i18n/id.ts +244 -244
  73. package/src/tool/forensic-age-estimator/i18n/it.ts +244 -244
  74. package/src/tool/forensic-age-estimator/i18n/nl.ts +244 -244
  75. package/src/tool/forensic-age-estimator/i18n/pl.ts +244 -244
  76. package/src/tool/forensic-age-estimator/i18n/pt.ts +244 -244
  77. package/src/tool/forensic-age-estimator/i18n/ru.ts +244 -244
  78. package/src/tool/forensic-age-estimator/i18n/sv.ts +244 -244
  79. package/src/tool/forensic-age-estimator/i18n/tr.ts +244 -244
  80. package/src/tool/forensic-age-estimator/i18n/zh.ts +245 -245
  81. package/src/tool/forensic-age-estimator/index.ts +1 -1
  82. package/src/tool/forensic-age-estimator/seo.astro +1 -1
  83. package/src/tool/forensic-blood-test-simulator/component.astro +1 -1
  84. package/src/tool/forensic-fiber-comparison-microscope/component.astro +1 -1
  85. package/src/tool/forensic-fiber-comparison-microscope/render.ts +1 -1
  86. package/src/tool/forensic-fiber-comparison-microscope/view.ts +1 -1
  87. package/src/tool/forensic-fingerprint-minutiae-identifier/component.astro +2 -2
  88. package/src/tool/forensic-fingerprint-minutiae-identifier/i18n/ja.ts +2 -1
  89. package/src/tool/forensic-fingerprint-minutiae-identifier/i18n/zh.ts +2 -0
  90. package/src/tool/forensic-fingerprint-minutiae-identifier/renderer.ts +9 -8
  91. package/src/tool/forensic-glass-becke-line-simulator/component.astro +1 -1
  92. package/src/tool/forensic-glass-becke-line-simulator/view.ts +8 -6
  93. package/src/tool/forensic-image-authenticity-analyzer/component.astro +1 -1
  94. package/src/tool/forensic-image-authenticity-analyzer/i18n/de.ts +105 -105
  95. package/src/tool/forensic-image-authenticity-analyzer/i18n/en.ts +105 -105
  96. package/src/tool/forensic-image-authenticity-analyzer/i18n/es.ts +105 -105
  97. package/src/tool/forensic-image-authenticity-analyzer/i18n/fr.ts +105 -105
  98. package/src/tool/forensic-image-authenticity-analyzer/i18n/id.ts +95 -90
  99. package/src/tool/forensic-image-authenticity-analyzer/i18n/it.ts +105 -105
  100. package/src/tool/forensic-image-authenticity-analyzer/i18n/ja.ts +7 -2
  101. package/src/tool/forensic-image-authenticity-analyzer/i18n/ko.ts +4 -1
  102. package/src/tool/forensic-image-authenticity-analyzer/i18n/nl.ts +95 -92
  103. package/src/tool/forensic-image-authenticity-analyzer/i18n/pl.ts +95 -92
  104. package/src/tool/forensic-image-authenticity-analyzer/i18n/pt.ts +105 -105
  105. package/src/tool/forensic-image-authenticity-analyzer/i18n/ru.ts +97 -92
  106. package/src/tool/forensic-image-authenticity-analyzer/i18n/sv.ts +97 -93
  107. package/src/tool/forensic-image-authenticity-analyzer/i18n/tr.ts +98 -93
  108. package/src/tool/forensic-image-authenticity-analyzer/i18n/zh.ts +11 -0
  109. package/src/tool/forensic-microcrystal-drug-simulator/component.astro +1 -1
  110. package/src/tool/forensic-sex-determinator/component.astro +3 -2
  111. package/src/tool/forensic-stature-estimator/component.astro +1 -1
  112. package/src/tool/forensic-stature-estimator/i18n/id.ts +4 -0
  113. package/src/tool/forensic-stature-estimator/i18n/nl.ts +4 -0
  114. package/src/tool/forensic-stature-estimator/i18n/ru.ts +4 -0
  115. package/src/tool/forensic-tlc-ink-simulator/component.astro +1 -1
  116. package/src/tool/forensic-tlc-ink-simulator/i18n/zh.ts +1 -0
  117. package/src/tool/forensic-toolmark-striation-matcher/component.astro +1 -1
  118. package/src/tool/forensic-toolmark-striation-matcher/logic.ts +1 -1
  119. package/src/tool/forensic-toolmark-striation-matcher/renderer.ts +7 -6
  120. package/src/tool/forensic-toolmark-striation-matcher/view.ts +19 -20
  121. package/src/tool/gsr-dispersion-calculator/component.astro +1 -1
  122. package/src/tool/gsr-dispersion-calculator/logic.ts +1 -1
  123. package/src/tool/time-of-death-algor-mortis-calculator/entry.ts +2 -0
  124. package/src/tool/voice-spectrogram-analyzer/audio-runtime.ts +75 -0
  125. package/src/tool/voice-spectrogram-analyzer/bibliography.astro +14 -0
  126. package/src/tool/voice-spectrogram-analyzer/bibliography.ts +16 -0
  127. package/src/tool/voice-spectrogram-analyzer/component.astro +116 -0
  128. package/src/tool/voice-spectrogram-analyzer/controller.ts +219 -0
  129. package/src/tool/voice-spectrogram-analyzer/dom-views.ts +204 -0
  130. package/src/tool/voice-spectrogram-analyzer/entry.ts +31 -0
  131. package/src/tool/voice-spectrogram-analyzer/evaluator.ts +13 -0
  132. package/src/tool/voice-spectrogram-analyzer/fft.ts +64 -0
  133. package/src/tool/voice-spectrogram-analyzer/i18n/de.ts +135 -0
  134. package/src/tool/voice-spectrogram-analyzer/i18n/en.ts +122 -0
  135. package/src/tool/voice-spectrogram-analyzer/i18n/es.ts +122 -0
  136. package/src/tool/voice-spectrogram-analyzer/i18n/fr.ts +135 -0
  137. package/src/tool/voice-spectrogram-analyzer/i18n/id.ts +136 -0
  138. package/src/tool/voice-spectrogram-analyzer/i18n/it.ts +135 -0
  139. package/src/tool/voice-spectrogram-analyzer/i18n/ja.ts +135 -0
  140. package/src/tool/voice-spectrogram-analyzer/i18n/ko.ts +135 -0
  141. package/src/tool/voice-spectrogram-analyzer/i18n/nl.ts +136 -0
  142. package/src/tool/voice-spectrogram-analyzer/i18n/pl.ts +136 -0
  143. package/src/tool/voice-spectrogram-analyzer/i18n/pt.ts +135 -0
  144. package/src/tool/voice-spectrogram-analyzer/i18n/ru.ts +136 -0
  145. package/src/tool/voice-spectrogram-analyzer/i18n/sv.ts +136 -0
  146. package/src/tool/voice-spectrogram-analyzer/i18n/tr.ts +136 -0
  147. package/src/tool/voice-spectrogram-analyzer/i18n/zh.ts +135 -0
  148. package/src/tool/voice-spectrogram-analyzer/index.ts +11 -0
  149. package/src/tool/voice-spectrogram-analyzer/logic.test.ts +46 -0
  150. package/src/tool/voice-spectrogram-analyzer/logic.ts +163 -0
  151. package/src/tool/voice-spectrogram-analyzer/seo.astro +15 -0
  152. package/src/tool/voice-spectrogram-analyzer/storage.ts +33 -0
  153. package/src/tool/voice-spectrogram-analyzer/ui.ts +49 -0
  154. package/src/tool/voice-spectrogram-analyzer/voice-spectrogram-analyzer.css +547 -0
  155. package/src/tool/widmark-alcohol-simulator/component.astro +1 -1
  156. package/src/tool/widmark-alcohol-simulator/i18n/de.ts +5 -0
  157. package/src/tool/widmark-alcohol-simulator/i18n/fr.ts +2 -1
  158. package/src/tool/widmark-alcohol-simulator/i18n/id.ts +1 -0
  159. package/src/tool/widmark-alcohol-simulator/i18n/it.ts +4 -1
  160. package/src/tool/widmark-alcohol-simulator/i18n/ja.ts +4 -1
  161. package/src/tool/widmark-alcohol-simulator/i18n/nl.ts +5 -1
  162. package/src/tool/widmark-alcohol-simulator/i18n/pl.ts +5 -1
  163. package/src/tool/widmark-alcohol-simulator/i18n/pt.ts +5 -1
  164. package/src/tool/widmark-alcohol-simulator/i18n/ru.ts +4 -1
  165. package/src/tool/widmark-alcohol-simulator/i18n/sv.ts +5 -1
  166. package/src/tool/widmark-alcohol-simulator/i18n/tr.ts +4 -1
  167. package/src/tool/widmark-alcohol-simulator/i18n/zh.ts +4 -1
  168. package/src/tools.ts +39 -35
  169. package/src/types.ts +4 -4
@@ -0,0 +1,135 @@
1
+ import { bibliography } from '../bibliography';
2
+ import type { VoiceSpectrogramLocaleContent } from '../entry';
3
+
4
+ const slug = "stimmen-spektrogramm-analysator-online";
5
+ const title = "Stimmen Spektrogramm Analysator Online";
6
+ const description = "Visualisieren Sie Frequenz, Zeit, Intensität und Formanten von zwei Audiodateien lokal und privat in Ihrem Browser.";
7
+
8
+ const howTo = [
9
+ {
10
+ "name": "Zwei Proben wählen",
11
+ "text": "Laden Sie lokale Audiodateien oder nutzen Sie die synthetischen Vokalstudien."
12
+ },
13
+ {
14
+ "name": "Frequenz-Obergrenze festlegen",
15
+ "text": "Wählen Sie 4, 6 oder 8 kHz passend zum Stimmumfang."
16
+ },
17
+ {
18
+ "name": "Spektralplatten ablesen",
19
+ "text": "Inspezieren Sie Zeit, Frequenz, Intensität und Formanten."
20
+ },
21
+ {
22
+ "name": "Anhören und vergleichen",
23
+ "text": "Spielen Sie die Proben ab und vergleichen Sie die Durchschnittswerte."
24
+ }
25
+ ];
26
+
27
+ const faq = [
28
+ {
29
+ "question": "Was zeigt ein Spektrogramm der Stimme?",
30
+ "answer": "Ein Spektrogramm stellt Zeit auf der horizontalen Achse, Frequenz auf der vertikalen Achse und Signalintensität durch Helligkeit dar."
31
+ },
32
+ {
33
+ "question": "Werden meine Aufnahmen hochgeladen?",
34
+ "answer": "Nein. Alle Berechnungen erfolgen vollständig lokal im Browser."
35
+ },
36
+ {
37
+ "question": "Was bedeuten F1, F2 und F3?",
38
+ "answer": "Es sind Schätzungen der ersten drei Hauptresonanzen des Vokaltrakts."
39
+ },
40
+ {
41
+ "question": "Kann das Tool einen Sprecher identifizieren?",
42
+ "answer": "Nein. Visuelle Ähnlichkeiten ersetzen kein forensisches Gutachten."
43
+ },
44
+ {
45
+ "question": "Warum ändern sich die Formanten bei anderer Frequenzgrenze?",
46
+ "answer": "Die Wahl des Frequenzbereichs verändert die sichtbaren Resonanzspitzen."
47
+ }
48
+ ];
49
+
50
+ export const content: VoiceSpectrogramLocaleContent = {
51
+ slug,
52
+ title,
53
+ description,
54
+ ui: {
55
+ "privacyBadge": "Nur lokal",
56
+ "privacyNote": "Ihre Aufnahmen bleiben auf Ihrem Gerät. Analyse und Dekodierung laufen direkt im Browser.",
57
+ "loadHeading": "Zwei Audiodateien zum Vergleichen laden",
58
+ "sampleALabel": "Probe A",
59
+ "sampleBLabel": "Probe B",
60
+ "chooseFileLabel": "Audio auswählen",
61
+ "replaceFileLabel": "Audio ersetzen",
62
+ "dropHint": "Ziehen Sie eine Audiodatei hierher (max. 25 MB). Die ersten 20 Sekunden werden analysiert.",
63
+ "presetHint": "Starten Sie sofort mit den zwei synthetischen Vokalstudien.",
64
+ "presetWarmLabel": "Warme Vokalstudie",
65
+ "presetBrightLabel": "Helle Vokalstudie",
66
+ "emptySampleLabel": "Warten auf Audio",
67
+ "readySampleLabel": "Spektralplatte erstellt",
68
+ "decodingSampleLabel": "Spektralplatte wird berechnet",
69
+ "errorSampleLabel": "Probe konnte nicht analysiert werden",
70
+ "durationLabel": "Dauer",
71
+ "ceilingHeading": "Frequenz-Obergrenze",
72
+ "ceilingFourLabel": "4 kHz",
73
+ "ceilingSixLabel": "6 kHz",
74
+ "ceilingEightLabel": "8 kHz",
75
+ "stageLabel": "Spiegel-Spektrogramm-Bühne",
76
+ "mirrorViewLabel": "Gegenübergestellt",
77
+ "splitViewLabel": "Parallel",
78
+ "playALabel": "Probe A abspielen",
79
+ "playBLabel": "Probe B abspielen",
80
+ "stopLabel": "Stoppen",
81
+ "timeAxisLabel": "Zeit",
82
+ "frequencyAxisLabel": "Frequenz",
83
+ "intensityLegendLabel": "Hellere Tinte bedeutet höhere Energie",
84
+ "formantLegendLabel": "Geschätzte Formant-Linien",
85
+ "sampleAEmptyCanvasLabel": "Laden Sie Probe A für das Spektrogramm",
86
+ "sampleBEmptyCanvasLabel": "Laden Sie Probe B für das Spektrogramm",
87
+ "comparisonHeading": "Analyse der Resonanzmuster",
88
+ "comparisonNote": "Durchschnittliche Spektralspitzen in stimmhaften Abschnitten. Die Abweichungen sind Messwerte, kein Übereinstimmungsprozentsatz.",
89
+ "formantOneLabel": "Erste Resonanzregion (F1)",
90
+ "formantTwoLabel": "Zweite Resonanzregion (F2)",
91
+ "formantThreeLabel": "Dritte Resonanzregion (F3)",
92
+ "averageLabel": "Durchschnitt",
93
+ "differenceLabel": "Differenz",
94
+ "unavailableLabel": "Nicht verfügbar",
95
+ "statusEmptyLabel": "Laden Sie eine Probe zum Starten",
96
+ "statusSingleLabel": "Eine Spektralplatte ist bereit",
97
+ "statusReadyLabel": "Beide Spektralplatten sind bereit",
98
+ "limitError": "Die Datei überschreitet das lokale Limit von 25 MB.",
99
+ "decodeError": "Das Audioformat konnte vom Browser nicht dekodiert werden.",
100
+ "browserError": "Web Audio API ist in diesem Browser nicht verfügbar.",
101
+ "educationalNote": "Didaktisches Signalwerkzeug. Formantlinien dienen der Veranschaulichung und sind nicht für forensische Gutachten geeignet."
102
+ },
103
+ seo: [
104
+ { type: 'title', text: "Wie ein Spektrogramm Schall in ein visuelles Bild verwandelt", level: 2 },
105
+ { type: 'paragraph', html: "Ein <strong>Stimmen-Spektrogramm</strong> verwandelt eine Aufnahme in eine Karte mit Zeit auf der horizontalen Achse und Frequenz auf der vertikalen Achse. Stärkere Energie erscheint als hellere Farbe. Dies macht anhaltende Vokale, Obereltöne, Stille und Resonanzen leichter erkennbar als in einer einfachen Wellenform. Die Visualisierung ermöglicht eine direkte und detaillierte Analyse von Sprachmustern im Frequenzbereich. Dadurch lassen sich akustische Merkmale präzise untersuchen." },
106
+ { type: 'paragraph', html: "Der Analysator unterteilt das Signal in kurze überlappende Abschnitte, wendet ein Hamming-Fenster an und berechnet die Energieverteilung über die Frequenzen mittels FFT. Ein kurzer Abschnitt bestimmt den genauen Zeitpunkt, während die Frequenzauflösung zeigt, wo sich die Energie konzentriert. Aufgrund der Unschärferelation der Signalverarbeitung gibt es immer einen Kompromiss zwischen Zeit- und Frequenzauflösung. Diese Eigenschaften bestimmen die visuelle Schärfe." },
107
+ { type: 'diagnostic', variant: 'info', title: "Private Verarbeitung im Browser", html: "Visualisieren Sie Frequenz, Zeit, Intensität und Formanten von zwei Audiodateien lokal und privat in Ihrem Browser." },
108
+ { type: 'stats', columns: 3, items: [
109
+ { value: "Zeit", label: "Von links nach rechts lesen" },
110
+ { value: "Hz", label: "Frequenzposition" },
111
+ { value: "Energie", label: "Als Helligkeit dargestellt" }
112
+ ] },
113
+ { type: 'title', text: "Formanten lesen ohne Ergebnisse zu übertreiben", level: 3 },
114
+ { type: 'paragraph', html: "Formanten sind Resonanzbereiche, die durch den Vokaltrakt geformt werden. F1 und F2 werden in der Phonetik verwendet, um die Vokalhöhe und den Artikulationsort zu beschreiben. Dieser Analysator verfolgt breite Spektralspitzen in drei Frequenzbereichen, damit Benutzer sichtbare Bänder mit dem Verhalten von F1, F2 und F3 verbinden können." },
115
+ { type: 'paragraph', html: "Eine professionelle Formantmessung nutzt normalerweise ein gewichtetes Linear Prediction Coding Verfahren und passt die Frequenzobergrenze an den Sprecher an. Grundtonharmonische, Nasalierung, Raumhall und Hintergrundgeräusche können einfache Schätzungen verschieben. Nutzen Sie diese Linien als didaktische Orientierung und prüfen Sie stets das visuelle Spektrum im Hintergrund." },
116
+ { type: 'table', headers: ['Guide', 'Region', 'Meaning'], rows: [["F1","180 bis 1000 Hz","Erste Resonanzregion, verbunden mit Vokalöffnung"],["F2","900 bis 3000 Hz","Zweite Resonanzregion, verbunden mit der Zungenposition"],["F3","2000 bis 4500 Hz","Höhere Resonanzregion, beeinflusst durch die Geometrie des Vokaltrakts"]] },
117
+ { type: 'title', text: "Warum Frequenzgrenzen das Bild verändern", level: 3 },
118
+ { type: 'comparative', columns: 2, items: [
119
+ { title: "Niedrige Grenze (4 kHz)", description: "Bessere Sicht auf untere Frequenzen", points: ["Nützlich für Vokale", "Kann hohe Energie ausschließen", "Garantiert keine höhere Genauigkeit"] },
120
+ { title: "Hohe Grenze (6/8 kHz)", description: "Mehr obere Details", highlight: true, points: ["Für helle Stimmen", "Zeigt Reibelaute", "Komprimiert untere Bänder"] }
121
+ ] },
122
+ { type: 'title', text: "Ein verantwortungsvoller Vergleich zweier Proben", level: 3 },
123
+ { type: 'paragraph', html: "Der Vergleich zweier Platten ist am nützlichsten, wenn die Aufnahmen denselben Vokal oder Satz unter ähnlichen akustischen Bedingungen enthalten. Die angezeigten Abweichungen sind absolute Differenzen zwischen Spektralspitzen. Sie stellen kein Übereinstimmungsprozent und keinen biometrischen Identitätsbeweis dar." },
124
+ { type: 'list', items: ["<strong>Gleichen Inhalt vergleichen:</strong> Wiederholte Vokale oder Wörter lassen sich leichter vergleichen als unterschiedliche Sätze.","<strong>Ähnliche Aufnahmebedingungen nutzen:</strong> Mikrofon und Raumakustik beeinflussen das Spektrum maßgeblich.","<strong>Mit dem Cursor zuhören:</strong> Verbinden Sie visuelle Ereignisse mit dem exakten Klangmoment.","<strong>Keine Identitätsansprüche stellen:</strong> Ein ähnlich aussehendes Spektrogramm beweist keine Sprecheridentität."] },
125
+ { type: 'summary', title: "Zusammenfassung des Analysators", items: ["Erstellen Sie ein Audiospektrogramm lokal aus dateibasierten Formaten.","Erkunden Sie zwei Proben in gespiegelten oder parallelen Platten.","Lernen Sie, wie sich spektrale Energie und Formantbereiche verändern.","Halten Sie Vergleiche beschreibend und didaktisch anstatt forensisch."] }
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,122 @@
1
+ import { bibliography } from '../bibliography';
2
+ import type { VoiceSpectrogramLocaleContent } from '../entry';
3
+
4
+ const slug = 'voice-spectrogram-analyzer-online';
5
+ const title = 'Voice Spectrogram Analyzer Online';
6
+ const description = 'Reveal the frequency, time, intensity, and estimated formant patterns of two audio samples privately in your browser.';
7
+
8
+ const howTo = [
9
+ { name: 'Choose Two Audio Samples', text: 'Load one or two local audio files, drag them onto the sample chambers, or begin with the included synthetic vowel studies.' },
10
+ { name: 'Set the Frequency Ceiling', text: 'Choose a 4, 6, or 8 kHz ceiling to frame the frequencies that matter for the material and voice range you are studying.' },
11
+ { name: 'Read the Spectral Plates', text: 'Inspect time from left to right, frequency vertically, intensity as brightness, and the three fine guides as educational formant peak estimates.' },
12
+ { name: 'Listen and Compare', text: 'Play either sample to move the synchronized cursor, then compare average F1, F2, and F3 estimates without treating the result as speaker identification.' }
13
+ ];
14
+
15
+ const faq = [
16
+ { question: 'What does a voice spectrogram show?', answer: 'A spectrogram maps time horizontally, frequency vertically, and signal intensity through color brightness. Sustained speech resonances often appear as horizontal energy bands.' },
17
+ { question: 'Are my audio recordings uploaded?', answer: 'No. Audio decoding, spectral analysis, visualization, and playback happen locally in the browser. The tool does not send the selected files to a server.' },
18
+ { question: 'What are the F1, F2, and F3 guides?', answer: 'They are educational estimates of three broad spectral envelope peaks. F1 and F2 are commonly used to discuss vowel height and vowel place, while F3 can reflect additional vocal tract resonances.' },
19
+ { question: 'Can this analyzer identify a speaker?', answer: 'No. Visual resemblance or formant proximity cannot establish identity. Forensic voice comparison requires validated methods, suitable recordings, uncertainty assessment, and qualified expert interpretation.' },
20
+ { question: 'Why can formant estimates change with the ceiling?', answer: 'The selected frequency range changes which spectral peaks are available and how they are separated. Speaker anatomy, vowel, recording quality, pitch, and analysis settings also affect estimates.' }
21
+ ];
22
+
23
+ export const content: VoiceSpectrogramLocaleContent = {
24
+ slug,
25
+ title,
26
+ description,
27
+ ui: {
28
+ privacyBadge: 'Local only',
29
+ privacyNote: 'Your recordings stay on this device. Decoding and analysis run inside the browser.',
30
+ loadHeading: 'Bring two sounds into the light',
31
+ sampleALabel: 'Sample A',
32
+ sampleBLabel: 'Sample B',
33
+ chooseFileLabel: 'Choose audio',
34
+ replaceFileLabel: 'Replace audio',
35
+ dropHint: 'Drop an audio file here, up to 25 MB. The first 20 seconds are analyzed.',
36
+ presetHint: 'Start instantly with the two synthetic vowel studies.',
37
+ presetWarmLabel: 'Warm vowel study',
38
+ presetBrightLabel: 'Bright vowel study',
39
+ emptySampleLabel: 'Waiting for audio',
40
+ readySampleLabel: 'Spectral plate revealed',
41
+ decodingSampleLabel: 'Developing the spectral plate',
42
+ errorSampleLabel: 'The sample could not be analyzed',
43
+ durationLabel: 'Duration',
44
+ ceilingHeading: 'Frequency ceiling',
45
+ ceilingFourLabel: '4 kHz',
46
+ ceilingSixLabel: '6 kHz',
47
+ ceilingEightLabel: '8 kHz',
48
+ stageLabel: 'Mirrored voice spectrogram stage',
49
+ mirrorViewLabel: 'Mirror plates',
50
+ splitViewLabel: 'Parallel plates',
51
+ playALabel: 'Play sample A',
52
+ playBLabel: 'Play sample B',
53
+ stopLabel: 'Stop',
54
+ timeAxisLabel: 'Time',
55
+ frequencyAxisLabel: 'Frequency',
56
+ intensityLegendLabel: 'Brighter ink means stronger energy',
57
+ formantLegendLabel: 'Estimated formant guides',
58
+ sampleAEmptyCanvasLabel: 'Load sample A to reveal its spectrum',
59
+ sampleBEmptyCanvasLabel: 'Load sample B to reveal its spectrum',
60
+ comparisonHeading: 'Read the resonant fingerprints',
61
+ comparisonNote: 'These values describe average spectral peak positions across voiced frames. Differences are measurements, not a similarity score or identity conclusion.',
62
+ formantOneLabel: 'First resonance region',
63
+ formantTwoLabel: 'Second resonance region',
64
+ formantThreeLabel: 'Third resonance region',
65
+ averageLabel: 'Average',
66
+ differenceLabel: 'Gap',
67
+ unavailableLabel: 'Not available',
68
+ statusEmptyLabel: 'Load a sample to begin',
69
+ statusSingleLabel: 'One plate is ready',
70
+ statusReadyLabel: 'Two spectral plates are ready',
71
+ limitError: 'This file is larger than the 25 MB local analysis limit.',
72
+ decodeError: 'This browser could not decode the selected audio format.',
73
+ browserError: 'Web Audio is unavailable in this browser.',
74
+ educationalNote: 'Educational signal visualization only. Formant guides use smoothed spectral peak regions, not a validated LPC workflow, and must not be used for speaker identification.'
75
+ },
76
+ seo: [
77
+ { type: 'title', text: 'How a Voice Spectrogram Turns Sound Into a Visible Landscape', level: 2 },
78
+ { type: 'paragraph', html: 'A <strong>voice spectrogram</strong> transforms a recording into a map with time on the horizontal axis and frequency on the vertical axis. Stronger energy appears as brighter color. This makes sustained vowels, harmonics, silence, noise, and changing resonances easier to explore than they are in a waveform alone.' },
79
+ { type: 'paragraph', html: 'The analyzer divides the signal into short overlapping frames, applies a Hamming window, and transforms each frame from amplitude over time into energy by frequency. A short frame preserves when a sound happened, while its frequency bins reveal where energy is concentrated. Because every spectrogram balances time resolution against frequency resolution, narrow transients and stable vowels can never both be represented with unlimited precision. The display should therefore be read as a measured view of the chosen settings, not as a perfect picture of the original pressure wave.' },
80
+ { type: 'diagnostic', variant: 'info', title: 'Private Browser Processing', html: 'The selected recording is decoded into an in-memory audio buffer and analyzed locally. No upload is needed, so private classroom recordings, rehearsals, and personal voice samples remain on the device.' },
81
+ { type: 'stats', columns: 3, items: [
82
+ { value: 'Time', label: 'Read from left to right' },
83
+ { value: 'Hz', label: 'Frequency position' },
84
+ { value: 'Energy', label: 'Shown as luminous intensity' }
85
+ ] },
86
+ { type: 'title', text: 'Reading Formants Without Overstating the Result', level: 3 },
87
+ { type: 'paragraph', html: 'Formants are resonant regions shaped by the vocal tract. F1 and F2 are often used in phonetics to discuss vowel height and place. This analyzer traces broad smoothed peaks in three frequency regions so beginners can connect visible bands with approximate F1, F2, and F3 behavior.' },
88
+ { type: 'paragraph', html: 'Professional formant measurement normally uses a carefully configured linear predictive coding workflow, checks the tracking by eye, and adapts the formant ceiling to the speaker and vowel. Pitch harmonics, nasalization, room reflections, lossy compression, background noise, and weak recording levels can all pull a simple peak estimate away from the vocal tract resonance of interest. The guides here intentionally expose broad regions and average values for learning. If a guide jumps between bands or conflicts with the visible spectrum, treat that disagreement as a reason to inspect the recording and settings rather than as hidden evidence.' },
89
+ { type: 'table', headers: ['Guide', 'Search region', 'Useful interpretation'], rows: [
90
+ ['F1', '180 to 1000 Hz', 'A broad first resonance region often associated with vowel openness'],
91
+ ['F2', '900 to 3000 Hz', 'A broad second resonance region often associated with front and back vowel position'],
92
+ ['F3', '2000 to 4500 Hz', 'A higher resonance region affected by vocal tract shape and articulation']
93
+ ] },
94
+ { type: 'title', text: 'Why Analysis Settings Change the Picture', level: 3 },
95
+ { type: 'comparative', columns: 2, items: [
96
+ { title: 'Lower Ceiling', description: 'A 4 kHz ceiling gives more visual space to lower speech frequencies.', points: ['Useful for a close look at lower resonances', 'May exclude higher energy', 'Does not guarantee more accurate formants'] },
97
+ { title: 'Higher Ceiling', description: 'A 6 or 8 kHz ceiling includes more upper spectrum detail.', highlight: true, points: ['Useful for brighter voices and broadband sounds', 'Shows frication and upper harmonics', 'Compresses lower bands vertically'] }
98
+ ] },
99
+ { type: 'title', text: 'A Responsible Two Sample Comparison', level: 3 },
100
+ { type: 'paragraph', html: 'Comparing two plates is most useful when the recordings contain the same vowel, word, or short phrase and were made with similar microphones and environments. The displayed gaps are absolute differences between average peak positions. They do not model within speaker variability, between speaker variability, channel mismatch, speaking style, health, age, or the probability of competing explanations. For that reason the analyzer never converts a gap into a match percentage, identity badge, or forensic conclusion.' },
101
+ { type: 'list', items: [
102
+ '<strong>Match the spoken material:</strong> repeated vowels or words are easier to compare than unrelated phrases.',
103
+ '<strong>Use similar recording conditions:</strong> microphones, compression, background noise, and distance can alter the spectrum.',
104
+ '<strong>Listen with the cursor:</strong> connect a visible event to the exact moment that produced it.',
105
+ '<strong>Avoid identity claims:</strong> a similar looking spectrogram does not prove that two recordings share a speaker.'
106
+ ] },
107
+ { type: 'summary', title: 'What This Analyzer Is For', items: [
108
+ 'Generate an audio spectrogram locally from common browser decodable files.',
109
+ 'Explore two samples in mirrored or parallel plates with synchronized playback.',
110
+ 'Learn how spectral energy and approximate formant regions change across a recording.',
111
+ 'Keep comparison descriptive and educational rather than forensic or biometric.'
112
+ ] }
113
+ ],
114
+ faq,
115
+ bibliography,
116
+ howTo,
117
+ schemas: [
118
+ { '@context': 'https://schema.org', '@type': 'SoftwareApplication', name: title, description, applicationCategory: 'MultimediaApplication', operatingSystem: 'Any' },
119
+ { '@context': 'https://schema.org', '@type': 'FAQPage', mainEntity: faq.map((item) => ({ '@type': 'Question', name: item.question, acceptedAnswer: { '@type': 'Answer', text: item.answer } })) },
120
+ { '@context': 'https://schema.org', '@type': 'HowTo', name: title, step: howTo.map((step) => ({ '@type': 'HowToStep', name: step.name, text: step.text })) }
121
+ ]
122
+ };
@@ -0,0 +1,122 @@
1
+ import { bibliography } from '../bibliography';
2
+ import type { VoiceSpectrogramLocaleContent } from '../entry';
3
+
4
+ const slug = 'analizador-espectrograma-voz-online';
5
+ const title = 'Analizador de Espectrograma de Voz Online';
6
+ const description = 'Visualiza la frecuencia, el tiempo, la intensidad y la estimación de formantes de dos muestras de audio en tu navegador sin subir datos.';
7
+
8
+ const howTo = [
9
+ { name: 'Carga dos muestras de audio', text: 'Selecciona uno o dos archivos de audio locales, arrástralos a las placas o prueba los estudios sintéticos incluidos.' },
10
+ { name: 'Ajusta el techo de frecuencia', text: 'Elige un límite de 4, 6 u 8 kHz para encuadrar las frecuencias relevantes según el tipo de voz o sonido.' },
11
+ { name: 'Interpreta la placa espectral', text: 'El tiempo se mide de izquierda a derecha, la frecuencia en vertical, la intensidad por el brillo y los formantes como guías orientativas.' },
12
+ { name: 'Escucha y compara', text: 'Reproduce cualquier muestra para mover el cursor sincronizado y compara las frecuencias F1, F2 y F3 sin asumir identificación de hablante.' }
13
+ ];
14
+
15
+ const faq = [
16
+ { question: '¿Qué muestra un espectrograma de voz?', answer: 'Un espectrograma representa el tiempo en el eje horizontal, la frecuencia en el vertical y la energía del sonido mediante el brillo del color. Las resonancias del habla aparecen como franjas de energía destacadas.' },
17
+ { question: '¿Se suben mis grabaciones a algún servidor?', answer: 'No. El decodificado de audio, el análisis espectral, la visualización y la reproducción se ejecutan de forma 100 % local en el navegador.' },
18
+ { question: '¿Qué significan las guías F1, F2 y F3?', answer: 'Son estimaciones educativas de los tres primeros picos espectrales. F1 y F2 suelen asociarse a la apertura y posición de las vocales, mientras que F3 refleja resonancias superiores del canal vocal.' },
19
+ { question: '¿Puede esta herramienta identificar a una persona por la voz?', answer: 'No. El parecido visual o la cercanía de formantes no demuestra identidad. La comparación forense de voz requiere peritaje especializado, métodos validados y evaluación del margen de error.' },
20
+ { question: '¿Por qué cambian los formantes al modificar el techo de frecuencia?', answer: 'Al cambiar el rango espectral disponible cambian los picos analizables y su separación. La anatomía, la vocal, el ruido de fondo y los ajustes del análisis influyen en la estimación.' }
21
+ ];
22
+
23
+ export const content: VoiceSpectrogramLocaleContent = {
24
+ slug,
25
+ title,
26
+ description,
27
+ ui: {
28
+ privacyBadge: 'Solo local',
29
+ privacyNote: 'Tus grabaciones no salen de tu dispositivo. El análisis se realiza íntegramente en el navegador.',
30
+ loadHeading: 'Carga dos sonidos para analizar',
31
+ sampleALabel: 'Muestra A',
32
+ sampleBLabel: 'Muestra B',
33
+ chooseFileLabel: 'Seleccionar audio',
34
+ replaceFileLabel: 'Cambiar audio',
35
+ dropHint: 'Arrastra un archivo de audio aquí (máximo 25 MB). Se analizan los primeros 20 segundos.',
36
+ presetHint: 'Prueba inmediatamente los dos estudios de vocales sintéticas.',
37
+ presetWarmLabel: 'Estudio vocal cálida',
38
+ presetBrightLabel: 'Estudio vocal brillante',
39
+ emptySampleLabel: 'Esperando audio',
40
+ readySampleLabel: 'Placa espectral generada',
41
+ decodingSampleLabel: 'Procesando placa espectral',
42
+ errorSampleLabel: 'No se pudo analizar la muestra',
43
+ durationLabel: 'Duración',
44
+ ceilingHeading: 'Techo de frecuencia',
45
+ ceilingFourLabel: '4 kHz',
46
+ ceilingSixLabel: '6 kHz',
47
+ ceilingEightLabel: '8 kHz',
48
+ stageLabel: 'Mosaico de espectrogramas de voz',
49
+ mirrorViewLabel: 'Placas enfrentadas',
50
+ splitViewLabel: 'Placas paralelas',
51
+ playALabel: 'Reproducir muestra A',
52
+ playBLabel: 'Reproducir muestra B',
53
+ stopLabel: 'Detener',
54
+ timeAxisLabel: 'Tiempo',
55
+ frequencyAxisLabel: 'Frecuencia',
56
+ intensityLegendLabel: 'Mayor brillo indica mayor energía sonora',
57
+ formantLegendLabel: 'Guías de formantes estimados',
58
+ sampleAEmptyCanvasLabel: 'Carga la muestra A para visualizar su espectro',
59
+ sampleBEmptyCanvasLabel: 'Carga la muestra B para visualizar su espectro',
60
+ comparisonHeading: 'Análisis de resonancias espectrales',
61
+ comparisonNote: 'Valores promedio de los picos espectrales en tramos sonorizados. Las diferencias son mediciones físicas, no un porcentaje de coincidencia ni una prueba de identidad.',
62
+ formantOneLabel: 'Primera región de resonancia (F1)',
63
+ formantTwoLabel: 'Segunda región de resonancia (F2)',
64
+ formantThreeLabel: 'Tercera región de resonancia (F3)',
65
+ averageLabel: 'Promedio',
66
+ differenceLabel: 'Diferencia',
67
+ unavailableLabel: 'No disponible',
68
+ statusEmptyLabel: 'Carga una muestra para empezar',
69
+ statusSingleLabel: 'Una placa lista para inspeccionar',
70
+ statusReadyLabel: 'Ambas placas espectrales listas',
71
+ limitError: 'El archivo supera el límite de análisis local de 25 MB.',
72
+ decodeError: 'El navegador no pudo decodificar este formato de audio.',
73
+ browserError: 'La API Web Audio no está disponible en este navegador.',
74
+ educationalNote: 'Herramienta de visualización educativa. Las guías de formantes se basan en suavizado de picos espectrales y no deben usarse como peritaje de voz ni identificación biométrica.'
75
+ },
76
+ seo: [
77
+ { type: 'title', text: 'Cómo convierte un espectrograma el sonido en una imagen visual', level: 2 },
78
+ { type: 'paragraph', html: 'Un <strong>espectrograma de voz</strong> transforma una grabación sonora en un mapa visual donde el tiempo transcurre en el eje horizontal y la frecuencia se distribuye en el vertical. La intensidad de la señal se refleja mediante la iluminación del color, lo que permite observar vocales sostenidas, armónicos, silencios y cambios de timbre con mucha mayor claridad que en una onda de forma convencional.' },
79
+ { type: 'paragraph', html: 'El analizador divide la señal en fragmentos cortos solapados, aplica una ventana de Hamming y calcula la distribución de energía por frecuencias mediante la Transformada Rápida de Fourier (FFT). Un fragmento corto permite precisar el momento exacto de un evento, mientras que la resolución en frecuencia permite identificar dónde se concentra la energía. Debido al principio de incertidumbre en el procesamiento de señales, existe siempre un compromiso entre resolución temporal y frecuencial.' },
80
+ { type: 'diagnostic', variant: 'info', title: 'Procesamiento Privado en Navegador', html: 'El archivo seleccionado se decodifica en la memoria RAM de tu dispositivo y se analiza de forma local. No se requiere subida de datos, por lo que las grabaciones de voz, ensayos o clases permanecen privadas.' },
81
+ { type: 'stats', columns: 3, items: [
82
+ { value: 'Tiempo', label: 'Lectura de izquierda a derecha' },
83
+ { value: 'Hz', label: 'Posición en frecuencia' },
84
+ { value: 'Energía', label: 'Representada por brillo lumínico' }
85
+ ] },
86
+ { type: 'title', text: 'Lectura de formantes y límites de la estimación', level: 3 },
87
+ { type: 'paragraph', html: 'Los formantes son picos de resonancia producidos por la forma del tracto vocal. F1 y F2 se utilizan habitualmente en fonética para describir la apertura y articulación de las vocales. Este analizador rastrea regiones de frecuencia para ofrecer una aproximación visual de F1, F2 y F3.' },
88
+ { type: 'paragraph', html: 'El análisis profesional de formantes suele emplear codificación predictiva lineal (LPC) ajustada individualmente al hablante. Los armónicos del tono fundamental, el ruido de fondo, la compresión de audio o la sonoridad de la sala pueden desplazar la estimación. Utiliza estas guías como referencia didáctica y revisa siempre el espectro visual de fondo.' },
89
+ { type: 'table', headers: ['Guía', 'Rango de búsqueda', 'Interpretación fónica'], rows: [
90
+ ['F1', '180 a 1000 Hz', 'Primera resonancia, asociada a la apertura bucal y altura de la vocal'],
91
+ ['F2', '900 a 3000 Hz', 'Segunda resonancia, asociada a la posición anterior o posterior de la lengua'],
92
+ ['F3', '2000 a 4500 Hz', 'Resonancia superior, influida por la geometría global del tracto vocal']
93
+ ] },
94
+ { type: 'title', text: 'Efecto del techo de frecuencia en el análisis', level: 3 },
95
+ { type: 'comparative', columns: 2, items: [
96
+ { title: 'Techo Bajo (4 kHz)', description: 'Ocupa más espacio visual para las frecuencias fundamentales del habla.', points: ['Ideal para inspeccionar vocales y formantes bajos', 'Descarta altas frecuencias', 'No garantiza mayor precisión por sí solo'] },
97
+ { title: 'Techo Alto (6 u 8 kHz)', description: 'Incluye armónicos superiores y sonidos de fricción.', highlight: true, points: ['Recomendado para voces agudas y consonantes fricativas', 'Muestra el espectro completo', 'Comprime visualmente la zona de formantes inferiores'] }
98
+ ] },
99
+ { type: 'title', text: 'Comparación responsable entre dos muestras', level: 3 },
100
+ { type: 'paragraph', html: 'Comparar dos placas espectrales es útil cuando ambas grabaciones corresponden a la misma vocal o palabra bajo condiciones acústicas similares. Las diferencias mostradas indican distancias en Hertz entre picos promediados, pero no constituyen una prueba biométrica de identidad.' },
101
+ { type: 'list', items: [
102
+ '<strong>Compara el mismo contenido hablado:</strong> las vocales o palabras idénticas facilitan el contraste.',
103
+ '<strong>Iguala las condiciones de grabación:</strong> el micrófono y la acústica de la sala influyen en el espectro.',
104
+ '<strong>Escucha de forma sincronizada:</strong> conecta los eventos visuales con el sonido exacto.',
105
+ '<strong>Evita conclusiones periciales:</strong> un espectrograma similar no demuestra por sí solo que pertenezca a la misma persona.'
106
+ ] },
107
+ { type: 'summary', title: 'Objetivos de este analizador', items: [
108
+ 'Visualizar el espectrograma de cualquier archivo de audio compatible de forma local.',
109
+ 'Comparar dos muestras en placas paralelas o enfrentadas con reproducción interactiva.',
110
+ 'Aprender cómo varía la distribución de energía sonora y los formantes aproximados.',
111
+ 'Mantener un enfoque descriptivo y didáctico sin pretensiones biométricas.'
112
+ ] }
113
+ ],
114
+ faq,
115
+ bibliography,
116
+ howTo,
117
+ schemas: [
118
+ { '@context': 'https://schema.org', '@type': 'SoftwareApplication', name: title, description, applicationCategory: 'MultimediaApplication', operatingSystem: 'Any' },
119
+ { '@context': 'https://schema.org', '@type': 'FAQPage', mainEntity: faq.map((item) => ({ '@type': 'Question', name: item.question, acceptedAnswer: { '@type': 'Answer', text: item.answer } })) },
120
+ { '@context': 'https://schema.org', '@type': 'HowTo', name: title, step: howTo.map((step) => ({ '@type': 'HowToStep', name: step.name, text: step.text })) }
121
+ ]
122
+ };
@@ -0,0 +1,135 @@
1
+ import { bibliography } from '../bibliography';
2
+ import type { VoiceSpectrogramLocaleContent } from '../entry';
3
+
4
+ const slug = "analyseur-spectrogramme-voix-en-ligne";
5
+ const title = "Analyseur de Spectrogramme de Voix en Ligne";
6
+ const description = "Visualisez la fréquence, le temps, l intensité et les formants de deux échantillons audio localement dans votre navigateur.";
7
+
8
+ const howTo = [
9
+ {
10
+ "name": "Saisir deux échantillons",
11
+ "text": "Sélectionnez des fichiers audio locaux ou utilisez les études synthétiques."
12
+ },
13
+ {
14
+ "name": "Régler le plafond de fréquence",
15
+ "text": "Choisissez 4, 6 ou 8 kHz selon le type de voix."
16
+ },
17
+ {
18
+ "name": "Consulter le spectrogramme",
19
+ "text": "Examinez le temps, la fréquence, l intensité et les formants."
20
+ },
21
+ {
22
+ "name": "Écouter et comparer",
23
+ "text": "Comparez les moyennes F1, F2 et F3 de manière pédagogique."
24
+ }
25
+ ];
26
+
27
+ const faq = [
28
+ {
29
+ "question": "Que montre un spectrogramme vocal ?",
30
+ "answer": "Un spectrogramme affiche le temps horizontalement, la fréquence verticalement et la puissance du signal par la brillance."
31
+ },
32
+ {
33
+ "question": "Mes enregistrements sont-ils envoyés sur un serveur ?",
34
+ "answer": "Non. Tout le traitement est effectué localement."
35
+ },
36
+ {
37
+ "question": "Que signifient F1, F2 et F3 ?",
38
+ "answer": "Ce sont des estimations pédagogiques des résonances du conduit vocal."
39
+ },
40
+ {
41
+ "question": "Cet outil peut-il identifier un locuteur ?",
42
+ "answer": "Non. La ressemblance spectrale ne constitue pas une preuve biométrique."
43
+ },
44
+ {
45
+ "question": "Pourquoi les formants changent-ils avec le plafond de fréquence ?",
46
+ "answer": "Modifier l échelle fréquentielle ajuste la séparation des pics spectraux."
47
+ }
48
+ ];
49
+
50
+ export const content: VoiceSpectrogramLocaleContent = {
51
+ slug,
52
+ title,
53
+ description,
54
+ ui: {
55
+ "privacyBadge": "Local uniquement",
56
+ "privacyNote": "Vos enregistrements restent sur votre appareil. L analyse s exécute dans le navigateur.",
57
+ "loadHeading": "Charger deux sons à analyser",
58
+ "sampleALabel": "Échantillon A",
59
+ "sampleBLabel": "Échantillon B",
60
+ "chooseFileLabel": "Choisir un audio",
61
+ "replaceFileLabel": "Remplacer l audio",
62
+ "dropHint": "Glissez un fichier audio ici (max 25 Mo). Les 20 premières secondes sont analysées.",
63
+ "presetHint": "Essayez directement les deux études de voyelles synthétiques.",
64
+ "presetWarmLabel": "Étude voyelle chaude",
65
+ "presetBrightLabel": "Étude voyelle brillante",
66
+ "emptySampleLabel": "En attente d audio",
67
+ "readySampleLabel": "Plaque spectrale générée",
68
+ "decodingSampleLabel": "Calcul de la plaque spectrale",
69
+ "errorSampleLabel": "Échantillon non analysable",
70
+ "durationLabel": "Durée",
71
+ "ceilingHeading": "Plafond de fréquence",
72
+ "ceilingFourLabel": "4 kHz",
73
+ "ceilingSixLabel": "6 kHz",
74
+ "ceilingEightLabel": "8 kHz",
75
+ "stageLabel": "Scène de spectrogramme miroir",
76
+ "mirrorViewLabel": "Plaques miroir",
77
+ "splitViewLabel": "Plaques parallèles",
78
+ "playALabel": "Jouer échantillon A",
79
+ "playBLabel": "Jouer échantillon B",
80
+ "stopLabel": "Arrêter",
81
+ "timeAxisLabel": "Temps",
82
+ "frequencyAxisLabel": "Fréquence",
83
+ "intensityLegendLabel": "Une encre plus brillante indique une énergie plus forte",
84
+ "formantLegendLabel": "Lignes de formants estimés",
85
+ "sampleAEmptyCanvasLabel": "Chargez l échantillon A pour afficher son spectre",
86
+ "sampleBEmptyCanvasLabel": "Chargez l échantillon B pour afficher son spectre",
87
+ "comparisonHeading": "Analyse des empreintes de résonance",
88
+ "comparisonNote": "Moyenne des pics spectraux. Les écarts sont des mesures physiques, pas un pourcentage d identité.",
89
+ "formantOneLabel": "Première région de résonance (F1)",
90
+ "formantTwoLabel": "Deuxième région de résonance (F2)",
91
+ "formantThreeLabel": "Troisième région de résonance (F3)",
92
+ "averageLabel": "Moyenne",
93
+ "differenceLabel": "Écart",
94
+ "unavailableLabel": "Non disponible",
95
+ "statusEmptyLabel": "Chargez un échantillon pour commencer",
96
+ "statusSingleLabel": "Une plaque est prête",
97
+ "statusReadyLabel": "Les deux plaques sont prêtes",
98
+ "limitError": "Le fichier dépasse la limite locale de 25 Mo.",
99
+ "decodeError": "Format audio non pris en charge par ce navigateur.",
100
+ "browserError": "Web Audio n est pas disponible dans ce navigateur.",
101
+ "educationalNote": "Outil de visualisation pédagogique. Les lignes de formants ne doivent pas être utilisées pour l identification de locuteur."
102
+ },
103
+ seo: [
104
+ { type: 'title', text: "Comment un spectrogramme transforme le son en image", level: 2 },
105
+ { type: 'paragraph', html: "Un <strong>spectrogramme vocal</strong> transforme un enregistrement en une carte avec le temps sur l axe horizontal et la fréquence sur l axe vertical. Une énergie plus forte apparaît sous forme de couleur plus brillante. Cela rend les voyelles tenues, les harmoniques, le silence et les résonances plus faciles à observer que sur une forme d onde classique. Cette représentation visuelle facilite l analyse du signal." },
106
+ { type: 'paragraph', html: "L analyseur divise le signal en courts segments chevauchants, applique une fenêtre de Hamming et calcule la répartition de l énergie par fréquence via la FFT. Un segment court permet de situer précisément un événement, tandis que la résolution en fréquence montre où l énergie se concentre. En raison du principe d incertitude, il existe toujours un compromis entre résolution temporelle et fréquentielle. Ces paramètres définissent la précision du spectrogramme." },
107
+ { type: 'diagnostic', variant: 'info', title: "Traitement privé dans le navigateur", html: "Visualisez la fréquence, le temps, l intensité et les formants de deux échantillons audio localement dans votre navigateur." },
108
+ { type: 'stats', columns: 3, items: [
109
+ { value: "Temps", label: "Lecture de gauche à droite" },
110
+ { value: "Hz", label: "Position en fréquence" },
111
+ { value: "Énergie", label: "Représentée par la luminosité" }
112
+ ] },
113
+ { type: 'title', text: "Lire les formants sans surinterprétation", level: 3 },
114
+ { type: 'paragraph', html: "Les formants sont des zones de résonance façonnées par le conduit vocal. F1 et F2 sont utilisés en phonétique pour décrire la hauteur et le lieu d articulation des voyelles. Cet analyseur suit des pics lissés dans trois régions de fréquence afin que les utilisateurs puissent relier les bandes visibles au comportement de F1, F2 et F3." },
115
+ { type: 'paragraph', html: "La mesure professionnelle des formants utilise généralement un codage prédictif linéaire (LPC) ajusté au locuteur. Les harmoniques du fondamental, le bruit de fond, la réverbération et la compression audio peuvent décaler les estimations simples. Utilisez ces guides comme repères pédagogiques et contrôlez toujours le spectre visuel sous-jacent." },
116
+ { type: 'table', headers: ['Guide', 'Region', 'Meaning'], rows: [["F1","180 à 1000 Hz","Première région de résonance, associée à l ouverture de la voyelle"],["F2","900 à 3000 Hz","Deuxième région de résonance, associée à la position de la langue"],["F3","2000 à 4500 Hz","Région de résonance supérieure, influencée par le conduit vocal"]] },
117
+ { type: 'title', text: "L impact des réglages de fréquence", level: 3 },
118
+ { type: 'comparative', columns: 2, items: [
119
+ { title: "Plafond bas (4 kHz)", description: "Meilleure vue des basses fréquences", points: ["Utile pour les voyelles", "Peut exclure la haute énergie", "Ne garantit pas une meilleure précision"] },
120
+ { title: "Plafond haut (6/8 kHz)", description: "Plus de détails supérieurs", highlight: true, points: ["Pour voix brillantes", "Affiche les fricatives", "Comprime les bandes inférieures"] }
121
+ ] },
122
+ { type: 'title', text: "Une comparaison d échantillons responsable", level: 3 },
123
+ { type: 'paragraph', html: "La comparaison entre deux plaques est particulièrement utile lorsque les enregistrements contiennent la même voyelle ou frase dans des conditions acoustiques similaires. Les écarts affichés sont des différences physiques absolues. Ils ne constituent pas un pourcentage de similitude ni une preuve biométrique d identité." },
124
+ { type: 'list', items: ["<strong>Comparer le mesmo contenu parlé:</strong> des voyelles ou mots identiques facilitent le contraste.","<strong>Harmoniser les conditions d enregistrement:</strong> le micro et l acoustique influencent fortement le spectre.","<strong>Écouter avec le curseur:</strong> reliez les événements visuels au son exact.","<strong>Éviter les affirmations d identité:</strong> un spectrogramme similaire ne prouve pas l identité du locuteur."] },
125
+ { type: 'summary', title: "Synthèse de l analyseur", items: ["Générer un spectrogramme audio localement à partir de fichiers compatibles.","Explorer deux échantillons en plaques miroir ou parallèles.","Apprendre comment l énergie spectrale et les formants varient.","Garder une approche descriptive et pédagogique."] }
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
+ };