Skip to content

Commit 8251307

Browse files
committed
Stabilize reader recording controls and browser tests
1 parent 4ca963f commit 8251307

18 files changed

Lines changed: 314 additions & 42 deletions

AGENTS.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,9 @@ Rule format:
8585
- Learn RSVP focus layout is a hard stability contract: the ORP focus letter, focus row, and next-phrase region must keep fixed screen positions and fixed reserved heights while words and phrase text change; next-phrase wrapping must clamp inside its reserved area instead of moving the focus word vertically.
8686
- Teleprompter `Read Width` must map honestly to the visible reading lane: at `100%` it must not keep extra internal container padding or shrink-to-content gutters that make the text block visibly narrower than the width guides.
8787
- Teleprompter reader media controls must keep background media and recording capture as separate concepts: background camera or video-file playback is stage scenery, while recording explicitly captures microphone-only or camera-plus-microphone from user-selected devices that default to Settings selections.
88+
- Teleprompter reader background-media controls must look visually distinct from recording capture controls; background media is the layer for camera preview, video files, or video URLs, while recording camera controls choose what gets captured.
8889
- Teleprompter reader recording must show a live, unobtrusive audio-level indicator while armed or recording so the user can confirm microphone input is present before and during rehearsal capture.
90+
- Teleprompter reader recording controls must stay compact in the transport bar: use icon-sized buttons/dropdowns for record mode and capture devices, and surface active capture with a small live indicator instead of wide text-heavy controls.
8991
- Browser media settings must expose supported audio/video capture options used by the app and LiveKit path, including device selection and audio processing controls such as echo cancellation, noise suppression, automatic gain control, voice isolation when available, channel count, sample rate, and sample size where the browser/runtime supports them.
9092
- The TPS editor migration to Monaco must be complete: syntax coloring, IntelliSense/autocomplete, hover or inline tooltip help, decorations, and TPS authoring feedback must be Monaco-native instead of split across legacy overlay or hidden-textarea behavior.
9193
- TPS authoring completeness must be checked against the upstream `managedcode/TPS` README, not only the currently shipped editor menus, so new editor support stays aligned with the full spec for emotions, delivery, pauses, speed, pronunciation, and related cues.

src/PrompterOne.Shared/Localization/SharedResource.de.resx

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3201,6 +3201,9 @@
32013201
<data name="TeleprompterAttachCameraMessage" xml:space="preserve">
32023202
<value>Die Teleprompter-Kamera kann nicht aktiviert werden.</value>
32033203
</data>
3204+
<data name="TeleprompterBackgroundMediaTooltip" xml:space="preserve">
3205+
<value>Hintergrund-Medienebene</value>
3206+
</data>
32043207
<data name="TeleprompterStartRecordingMessage" xml:space="preserve">
32053208
<value>Die Reader-Aufnahme kann nicht gestartet werden.</value>
32063209
</data>
@@ -3213,9 +3216,18 @@
32133216
<data name="TeleprompterRecordingActiveStatus" xml:space="preserve">
32143217
<value>Aufnahme läuft</value>
32153218
</data>
3219+
<data name="TeleprompterRecordingCameraTooltip" xml:space="preserve">
3220+
<value>Aufnahmekamera</value>
3221+
</data>
32163222
<data name="TeleprompterRecordingLevelLabel" xml:space="preserve">
32173223
<value>Mikrofonpegel der Aufnahme</value>
32183224
</data>
3225+
<data name="TeleprompterRecordingMicrophoneTooltip" xml:space="preserve">
3226+
<value>Aufnahmemikrofon</value>
3227+
</data>
3228+
<data name="TeleprompterRecordingModeTooltip" xml:space="preserve">
3229+
<value>Aufnahmemodus</value>
3230+
</data>
32193231
<data name="TeleprompterRecordingNoCameraStatus" xml:space="preserve">
32203232
<value>Wähle eine Kamera für die Videoaufnahme.</value>
32213233
</data>

src/PrompterOne.Shared/Localization/SharedResource.es.resx

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3201,6 +3201,9 @@
32013201
<data name="TeleprompterAttachCameraMessage" xml:space="preserve">
32023202
<value>No se puede habilitar la cámara del teleprompter.</value>
32033203
</data>
3204+
<data name="TeleprompterBackgroundMediaTooltip" xml:space="preserve">
3205+
<value>Capa multimedia de fondo</value>
3206+
</data>
32043207
<data name="TeleprompterStartRecordingMessage" xml:space="preserve">
32053208
<value>No se puede iniciar la grabación del lector.</value>
32063209
</data>
@@ -3213,9 +3216,18 @@
32133216
<data name="TeleprompterRecordingActiveStatus" xml:space="preserve">
32143217
<value>Grabando</value>
32153218
</data>
3219+
<data name="TeleprompterRecordingCameraTooltip" xml:space="preserve">
3220+
<value>Cámara de grabación</value>
3221+
</data>
32163222
<data name="TeleprompterRecordingLevelLabel" xml:space="preserve">
32173223
<value>Nivel del micrófono de grabación</value>
32183224
</data>
3225+
<data name="TeleprompterRecordingMicrophoneTooltip" xml:space="preserve">
3226+
<value>Micrófono de grabación</value>
3227+
</data>
3228+
<data name="TeleprompterRecordingModeTooltip" xml:space="preserve">
3229+
<value>Modo de grabación</value>
3230+
</data>
32193231
<data name="TeleprompterRecordingNoCameraStatus" xml:space="preserve">
32203232
<value>Selecciona una cámara para grabar video.</value>
32213233
</data>

src/PrompterOne.Shared/Localization/SharedResource.fr.resx

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3201,6 +3201,9 @@
32013201
<data name="TeleprompterAttachCameraMessage" xml:space="preserve">
32023202
<value>Impossible d'activer la caméra du téléprompteur.</value>
32033203
</data>
3204+
<data name="TeleprompterBackgroundMediaTooltip" xml:space="preserve">
3205+
<value>Calque média d'arrière-plan</value>
3206+
</data>
32043207
<data name="TeleprompterStartRecordingMessage" xml:space="preserve">
32053208
<value>Impossible de démarrer l'enregistrement du lecteur.</value>
32063209
</data>
@@ -3213,9 +3216,18 @@
32133216
<data name="TeleprompterRecordingActiveStatus" xml:space="preserve">
32143217
<value>Enregistrement</value>
32153218
</data>
3219+
<data name="TeleprompterRecordingCameraTooltip" xml:space="preserve">
3220+
<value>Caméra d'enregistrement</value>
3221+
</data>
32163222
<data name="TeleprompterRecordingLevelLabel" xml:space="preserve">
32173223
<value>Niveau du microphone d'enregistrement</value>
32183224
</data>
3225+
<data name="TeleprompterRecordingMicrophoneTooltip" xml:space="preserve">
3226+
<value>Microphone d'enregistrement</value>
3227+
</data>
3228+
<data name="TeleprompterRecordingModeTooltip" xml:space="preserve">
3229+
<value>Mode d'enregistrement</value>
3230+
</data>
32193231
<data name="TeleprompterRecordingNoCameraStatus" xml:space="preserve">
32203232
<value>Sélectionnez une caméra pour enregistrer la vidéo.</value>
32213233
</data>

src/PrompterOne.Shared/Localization/SharedResource.it.resx

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3201,6 +3201,9 @@
32013201
<data name="TeleprompterAttachCameraMessage" xml:space="preserve">
32023202
<value>Impossibile abilitare la fotocamera del teleprompter.</value>
32033203
</data>
3204+
<data name="TeleprompterBackgroundMediaTooltip" xml:space="preserve">
3205+
<value>Livello multimediale di sfondo</value>
3206+
</data>
32043207
<data name="TeleprompterStartRecordingMessage" xml:space="preserve">
32053208
<value>Impossibile avviare la registrazione del reader.</value>
32063209
</data>
@@ -3213,9 +3216,18 @@
32133216
<data name="TeleprompterRecordingActiveStatus" xml:space="preserve">
32143217
<value>Registrazione</value>
32153218
</data>
3219+
<data name="TeleprompterRecordingCameraTooltip" xml:space="preserve">
3220+
<value>Videocamera di registrazione</value>
3221+
</data>
32163222
<data name="TeleprompterRecordingLevelLabel" xml:space="preserve">
32173223
<value>Livello microfono registrazione</value>
32183224
</data>
3225+
<data name="TeleprompterRecordingMicrophoneTooltip" xml:space="preserve">
3226+
<value>Microfono di registrazione</value>
3227+
</data>
3228+
<data name="TeleprompterRecordingModeTooltip" xml:space="preserve">
3229+
<value>Modalità di registrazione</value>
3230+
</data>
32193231
<data name="TeleprompterRecordingNoCameraStatus" xml:space="preserve">
32203232
<value>Seleziona una fotocamera per registrare il video.</value>
32213233
</data>

src/PrompterOne.Shared/Localization/SharedResource.pt.resx

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3201,6 +3201,9 @@
32013201
<data name="TeleprompterAttachCameraMessage" xml:space="preserve">
32023202
<value>Não é possível ativar a câmera do teleprompter.</value>
32033203
</data>
3204+
<data name="TeleprompterBackgroundMediaTooltip" xml:space="preserve">
3205+
<value>Camada de mídia de fundo</value>
3206+
</data>
32043207
<data name="TeleprompterStartRecordingMessage" xml:space="preserve">
32053208
<value>Não é possível iniciar a gravação do leitor.</value>
32063209
</data>
@@ -3213,9 +3216,18 @@
32133216
<data name="TeleprompterRecordingActiveStatus" xml:space="preserve">
32143217
<value>Gravando</value>
32153218
</data>
3219+
<data name="TeleprompterRecordingCameraTooltip" xml:space="preserve">
3220+
<value>Câmera de gravação</value>
3221+
</data>
32163222
<data name="TeleprompterRecordingLevelLabel" xml:space="preserve">
32173223
<value>Nível do microfone de gravação</value>
32183224
</data>
3225+
<data name="TeleprompterRecordingMicrophoneTooltip" xml:space="preserve">
3226+
<value>Microfone de gravação</value>
3227+
</data>
3228+
<data name="TeleprompterRecordingModeTooltip" xml:space="preserve">
3229+
<value>Modo de gravação</value>
3230+
</data>
32193231
<data name="TeleprompterRecordingNoCameraStatus" xml:space="preserve">
32203232
<value>Selecione uma câmera para gravar vídeo.</value>
32213233
</data>

src/PrompterOne.Shared/Localization/SharedResource.resx

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3201,6 +3201,9 @@
32013201
<data name="TeleprompterAttachCameraMessage" xml:space="preserve">
32023202
<value>Unable to enable the teleprompter camera.</value>
32033203
</data>
3204+
<data name="TeleprompterBackgroundMediaTooltip" xml:space="preserve">
3205+
<value>Background media layer</value>
3206+
</data>
32043207
<data name="TeleprompterStartRecordingMessage" xml:space="preserve">
32053208
<value>Unable to start reader recording.</value>
32063209
</data>
@@ -3213,9 +3216,18 @@
32133216
<data name="TeleprompterRecordingActiveStatus" xml:space="preserve">
32143217
<value>Recording</value>
32153218
</data>
3219+
<data name="TeleprompterRecordingCameraTooltip" xml:space="preserve">
3220+
<value>Recording camera</value>
3221+
</data>
32163222
<data name="TeleprompterRecordingLevelLabel" xml:space="preserve">
32173223
<value>Recording microphone level</value>
32183224
</data>
3225+
<data name="TeleprompterRecordingMicrophoneTooltip" xml:space="preserve">
3226+
<value>Recording microphone</value>
3227+
</data>
3228+
<data name="TeleprompterRecordingModeTooltip" xml:space="preserve">
3229+
<value>Recording mode</value>
3230+
</data>
32193231
<data name="TeleprompterRecordingNoCameraStatus" xml:space="preserve">
32203232
<value>Select a camera to record video.</value>
32213233
</data>

src/PrompterOne.Shared/Localization/SharedResource.uk.resx

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3201,6 +3201,9 @@
32013201
<data name="TeleprompterAttachCameraMessage" xml:space="preserve">
32023202
<value>Не вдається ввімкнути камеру телесуфлера.</value>
32033203
</data>
3204+
<data name="TeleprompterBackgroundMediaTooltip" xml:space="preserve">
3205+
<value>Фоновий медіашар</value>
3206+
</data>
32043207
<data name="TeleprompterStartRecordingMessage" xml:space="preserve">
32053208
<value>Не вдається почати запис у рідері.</value>
32063209
</data>
@@ -3213,9 +3216,18 @@
32133216
<data name="TeleprompterRecordingActiveStatus" xml:space="preserve">
32143217
<value>Записується</value>
32153218
</data>
3219+
<data name="TeleprompterRecordingCameraTooltip" xml:space="preserve">
3220+
<value>Камера для запису</value>
3221+
</data>
32163222
<data name="TeleprompterRecordingLevelLabel" xml:space="preserve">
32173223
<value>Рівень мікрофона запису</value>
32183224
</data>
3225+
<data name="TeleprompterRecordingMicrophoneTooltip" xml:space="preserve">
3226+
<value>Мікрофон для запису</value>
3227+
</data>
3228+
<data name="TeleprompterRecordingModeTooltip" xml:space="preserve">
3229+
<value>Режим запису</value>
3230+
</data>
32193231
<data name="TeleprompterRecordingNoCameraStatus" xml:space="preserve">
32203232
<value>Оберіть камеру для запису відео.</value>
32213233
</data>

src/PrompterOne.Shared/Localization/UiTextKey.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -359,11 +359,15 @@ public enum UiTextKey
359359
LearnNotesEmpty,
360360
TeleprompterLoadMessage,
361361
TeleprompterAttachCameraMessage,
362+
TeleprompterBackgroundMediaTooltip,
362363
TeleprompterStartRecordingMessage,
363364
TeleprompterStartRecordingTooltip,
364365
TeleprompterStopRecordingTooltip,
365366
TeleprompterRecordingActiveStatus,
367+
TeleprompterRecordingCameraTooltip,
366368
TeleprompterRecordingLevelLabel,
369+
TeleprompterRecordingMicrophoneTooltip,
370+
TeleprompterRecordingModeTooltip,
367371
TeleprompterRecordingNoCameraStatus,
368372
TeleprompterRecordingNoMicrophoneStatus,
369373
TeleprompterRecordingReadyStatus,

src/PrompterOne.Shared/Teleprompter/Pages/TeleprompterPage.ReaderRecording.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,12 @@ public partial class TeleprompterPage
3333

3434
private string ReaderRecordingLevelLabel => Text(UiTextKey.TeleprompterRecordingLevelLabel);
3535

36+
private string ReaderRecordingCameraTooltip => Text(UiTextKey.TeleprompterRecordingCameraTooltip);
37+
38+
private string ReaderRecordingMicrophoneTooltip => Text(UiTextKey.TeleprompterRecordingMicrophoneTooltip);
39+
40+
private string ReaderRecordingModeTooltip => Text(UiTextKey.TeleprompterRecordingModeTooltip);
41+
3642
private string ReaderRecordingStatusLabel =>
3743
string.IsNullOrWhiteSpace(_readerRecordingStatus)
3844
? Text(UiTextKey.TeleprompterRecordingReadyStatus)

0 commit comments

Comments
 (0)