@jjlmoya/utils-forensic-science 1.12.0 → 1.13.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 (38) hide show
  1. package/package.json +1 -1
  2. package/src/category/index.ts +3 -1
  3. package/src/entries.ts +5 -1
  4. package/src/index.ts +1 -0
  5. package/src/tests/locale_completeness.test.ts +2 -2
  6. package/src/tests/tool_validation.test.ts +2 -2
  7. package/src/tool/voice-spectrogram-analyzer/audio-runtime.ts +75 -0
  8. package/src/tool/voice-spectrogram-analyzer/bibliography.astro +14 -0
  9. package/src/tool/voice-spectrogram-analyzer/bibliography.ts +16 -0
  10. package/src/tool/voice-spectrogram-analyzer/component.astro +116 -0
  11. package/src/tool/voice-spectrogram-analyzer/controller.ts +219 -0
  12. package/src/tool/voice-spectrogram-analyzer/dom-views.ts +204 -0
  13. package/src/tool/voice-spectrogram-analyzer/entry.ts +31 -0
  14. package/src/tool/voice-spectrogram-analyzer/evaluator.ts +13 -0
  15. package/src/tool/voice-spectrogram-analyzer/fft.ts +64 -0
  16. package/src/tool/voice-spectrogram-analyzer/i18n/de.ts +135 -0
  17. package/src/tool/voice-spectrogram-analyzer/i18n/en.ts +122 -0
  18. package/src/tool/voice-spectrogram-analyzer/i18n/es.ts +122 -0
  19. package/src/tool/voice-spectrogram-analyzer/i18n/fr.ts +135 -0
  20. package/src/tool/voice-spectrogram-analyzer/i18n/id.ts +136 -0
  21. package/src/tool/voice-spectrogram-analyzer/i18n/it.ts +135 -0
  22. package/src/tool/voice-spectrogram-analyzer/i18n/ja.ts +135 -0
  23. package/src/tool/voice-spectrogram-analyzer/i18n/ko.ts +135 -0
  24. package/src/tool/voice-spectrogram-analyzer/i18n/nl.ts +136 -0
  25. package/src/tool/voice-spectrogram-analyzer/i18n/pl.ts +136 -0
  26. package/src/tool/voice-spectrogram-analyzer/i18n/pt.ts +135 -0
  27. package/src/tool/voice-spectrogram-analyzer/i18n/ru.ts +136 -0
  28. package/src/tool/voice-spectrogram-analyzer/i18n/sv.ts +136 -0
  29. package/src/tool/voice-spectrogram-analyzer/i18n/tr.ts +136 -0
  30. package/src/tool/voice-spectrogram-analyzer/i18n/zh.ts +135 -0
  31. package/src/tool/voice-spectrogram-analyzer/index.ts +11 -0
  32. package/src/tool/voice-spectrogram-analyzer/logic.test.ts +46 -0
  33. package/src/tool/voice-spectrogram-analyzer/logic.ts +163 -0
  34. package/src/tool/voice-spectrogram-analyzer/seo.astro +15 -0
  35. package/src/tool/voice-spectrogram-analyzer/storage.ts +33 -0
  36. package/src/tool/voice-spectrogram-analyzer/ui.ts +49 -0
  37. package/src/tool/voice-spectrogram-analyzer/voice-spectrogram-analyzer.css +547 -0
  38. package/src/tools.ts +3 -1
@@ -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
+ };
@@ -0,0 +1,136 @@
1
+ import { bibliography } from '../bibliography';
2
+ import type { VoiceSpectrogramLocaleContent } from '../entry';
3
+
4
+ const slug = "penganalisis-spektrogram-suara-online";
5
+ const title = "Penganalisis Spektrogram Suara Online";
6
+ const description = "Visualisasikan frekuensi, waktu, intensitas, dan estimasi formant dari dua sampel audio secara privat di peramban Anda.";
7
+
8
+ const howTo = [
9
+ {
10
+ "name": "Pilih dua sampel audio",
11
+ "text": "Gunakan file audio lokal atau studi vokal sintetis."
12
+ },
13
+ {
14
+ "name": "Atur batas frekuensi",
15
+ "text": "Pilih 4, 6, atau 8 kHz sesuai jangkauan suara."
16
+ },
17
+ {
18
+ "name": "Baca spektrogram",
19
+ "text": "Amati waktu, frekuensi, dan panduan formant."
20
+ },
21
+ {
22
+ "name": "Dengarkan dan bandingkan",
23
+ "text": "Bandingkan rata-rata F1, F2, dan F3 secara deskriptif."
24
+ }
25
+ ];
26
+
27
+ const faq = [
28
+ {
29
+ "question": "Apa yang ditampilkan oleh spektrogram suara?",
30
+ "answer": "Spektrogram memetakan waktu secara horizontal, frekuensi secara vertikal, dan intensitas sinyal melalui kecerahan warna."
31
+ },
32
+ {
33
+ "question": "Apakah rekaman saya diunggah?",
34
+ "answer": "Tidak. Semua proses berjalan secara lokal di perangkat Anda."
35
+ },
36
+ {
37
+ "question": "Apa itu F1, F2, dan F3?",
38
+ "answer": "Merupakan estimasi edukatif dari tiga puncak resonansi utama saluran vokal."
39
+ },
40
+ {
41
+ "question": "Apakah alat ini dapat mengidentifikasi pembicara?",
42
+ "answer": "Tidak. Kemiripan visual tidak mengonfirmasi identitas pembicara."
43
+ },
44
+ {
45
+ "question": "Mengapa estimasi formant berubah dengan batas frekuensi?",
46
+ "answer": "Perubahan skala frekuensi memengaruhi pemisahan puncak spektral."
47
+ }
48
+ ];
49
+
50
+ export const content: VoiceSpectrogramLocaleContent = {
51
+ slug,
52
+ title,
53
+ description,
54
+ ui: {
55
+ "privacyBadge": "Hanya lokal",
56
+ "privacyNote": "Rekaman Anda tetap di perangkat ini. Proses dekode dan analisis berjalan di peramban.",
57
+ "loadHeading": "Muat dua suara untuk dianalisis",
58
+ "sampleALabel": "Sampel A",
59
+ "sampleBLabel": "Sampel B",
60
+ "chooseFileLabel": "Pilih audio",
61
+ "replaceFileLabel": "Ganti audio",
62
+ "dropHint": "Tarik file audio ke sini (maksimal 25 MB). 20 detik pertama akan dianalisis.",
63
+ "presetHint": "Mulai langsung dengan dua studi vokal sintetis.",
64
+ "presetWarmLabel": "Studi vokal hangat",
65
+ "presetBrightLabel": "Studi vokal cerah",
66
+ "emptySampleLabel": "Menunggu audio",
67
+ "readySampleLabel": "Plat spektral siap",
68
+ "decodingSampleLabel": "Memproses plat spektral",
69
+ "errorSampleLabel": "Sampel tidak dapat dianalisis",
70
+ "durationLabel": "Durasi",
71
+ "ceilingHeading": "Batas frekuensi atas",
72
+ "ceilingFourLabel": "4 kHz",
73
+ "ceilingSixLabel": "6 kHz",
74
+ "ceilingEightLabel": "8 kHz",
75
+ "stageLabel": "Panggung spektrogram suara cermin",
76
+ "mirrorViewLabel": "Plat cermin",
77
+ "splitViewLabel": "Plat sejajar",
78
+ "playALabel": "Putar sampel A",
79
+ "playBLabel": "Putar sampel B",
80
+ "stopLabel": "Hentikan",
81
+ "timeAxisLabel": "Waktu",
82
+ "frequencyAxisLabel": "Frekuensi",
83
+ "intensityLegendLabel": "Tinta lebih terang menunjukkan energi lebih kuat",
84
+ "formantLegendLabel": "Garis panduan estimasi formant",
85
+ "sampleAEmptyCanvasLabel": "Muat sampel A untuk menampilkan spektrum",
86
+ "sampleBEmptyCanvasLabel": "Muat sampel B untuk menampilkan spektrum",
87
+ "comparisonHeading": "Analisis jejak resonansi",
88
+ "comparisonNote": "Nilai rata-rata puncak spektral. Perbedaan adalah hasil pengukuran, bukan persentase kemiripan atau bukti identitas.",
89
+ "formantOneLabel": "Wilayah resonansi pertama (F1)",
90
+ "formantTwoLabel": "Wilayah resonansi kedua (F2)",
91
+ "formantThreeLabel": "Wilayah resonansi ketiga (F3)",
92
+ "averageLabel": "Rata-rata",
93
+ "differenceLabel": "Selisih",
94
+ "unavailableLabel": "Tidak tersedia",
95
+ "statusEmptyLabel": "Muat sampel untuk memulai",
96
+ "statusSingleLabel": "Satu plat siap",
97
+ "statusReadyLabel": "Dua plat spektral siap",
98
+ "limitError": "Ukuran file melebihi batas analisis lokal 25 MB.",
99
+ "decodeError": "Peramban tidak dapat mendekode format audio ini.",
100
+ "browserError": "Web Audio API tidak tersedia di peramban ini.",
101
+ "educationalNote": "Alat visualisasi edukatif. Garis formant tidak boleh digunakan untuk identifikasi pembicara forensik."
102
+ },
103
+ seo: [
104
+ { type: 'title', text: "Bagaimana spektrogram suara mengubah suara menjadi lanskap visual", level: 2 },
105
+ { type: 'paragraph', html: "Spektrogram suara mengubah rekaman menjadi peta visual yang sangat jelas dengan waktu pada sumbu horizontal dan frekuensi pada sumbu vertikal. Energi yang lebih kuat muncul sebagai warna yang lebih cerah. Ini membuat vokal yang ditahan, harmonik, keheningan, dan resonansi lebih mudah diamati dibandingkan bentuk gelombang biasa. Visualisasi ini mempermudah analisis sinyal suara secara mendalam dan terstruktur di setiap frekuensi. Hasilnya memungkinkan pemahaman karakter vokal secara ilmiah." },
106
+ { type: 'paragraph', html: "Penganalisis membagi sinyal menjadi segmen-segmen pendek yang tumpang tindih, menerapkan jendela Hamming, dan menghitung distribusi energi berdasarkan frekuensi menggunakan FFT. Segmen pendek menentukan waktu secara tepat, sedangkan resolusi frekuensi menunjukkan konsentrasi energi. Prinsip ketidakpastian selalu membuat kompromi antara resolusi waktu dan frekuensi. Pengaturan ini menentukan ketajaman tampilan." },
107
+
108
+ { type: 'diagnostic', variant: 'info', title: "Pemrosesan privat di peramban", html: "Visualisasikan frekuensi, waktu, intensitas, dan estimasi formant dari dua sampel audio secara privat di peramban Anda." },
109
+ { type: 'stats', columns: 3, items: [
110
+ { value: "Waktu", label: "Baca dari kiri ke kanan" },
111
+ { value: "Hz", label: "Posisi frekuensi" },
112
+ { value: "Energi", label: "Ditampilkan sebagai kecerahan" }
113
+ ] },
114
+ { type: 'title', text: "Membaca formant secara bijak", level: 3 },
115
+ { type: 'paragraph', html: "Formant adalah wilayah resonansi yang dibentuk oleh saluran vokal. F1 dan F2 digunakan dalam fonetik untuk menjelaskan tinggi vokal dan tempat artikulasi secara mendalam. Penganalisis ini melacak puncak halus di tiga wilayah frekuensi agar pengguna dapat menghubungkan pita yang terlihat dengan perilaku F1, F2, dan F3 secara lebih intuitif dan akurat." },
116
+ { type: 'paragraph', html: "Pengukuran formant profesional umumnya menggunakan Linear Predictive Coding yang disesuaikan dengan pembicara. Harmonik nada dasar, desah, gema ruangan, dan kompresi dapat menggeser perkiraan sederhana. Gunakan garis panduan ini sebagai referensi edukatif dan selalu periksa spektrum visual di belakangnya." },
117
+ { type: 'table', headers: ['Guide', 'Region', 'Meaning'], rows: [["F1","180 hingga 1000 Hz","Wilayah resonansi pertama, berkaitan dengan bukaan vokal"],["F2","900 hingga 3000 Hz","Wilayah resonansi kedua, berkaitan dengan posisi lidah"],["F3","2000 hingga 4500 Hz","Wilayah resonansi atas, dipengaruhi oleh saluran vokal"]] },
118
+ { type: 'title', text: "Pengaruh pengaturan frekuensi pada analisis", level: 3 },
119
+ { type: 'comparative', columns: 2, items: [
120
+ { title: "Batas bawah (4 kHz)", description: "Tampilan frekuensi rendah lebih baik", points: ["Berguna untuk vokal", "Dapat mengabaikan energi tinggi", "Tidak menjamin akurasi tinggi"] },
121
+ { title: "Batas atas (6/8 kHz)", description: "Lebih banyak detail atas", highlight: true, points: ["Untuk suara cerah", "Menampilkan gesekan", "Mengecilkan pita bawah"] }
122
+ ] },
123
+ { type: 'title', text: "Perbandingan dua sampel audio secara bertanggung jawab", level: 3 },
124
+ { type: 'paragraph', html: "Perbandingan dua sampel paling berguna ketika kedua rekaman berisi vokal atau kalimat yang sama dalam kondisi akustik yang serupa. Perbedaan yang ditampilkan adalah jarak fisik mutlak antara puncak frekuensi. Perbedaan tersebut bukan persentase kemiripan atau bukti identitas biologis." },
125
+ { type: 'list', items: ["<strong>Gunakan konten yang sama:</strong> vokal atau kata yang sama lebih mudah dibandingkan.","<strong>Samakan kondisi rekaman:</strong> mikrofon dan akustik ruangan sangat memengaruhi spektrum.","<strong>Dengarkan dengan kursor:</strong> hubungkan peristiwa visual dengan waktu suara yang tepat.","<strong>Hindari klaim identitas:</strong> spektrogram yang mirip tidak membuktikan identitas pembicara."] },
126
+ { type: 'summary', title: "Ringkasan penganalisis", items: ["Hasilkan spektrogram audio secara lokal dari file yang kompatibel.","Jelajahi dua sampel dalam plat cermin atau sejajar.","Pelajari bagaimana energi spektral dan wilayah formant berubah.","Jaga pendekatan deskriptif dan edukatif."] }
127
+ ],
128
+ faq,
129
+ bibliography,
130
+ howTo,
131
+ schemas: [
132
+ { '@context': 'https://schema.org', '@type': 'SoftwareApplication', name: title, description, applicationCategory: 'MultimediaApplication', operatingSystem: 'Any' },
133
+ { '@context': 'https://schema.org', '@type': 'FAQPage', mainEntity: faq.map((item) => ({ '@type': 'Question', name: item.question, acceptedAnswer: { '@type': 'Answer', text: item.answer } })) },
134
+ { '@context': 'https://schema.org', '@type': 'HowTo', name: title, step: howTo.map((step) => ({ '@type': 'HowToStep', name: step.name, text: step.text })) }
135
+ ]
136
+ };
@@ -0,0 +1,135 @@
1
+ import { bibliography } from '../bibliography';
2
+ import type { VoiceSpectrogramLocaleContent } from '../entry';
3
+
4
+ const slug = "analizzatore-spettrogramma-voce-online";
5
+ const title = "Analizzatore di Spettrogramma della Voce Online";
6
+ const description = "Visualizza frequenza, tempo, intensità ed stima dei formanti di due campioni audio in modo privato nel tuo browser.";
7
+
8
+ const howTo = [
9
+ {
10
+ "name": "Carica due campioni",
11
+ "text": "Seleziona file audio locali o usa gli studi sintetici."
12
+ },
13
+ {
14
+ "name": "Imposta il limite di frequenza",
15
+ "text": "Scegli 4, 6 o 8 kHz a seconda del tipo di voce."
16
+ },
17
+ {
18
+ "name": "Leggi lo spettrogramma",
19
+ "text": "Analizza tempo, frequenza e guide dei formanti."
20
+ },
21
+ {
22
+ "name": "Ascolta e confronta",
23
+ "text": "Confronta le medie F1, F2 e F3 a scopo educativo."
24
+ }
25
+ ];
26
+
27
+ const faq = [
28
+ {
29
+ "question": "Cosa mostra uno spettrogramma vocale?",
30
+ "answer": "Uno spettrogramma mostra il tempo sull asse orizzontale, la frequenza su quello verticale e l intensità tramite la luminosità."
31
+ },
32
+ {
33
+ "question": "Le mie registrazioni vengono caricate su un server?",
34
+ "answer": "No. Tutti i calcoli avvengono in locale nel tuo browser."
35
+ },
36
+ {
37
+ "question": "Cosa rappresentano F1, F2 e F3?",
38
+ "answer": "Sono stime didattiche delle risonanze del tratto vocale."
39
+ },
40
+ {
41
+ "question": "Questo strumento può identificare un parlante?",
42
+ "answer": "No. La somiglianza spettrale non costituisce una prova biometrica."
43
+ },
44
+ {
45
+ "question": "Perché i formanti variano cambiando il limite di frequenza?",
46
+ "answer": "La scala di frequenza modifica la separazione visiva dei picchi."
47
+ }
48
+ ];
49
+
50
+ export const content: VoiceSpectrogramLocaleContent = {
51
+ slug,
52
+ title,
53
+ description,
54
+ ui: {
55
+ "privacyBadge": "Solo locale",
56
+ "privacyNote": "Le tue registrazioni rimangono sul tuo dispositivo. L analisi avviene interamente nel browser.",
57
+ "loadHeading": "Carica due suoni da analizzare",
58
+ "sampleALabel": "Campione A",
59
+ "sampleBLabel": "Campione B",
60
+ "chooseFileLabel": "Seleziona audio",
61
+ "replaceFileLabel": "Sostituisci audio",
62
+ "dropHint": "Trascina un file audio qui (max 25 MB). Vengono analizzati i primi 20 secondi.",
63
+ "presetHint": "Prova subito i due studi sintetici di vocali.",
64
+ "presetWarmLabel": "Studio vocale calda",
65
+ "presetBrightLabel": "Studio vocale brillante",
66
+ "emptySampleLabel": "In attesa di audio",
67
+ "readySampleLabel": "Piastra spettrale generata",
68
+ "decodingSampleLabel": "Elaborazione piastra spettrale",
69
+ "errorSampleLabel": "Impossibile analizzare il campione",
70
+ "durationLabel": "Durata",
71
+ "ceilingHeading": "Limite di frequenza",
72
+ "ceilingFourLabel": "4 kHz",
73
+ "ceilingSixLabel": "6 kHz",
74
+ "ceilingEightLabel": "8 kHz",
75
+ "stageLabel": "Mosaico spettrogrammi vocali specchiati",
76
+ "mirrorViewLabel": "Piastre specchiate",
77
+ "splitViewLabel": "Piastre parallele",
78
+ "playALabel": "Riproduci campione A",
79
+ "playBLabel": "Riproduci campione B",
80
+ "stopLabel": "Interrompi",
81
+ "timeAxisLabel": "Tempo",
82
+ "frequencyAxisLabel": "Frequenza",
83
+ "intensityLegendLabel": "Un inchiostro più luminoso indica maggiore energia",
84
+ "formantLegendLabel": "Guida formanti stimati",
85
+ "sampleAEmptyCanvasLabel": "Carica il campione A per visualizzare lo spettro",
86
+ "sampleBEmptyCanvasLabel": "Carica il campione B per visualizzare lo spettro",
87
+ "comparisonHeading": "Analisi delle risonanze spettrali",
88
+ "comparisonNote": "Valori medi dei picchi spettrali. Le differenze sono misurazioni fisiche, non una percentuale di corrispondenza o prova di identità.",
89
+ "formantOneLabel": "Prima regione di risonanza (F1)",
90
+ "formantTwoLabel": "Seconda regione di risonanza (F2)",
91
+ "formantThreeLabel": "Terza regione di risonanza (F3)",
92
+ "averageLabel": "Media",
93
+ "differenceLabel": "Differenza",
94
+ "unavailableLabel": "Non disponibile",
95
+ "statusEmptyLabel": "Carica un campione per iniziare",
96
+ "statusSingleLabel": "Una piastra è pronta",
97
+ "statusReadyLabel": "Entrambe le piastre spettrali sono pronte",
98
+ "limitError": "Il file supera il limite di analisi locale di 25 MB.",
99
+ "decodeError": "Il browser non ha potuto decodificare questo formato audio.",
100
+ "browserError": "L API Web Audio non è disponibile in questo browser.",
101
+ "educationalNote": "Strumento di visualizzazione didattico. Le guide dei formanti non devono essere utilizzate per l identificazione del parlante."
102
+ },
103
+ seo: [
104
+ { type: 'title', text: "Come uno spettrogramma trasforma il suono in immagine", level: 2 },
105
+ { type: 'paragraph', html: "Uno <strong>spettrogramma vocale</strong> trasforma una registrazione in una mappa con il tempo sull asse orizzontale e la frequenza su quello verticale. Un energia più forte appare come colore più luminoso. Questo rende vocali tenute, armoniche, silenzi e risonanze più facili da osservare rispetto a una forma d onda classica. La visualizzazione aiuta l analisi spettrale." },
106
+ { type: 'paragraph', html: "L analizzatore divide il segnale in brevi finestre sovrapposte, applica una finestra di Hamming e calcola la distribuzione dell energia per frequenza tramite la FFT. Una finestra breve individua il momento esatto di un evento, mentre la risoluzione in frequenza mostra dove si concentra l energia. A causa del principio di indeterminazione, esiste sempre un compromesso tra risoluzione temporale e frequenziale. Queste impostazioni determinano la definizione visiva." },
107
+ { type: 'diagnostic', variant: 'info', title: "Elaborazione privata nel browser", html: "Visualizza frequenza, tempo, intensità ed stima dei formanti di due campioni audio in modo privato nel tuo browser." },
108
+ { type: 'stats', columns: 3, items: [
109
+ { value: "Tempo", label: "Lettura da sinistra a destra" },
110
+ { value: "Hz", label: "Posizione in frequenza" },
111
+ { value: "Energia", label: "Rappresentata come luminosità" }
112
+ ] },
113
+ { type: 'title', text: "Leggere i formanti in modo corretto", level: 3 },
114
+ { type: 'paragraph', html: "I formanti sono regioni di risonanza modellate dal tratto vocale. F1 e F2 sono usati in fonetica per descrivere l altezza e il punto di articolazione delle vocali. Questo analizzatore traccia picchi smussati in tre regioni di frequenza in modo che l utente possa collegare le bande visibili al comportamento di F1, F2 e F3." },
115
+ { type: 'paragraph', html: "La misurazione professionale dei formanti utilizza solitamente una codifica predittiva lineare (LPC) adattata al parlante. Le armoniche del fondamentale, il rumore di fondo, il riverbero e la compressione audio possono spostare le stime semplici. Utilizza queste guide come riferimenti didattici e controlla sempre lo spettro sottostante." },
116
+ { type: 'table', headers: ['Guide', 'Region', 'Meaning'], rows: [["F1","da 180 a 1000 Hz","Prima regione di risonanza, associata all apertura della vocale"],["F2","da 900 a 3000 Hz","Seconda regione di risonanza, associata alla posizione della lingua"],["F3","da 2000 a 4500 Hz","Regione di risonanza superiore, influenzata dal tratto vocale"]] },
117
+ { type: 'title', text: "L impatto delle impostazioni di frequenza", level: 3 },
118
+ { type: 'comparative', columns: 2, items: [
119
+ { title: "Limite basso (4 kHz)", description: "Migliore vista per basse frequenze", points: ["Utile per vocali", "Può escludere alte frequenze", "Non garantisce maggiore precisione"] },
120
+ { title: "Limite alto (6/8 kHz)", description: "Più dettagli superiori", highlight: true, points: ["Per voci brillanti", "Mostra fricative", "Comprime bande inferiori"] }
121
+ ] },
122
+ { type: 'title', text: "Un confronto responsabile tra due campioni", level: 3 },
123
+ { type: 'paragraph', html: "Il confronto tra due campioni è particolarmente utile quando le registrazioni contengono la stessa vocale o frase in condizioni acustiche simili. Le differenze mostrate sono distanze fisiche assolute. Non costituiscono una percentuale di somiglianza né una prova biometrica di identità." },
124
+ { type: 'list', items: ["<strong>Confrontare lo stesso contenuto parlato:</strong> vocali o parole identiche facilitano il confronto.","<strong>Uniformare le condizioni di registrazione:</strong> microfono e acustica influenzano notevolmente lo spettro.","<strong>Ascoltare con il cursore:</strong> collega gli eventi visivi al suono esatto.","<strong>Evitare affermazioni di identità:</strong> uno spettrogramma simile non dimostra l identità del parlante."] },
125
+ { type: 'summary', title: "Sintesi dell analizzatore", items: ["Generare uno spettrogramma audio in locale da file compatibili.","Esplorare due campioni in piastre specchiate o parallele.","Imparare come variano l energia spettrale e i formanti.","Mantenere un approccio descrittivo e didattico."] }
126
+ ],
127
+ faq,
128
+ bibliography,
129
+ howTo,
130
+ schemas: [
131
+ { '@context': 'https://schema.org', '@type': 'SoftwareApplication', name: title, description, applicationCategory: 'MultimediaApplication', operatingSystem: 'Any' },
132
+ { '@context': 'https://schema.org', '@type': 'FAQPage', mainEntity: faq.map((item) => ({ '@type': 'Question', name: item.question, acceptedAnswer: { '@type': 'Answer', text: item.answer } })) },
133
+ { '@context': 'https://schema.org', '@type': 'HowTo', name: title, step: howTo.map((step) => ({ '@type': 'HowToStep', name: step.name, text: step.text })) }
134
+ ]
135
+ };