From 26cc8a8587e6279889528800a7b5dd6b5872c6cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Ml=C3=A1dek?= Date: Sat, 27 Sep 2025 12:55:09 +0200 Subject: [PATCH] feat: add mic test page --- messages/cs.json | 37 +- messages/de.json | 37 +- messages/en.json | 37 +- messages/es.json | 37 +- messages/fr.json | 37 +- messages/ja.json | 37 +- messages/ukr.json | 37 +- messages/zh-CN.json | 37 +- src/routes/(pages)/+page.svelte | 3 +- src/routes/(pages)/microphone/+page.svelte | 622 +++++++++++++++++++++ 10 files changed, 911 insertions(+), 10 deletions(-) diff --git a/messages/cs.json b/messages/cs.json index a0b3b07..0427b6d 100644 --- a/messages/cs.json +++ b/messages/cs.json @@ -102,5 +102,40 @@ "signalGen_stop": "Stop", "signalGen_scope": "Osciloskop", "signalGen_spectrum": "Spektrum", - "signalGen_loop": "Smyčka" + "signalGen_loop": "Smyčka", + "mic_title": "Test mikrofonu", + "mic_startMicrophone": "Spustit mikrofon", + "mic_stop": "Zastavit", + "mic_monitoringOn": "Monitorování: ZAP", + "mic_monitoringOff": "Monitorování: VYP", + "mic_gain": "Zesílení", + "mic_monitorDelay": "Zpoždění monitoru", + "mic_sampleRate": "Vzorkovací frekvence", + "mic_inputDevice": "Vstupní zařízení", + "mic_volume": "Hlasitost", + "mic_recording": "Nahrávání", + "mic_startRecording": "Spustit nahrávání", + "mic_stopRecording": "Zastavit nahrávání", + "mic_downloadRecording": "Stáhnout nahrávku", + "mic_device": "Zařízení", + "mic_noMicFound": "Nenalezen žádný mikrofon", + "mic_refresh": "Obnovit", + "mic_clipping": "Ořezávání", + "mic_constraints": "Omezení", + "mic_echoCancellation": "Potlačení ozvěny", + "mic_noiseSuppression": "Potlačení šumu", + "mic_agc": "Automatické řízení zisku", + "mic_applyConstraints": "Použít", + "mic_channels": "Kanály", + "mic_stereo": "Stereo", + "mic_requested": "Požadováno", + "mic_obtained": "Získáno", + "mic_peakNow": "Špička", + "mic_peakHold": "Držení špičky", + "mic_resetPeaks": "Resetovat špičky", + "mic_advanced": "Pokročilé", + "mic_default": "Výchozí", + "mic_on": "Zapnuto", + "mic_off": "Vypnuto", + "mic_mono": "Mono" } diff --git a/messages/de.json b/messages/de.json index 36f20cb..465ccd4 100644 --- a/messages/de.json +++ b/messages/de.json @@ -102,5 +102,40 @@ "signalGen_stop": "Stopp", "signalGen_scope": "Oszilloskop", "signalGen_spectrum": "Spektrum", - "signalGen_loop": "Schleife" + "signalGen_loop": "Schleife", + "mic_title": "Mikrofontest", + "mic_startMicrophone": "Mikrofon starten", + "mic_stop": "Stopp", + "mic_monitoringOn": "Monitoring: EIN", + "mic_monitoringOff": "Monitoring: AUS", + "mic_gain": "Verstärkung", + "mic_monitorDelay": "Monitor-Verzögerung", + "mic_sampleRate": "Abtastrate", + "mic_inputDevice": "Eingabegerät", + "mic_volume": "Lautstärke", + "mic_recording": "Aufnahme", + "mic_startRecording": "Aufnahme starten", + "mic_stopRecording": "Aufnahme stoppen", + "mic_downloadRecording": "Aufnahme herunterladen", + "mic_device": "Gerät", + "mic_noMicFound": "Kein Mikrofon gefunden", + "mic_refresh": "Aktualisieren", + "mic_clipping": "Übersteuerung", + "mic_constraints": "Einschränkungen", + "mic_echoCancellation": "Echounterdrückung", + "mic_noiseSuppression": "Rauschunterdrückung", + "mic_agc": "Automatische Verstärkungsregelung", + "mic_applyConstraints": "Anwenden", + "mic_channels": "Kanäle", + "mic_stereo": "Stereo", + "mic_requested": "Angefordert", + "mic_obtained": "Erhalten", + "mic_peakNow": "Spitze", + "mic_peakHold": "Spitze halten", + "mic_resetPeaks": "Spitzen zurücksetzen", + "mic_advanced": "Erweitert", + "mic_default": "Standard", + "mic_on": "Ein", + "mic_off": "Aus", + "mic_mono": "Mono" } diff --git a/messages/en.json b/messages/en.json index fc85633..24f7740 100644 --- a/messages/en.json +++ b/messages/en.json @@ -102,5 +102,40 @@ "signalGen_stop": "Stop", "signalGen_scope": "Oscilloscope", "signalGen_spectrum": "Spectrum", - "signalGen_loop": "Loop" + "signalGen_loop": "Loop", + "mic_title": "Microphone test", + "mic_startMicrophone": "Start microphone", + "mic_stop": "Stop", + "mic_monitoringOn": "Monitoring: ON", + "mic_monitoringOff": "Monitoring: OFF", + "mic_gain": "Gain", + "mic_monitorDelay": "Monitor delay", + "mic_sampleRate": "Sample rate", + "mic_inputDevice": "Input", + "mic_volume": "Volume", + "mic_recording": "Recording", + "mic_startRecording": "Start recording", + "mic_stopRecording": "Stop recording", + "mic_downloadRecording": "Download", + "mic_device": "Device", + "mic_noMicFound": "No microphone found", + "mic_refresh": "Refresh", + "mic_clipping": "Clipping", + "mic_constraints": "Constraints", + "mic_echoCancellation": "Echo cancellation", + "mic_noiseSuppression": "Noise suppression", + "mic_agc": "Auto gain control", + "mic_applyConstraints": "Apply", + "mic_channels": "Channels", + "mic_stereo": "Stereo", + "mic_requested": "Requested", + "mic_obtained": "Obtained", + "mic_peakNow": "Peak", + "mic_peakHold": "Peak hold", + "mic_resetPeaks": "Reset peaks", + "mic_advanced": "Advanced", + "mic_default": "Default", + "mic_on": "On", + "mic_off": "Off", + "mic_mono": "Mono" } diff --git a/messages/es.json b/messages/es.json index ce3e1bf..9d455dc 100644 --- a/messages/es.json +++ b/messages/es.json @@ -102,5 +102,40 @@ "signalGen_stop": "Detener", "signalGen_scope": "Osciloscopio", "signalGen_spectrum": "Espectro", - "signalGen_loop": "Bucle" + "signalGen_loop": "Bucle", + "mic_title": "Prueba de micrófono", + "mic_startMicrophone": "Iniciar micrófono", + "mic_stop": "Detener", + "mic_monitoringOn": "Monitorización: ON", + "mic_monitoringOff": "Monitorización: OFF", + "mic_gain": "Ganancia", + "mic_monitorDelay": "Retraso del monitor", + "mic_sampleRate": "Tasa de muestreo", + "mic_inputDevice": "Dispositivo de entrada", + "mic_volume": "Volumen", + "mic_recording": "Grabación", + "mic_startRecording": "Iniciar grabación", + "mic_stopRecording": "Detener grabación", + "mic_downloadRecording": "Descargar grabación", + "mic_device": "Dispositivo", + "mic_noMicFound": "No se encontró ningún micrófono", + "mic_refresh": "Actualizar", + "mic_clipping": "Recorte", + "mic_constraints": "Restricciones", + "mic_echoCancellation": "Cancelación de eco", + "mic_noiseSuppression": "Supresión de ruido", + "mic_agc": "Control automático de ganancia", + "mic_applyConstraints": "Aplicar", + "mic_channels": "Canales", + "mic_stereo": "Estéreo", + "mic_requested": "Solicitado", + "mic_obtained": "Obtenido", + "mic_peakNow": "Pico", + "mic_peakHold": "Mantener pico", + "mic_resetPeaks": "Restablecer picos", + "mic_advanced": "Avanzado", + "mic_default": "Predeterminado", + "mic_on": "Encendido", + "mic_off": "Apagado", + "mic_mono": "Mono" } diff --git a/messages/fr.json b/messages/fr.json index 8623dfd..2889317 100644 --- a/messages/fr.json +++ b/messages/fr.json @@ -102,5 +102,40 @@ "signalGen_stop": "Arrêter", "signalGen_scope": "Oscilloscope", "signalGen_spectrum": "Spectre", - "signalGen_loop": "Boucle" + "signalGen_loop": "Boucle", + "mic_title": "Test du microphone", + "mic_startMicrophone": "Démarrer le microphone", + "mic_stop": "Arrêter", + "mic_monitoringOn": "Monitoring : ON", + "mic_monitoringOff": "Monitoring : OFF", + "mic_gain": "Gain", + "mic_monitorDelay": "Délai du moniteur", + "mic_sampleRate": "Taux d'échantillonnage", + "mic_inputDevice": "Périphérique d'entrée", + "mic_volume": "Volume", + "mic_recording": "Enregistrement", + "mic_startRecording": "Démarrer l'enregistrement", + "mic_stopRecording": "Arrêter l'enregistrement", + "mic_downloadRecording": "Télécharger l'enregistrement", + "mic_device": "Appareil", + "mic_noMicFound": "Aucun microphone trouvé", + "mic_refresh": "Actualiser", + "mic_clipping": "Écrêtage", + "mic_constraints": "Contraintes", + "mic_echoCancellation": "Annulation de l'écho", + "mic_noiseSuppression": "Suppression du bruit", + "mic_agc": "Contrôle automatique du gain", + "mic_applyConstraints": "Appliquer", + "mic_channels": "Canaux", + "mic_stereo": "Stéréo", + "mic_requested": "Demandé", + "mic_obtained": "Obtenu", + "mic_peakNow": "Pic", + "mic_peakHold": "Maintien du pic", + "mic_resetPeaks": "Réinitialiser les pics", + "mic_advanced": "Avancé", + "mic_default": "Défaut", + "mic_on": "Activé", + "mic_off": "Désactivé", + "mic_mono": "Mono" } diff --git a/messages/ja.json b/messages/ja.json index 328c52a..4e81e8a 100644 --- a/messages/ja.json +++ b/messages/ja.json @@ -102,5 +102,40 @@ "signalGen_stop": "停止", "signalGen_scope": "オシロスコープ", "signalGen_spectrum": "スペクトラム", - "signalGen_loop": "ループ" + "signalGen_loop": "ループ", + "mic_title": "マイクテスト", + "mic_startMicrophone": "マイクを開始", + "mic_stop": "停止", + "mic_monitoringOn": "モニタリング:オン", + "mic_monitoringOff": "モニタリング:オフ", + "mic_gain": "ゲイン", + "mic_monitorDelay": "モニター遅延", + "mic_sampleRate": "サンプルレート", + "mic_inputDevice": "入力デバイス", + "mic_volume": "音量", + "mic_recording": "録音", + "mic_startRecording": "録音を開始", + "mic_stopRecording": "録音を停止", + "mic_downloadRecording": "録音をダウンロード", + "mic_device": "デバイス", + "mic_noMicFound": "マイクが見つかりません", + "mic_refresh": "更新", + "mic_clipping": "クリッピング", + "mic_constraints": "制約", + "mic_echoCancellation": "エコーキャンセル", + "mic_noiseSuppression": "ノイズ抑制", + "mic_agc": "自動ゲインコントロール", + "mic_applyConstraints": "適用", + "mic_channels": "チャンネル", + "mic_stereo": "ステレオ", + "mic_requested": "要求", + "mic_obtained": "取得", + "mic_peakNow": "ピーク", + "mic_peakHold": "ピークホールド", + "mic_resetPeaks": "ピークをリセット", + "mic_advanced": "詳細", + "mic_default": "デフォルト", + "mic_on": "オン", + "mic_off": "オフ", + "mic_mono": "モノラル" } diff --git a/messages/ukr.json b/messages/ukr.json index 0553561..14120eb 100644 --- a/messages/ukr.json +++ b/messages/ukr.json @@ -102,5 +102,40 @@ "signalGen_stop": "Стоп", "signalGen_scope": "Осцилограф", "signalGen_spectrum": "Спектр", - "signalGen_loop": "Цикл" + "signalGen_loop": "Цикл", + "mic_title": "Тест мікрофона", + "mic_startMicrophone": "Почати мікрофон", + "mic_stop": "Зупинити", + "mic_monitoringOn": "Моніторинг: УВІМК", + "mic_monitoringOff": "Моніторинг: ВИМК", + "mic_gain": "Посилення", + "mic_monitorDelay": "Затримка монітора", + "mic_sampleRate": "Частота дискретизації", + "mic_inputDevice": "Пристрій введення", + "mic_volume": "Гучність", + "mic_recording": "Запис", + "mic_startRecording": "Почати запис", + "mic_stopRecording": "Зупинити запис", + "mic_downloadRecording": "Завантажити запис", + "mic_device": "Пристрій", + "mic_noMicFound": "Мікрофон не знайдено", + "mic_refresh": "Оновити", + "mic_clipping": "Відсікання", + "mic_constraints": "Обмеження", + "mic_echoCancellation": "Скасування відлуння", + "mic_noiseSuppression": "Придушення шуму", + "mic_agc": "Автоматичне регулювання посилення", + "mic_applyConstraints": "Застосувати", + "mic_channels": "Канали", + "mic_stereo": "Стерео", + "mic_requested": "Запитано", + "mic_obtained": "Отримано", + "mic_peakNow": "Пік", + "mic_peakHold": "Утримання піку", + "mic_resetPeaks": "Скинути піки", + "mic_advanced": "Розширений", + "mic_default": "За замовчуванням", + "mic_on": "Увімкнено", + "mic_off": "Вимкнено", + "mic_mono": "Моно" } diff --git a/messages/zh-CN.json b/messages/zh-CN.json index dae496e..834a2e6 100644 --- a/messages/zh-CN.json +++ b/messages/zh-CN.json @@ -102,5 +102,40 @@ "signalGen_stop": "停止", "signalGen_scope": "示波器", "signalGen_spectrum": "频谱图", - "signalGen_loop": "循环" + "signalGen_loop": "循环", + "mic_title": "麦克风测试", + "mic_startMicrophone": "开始麦克风", + "mic_stop": "停止", + "mic_monitoringOn": "监听:开", + "mic_monitoringOff": "监听:关", + "mic_gain": "增益", + "mic_monitorDelay": "监听延迟", + "mic_sampleRate": "采样率", + "mic_inputDevice": "输入设备", + "mic_volume": "音量", + "mic_recording": "录音", + "mic_startRecording": "开始录音", + "mic_stopRecording": "停止录音", + "mic_downloadRecording": "下载录音", + "mic_device": "设备", + "mic_noMicFound": "未找到麦克风", + "mic_refresh": "刷新", + "mic_clipping": "削波", + "mic_constraints": "约束", + "mic_echoCancellation": "回声消除", + "mic_noiseSuppression": "噪声抑制", + "mic_agc": "自动增益控制", + "mic_applyConstraints": "应用", + "mic_channels": "声道", + "mic_stereo": "立体声", + "mic_requested": "已请求", + "mic_obtained": "已获取", + "mic_peakNow": "峰值", + "mic_peakHold": "峰值保持", + "mic_resetPeaks": "重置峰值", + "mic_advanced": "高级", + "mic_default": "默认", + "mic_on": "开", + "mic_off": "关", + "mic_mono": "单声道" } diff --git a/src/routes/(pages)/+page.svelte b/src/routes/(pages)/+page.svelte index 89d37e3..288cc5c 100644 --- a/src/routes/(pages)/+page.svelte +++ b/src/routes/(pages)/+page.svelte @@ -97,8 +97,7 @@ { id: 'microphone', icon: 'ti-microphone', - categories: ['inputs', 'audio'], - disabled: true + categories: ['inputs', 'audio'] }, { id: 'sensors', diff --git a/src/routes/(pages)/microphone/+page.svelte b/src/routes/(pages)/microphone/+page.svelte index e69de29..c059e0b 100644 --- a/src/routes/(pages)/microphone/+page.svelte +++ b/src/routes/(pages)/microphone/+page.svelte @@ -0,0 +1,622 @@ + + +
+

{m.mic_title()}

+ +
+
+ + + +
+ +
+ + +
+ +
+ + +
+ +
+ {m.mic_advanced()} +
+
{m.mic_constraints()}
+ + + + +
+ +
+
+ {m.mic_requested()}: EC={reqEchoCancellation === null + ? '–' + : reqEchoCancellation + ? 'on' + : 'off'}, NS={reqNoiseSuppression === null + ? '–' + : reqNoiseSuppression + ? 'on' + : 'off'}, AGC={reqAGC === null ? '–' : reqAGC ? 'on' : 'off'} +
+
+ {m.mic_obtained()}: EC={(obtainedEchoCancellation ?? + '–') as unknown as string}, NS={(obtainedNoiseSuppression ?? '–') as unknown as string}, + AGC={(obtainedAGC ?? '–') as unknown as string} +
+
+
+
+ +
+
{m.mic_sampleRate()}: {sampleRate ?? '–'} Hz
+ {#if deviceLabel} +
{m.mic_inputDevice()}: {deviceLabel}
+ {/if} +
+ {m.mic_channels()}: + {#if channels === null} + – + {:else if channels === 1} + 1 ({m.mic_mono()}) + {:else if channels === 2} + 2 ({m.mic_stereo()}) + {:else} + {channels} + {/if} +
+
+ +
+
{m.mic_volume()}
+
+
+ {#if peakHold > 0} +
+ {/if} +
+
+ {m.mic_peakNow()}: {(20 * Math.log10(Math.max(1e-5, peak))).toFixed(1)} dBFS · + {m.mic_peakHold()}: {(20 * Math.log10(Math.max(1e-5, peakHold))).toFixed(1)} dBFS · RMS: {( + 20 * Math.log10(Math.max(1e-5, volume)) + ).toFixed(1)} dBFS + +
+ {#if clipping} +
{m.mic_clipping()}
+ {/if} +
+ +
+ {#if analyserTime && analyserFreq} + + + {/if} +
+ +
+

{m.mic_recording()}

+
+ + +
+ {#if recordingUrl} + + {m.mic_downloadRecording()} + {/if} +
+
+ +