Text to Speech: Speed-control (#7918)

* speed-control

* added additional languages
This commit is contained in:
Antonio Fernandez
2026-04-24 14:20:46 -04:00
committed by GitHub
parent 53d027c43e
commit 7a7e820f29
7 changed files with 99 additions and 1 deletions
+1
Submodule app/device_logs added at 0a4f9e8f51
Submodule app/language_model added at cdf6c56565
+6
View File
@@ -184,6 +184,12 @@
$apps[$x]['db'][$y]['fields'][$z]['search'] = 'true';
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "";
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "recording_speed";
$apps[$x]['db'][$y]['fields'][$z]['type']['pgsql'] = "numeric";
$apps[$x]['db'][$y]['fields'][$z]['type']['sqlite'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['type']['mysql'] = "decimal(4,2)";
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "Speech speed (0.25 to 4.0, default 1.0).";
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "recording_message";
$apps[$x]['db'][$y]['fields'][$z]['type'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['search'] = 'true';
+54
View File
@@ -648,6 +648,60 @@ $text['description-voice']['zh-cn'] = "选择用于录音的声音。";
$text['description-voice']['ja-jp'] = "録音に使用する音声を選択します。";
$text['description-voice']['ko-kr'] = "녹음에 사용되는 음성을 선택합니다.";
$text['label-speed']['en-us'] = "Speed";
$text['label-speed']['en-gb'] = "Speed";
$text['label-speed']['ar-eg'] = "سرعة";
$text['label-speed']['de-at'] = "Geschwindigkeit";
$text['label-speed']['de-ch'] = "Geschwindigkeit";
$text['label-speed']['de-de'] = "Geschwindigkeit";
$text['label-speed']['el-gr'] = "Ταχύτητα";
$text['label-speed']['es-cl'] = "Velocidad";
$text['label-speed']['es-mx'] = "Velocidad";
$text['label-speed']['fr-ca'] = "Vitesse";
$text['label-speed']['fr-fr'] = "Vitesse";
$text['label-speed']['he-il'] = "מהירות";
$text['label-speed']['it-it'] = "Velocità";
$text['label-speed']['ka-ge'] = "სიჩქარე";
$text['label-speed']['nl-nl'] = "Snelheid";
$text['label-speed']['pl-pl'] = "Prędkość";
$text['label-speed']['pt-br'] = "Velocidade";
$text['label-speed']['pt-pt'] = "Velocidade";
$text['label-speed']['ro-ro'] = "Viteză";
$text['label-speed']['ru-ru'] = "Скорость";
$text['label-speed']['sv-se'] = "Hastighet";
$text['label-speed']['uk-ua'] = "Швидкість";
$text['label-speed']['tr-tr'] = "Hız";
$text['label-speed']['zh-cn'] = "速度";
$text['label-speed']['ja-jp'] = "速度";
$text['label-speed']['ko-kr'] = "속도";
$text['description-speed']['en-us'] = "Select the speech speed (1.0 is normal).";
$text['description-speed']['en-gb'] = "Select the speech speed (1.0 is normal).";
$text['description-speed']['ar-eg'] = "حدد سرعة الكلام (1.0 طبيعي).";
$text['description-speed']['de-at'] = "Wählen Sie die Sprachgeschwindigkeit aus (1.0 ist normal).";
$text['description-speed']['de-ch'] = "Wählen Sie die Sprachgeschwindigkeit aus (1.0 ist normal).";
$text['description-speed']['de-de'] = "Wählen Sie die Sprachgeschwindigkeit aus (1.0 ist normal).";
$text['description-speed']['el-gr'] = "Επιλέξτε την ταχύτητα ομιλίας (1.0 είναι κανονική).";
$text['description-speed']['es-cl'] = "Seleccione la velocidad de voz (1.0 es normal).";
$text['description-speed']['es-mx'] = "Seleccione la velocidad de voz (1.0 es normal).";
$text['description-speed']['fr-ca'] = "Sélectionnez la vitesse de parole (1.0 est normal).";
$text['description-speed']['fr-fr'] = "Sélectionnez la vitesse de parole (1.0 est normal).";
$text['description-speed']['he-il'] = "בחר את מהירות הדיבור (1.0 רגיל).";
$text['description-speed']['it-it'] = "Seleziona la velocità del parlato (1.0 è normale).";
$text['description-speed']['ka-ge'] = "აირჩიეთ მეტყველების სიჩქარე (1.0 ნორმალურია).";
$text['description-speed']['nl-nl'] = "Selecteer de spraaksnelheid (1.0 is normaal).";
$text['description-speed']['pl-pl'] = "Wybierz prędkość mowy (1.0 jest normalna).";
$text['description-speed']['pt-br'] = "Selecione a velocidade de fala (1.0 é normal).";
$text['description-speed']['pt-pt'] = "Selecione a velocidade de fala (1.0 é normal).";
$text['description-speed']['ro-ro'] = "Selectați viteza de vorbire (1.0 este normală).";
$text['description-speed']['ru-ru'] = "Выберите скорость речи (1.0 — нормальная).";
$text['description-speed']['sv-se'] = "Välj talhastigheten (1.0 är normal).";
$text['description-speed']['uk-ua'] = "Виберіть швидкість мовлення (1.0 — нормальна).";
$text['description-speed']['tr-tr'] = "Konuşma hızını seçin (1.0 normaldir).";
$text['description-speed']['zh-cn'] = "选择语音速度(1.0 为正常)。";
$text['description-speed']['ja-jp'] = "音声速度を選択します(1.0 が通常です)。";
$text['description-speed']['ko-kr'] = "음성 속도를 선택하세요(1.0이 보통).";
$text['label-message']['en-us'] = "Message";
$text['label-message']['en-gb'] = "Message";
$text['label-message']['ar-eg'] = "رسالة";
+35 -1
View File
@@ -43,7 +43,10 @@
$recording_name = '';
$recording_message = '';
$recording_description = '';
$recording_speed = '1.0';
$recording_uuid = '';
$speed_enabled = false;
$speed_options = [];
$translate_enabled = false;
$language_enabled = false;
@@ -64,6 +67,8 @@
$speech = new speech($settings);
$voices = $speech->get_voices();
$recording_extension = $speech->get_format();
$speed_enabled = $speech->is_speed_enabled();
$speed_options = $speed_enabled ? $speech->get_speed_options() : [];
//$speech_models = $speech->get_models();
//$translate_enabled = $speech->get_translate_enabled();
//$language_enabled = $speech->get_language_enabled();
@@ -131,6 +136,8 @@
//$recording_language = $_POST["recording_language"];
//$translate = $_POST["translate"];
$recording_voice = $_POST["recording_voice"];
$recording_speed_allowed = array_keys($speed_options ?? []);
$recording_speed = (!empty($recording_speed_allowed) && in_array($_POST["recording_speed"] ?? '', $recording_speed_allowed)) ? $_POST["recording_speed"] : '1.0';
$recording_message = $_POST["recording_message"];
$recording_description = $_POST["recording_description"];
@@ -259,6 +266,9 @@
$speech->audio_filename = $recording_filename;
//$speech->audio_model = $recording_model ?? '';
$speech->audio_voice = $recording_voice;
if ($speed_enabled) {
$speech->audio_speed = (float)$recording_speed;
}
//$speech->audio_language = $recording_language;
//$speech->audio_translate = $translate;
$speech->audio_message = $recording_message;
@@ -276,6 +286,7 @@
}
unset($recording_filename_temp);
}
}
//audio to text - get the transcription from the audio file
@@ -296,6 +307,9 @@
}
if ($speech_enabled || $transcribe_enabled) {
$array['recordings'][0]['recording_voice'] = $recording_voice;
if ($speed_enabled) {
$array['recordings'][0]['recording_speed'] = $recording_speed;
}
$array['recordings'][0]['recording_message'] = $recording_message;
}
$array['recordings'][0]['recording_description'] = $recording_description;
@@ -318,7 +332,7 @@
if (!empty($_GET) && empty($_POST["persistformvar"])) {
$recording_uuid = $_GET["id"];
$sql = "select recording_name, recording_filename, ";
$sql .= "recording_voice, recording_message, recording_description ";
$sql .= "recording_voice, recording_speed, recording_message, recording_description ";
$sql .= "from v_recordings ";
$sql .= "where domain_uuid = :domain_uuid ";
$sql .= "and recording_uuid = :recording_uuid ";
@@ -329,6 +343,7 @@
$recording_filename = $row["recording_filename"];
$recording_name = $row["recording_name"];
$recording_voice = $row["recording_voice"];
$recording_speed = !empty($row["recording_speed"]) ? $row["recording_speed"] : '1.0';
$recording_message = $row["recording_message"];
$recording_description = $row["recording_description"];
}
@@ -478,6 +493,25 @@
echo "</td>\n";
echo "</tr>\n";
//speed
if ($speed_enabled) {
echo "<tr>\n";
echo "<td class='vncell' valign='top' align='left' nowrap>\n";
echo " ".($text['label-speed'] ?? 'Speed')."\n";
echo "</td>\n";
echo "<td class='vtable' align='left'>\n";
echo " <select class='formfld' name='recording_speed' style='width: 120px;'>\n";
foreach ($speed_options as $speed_value => $speed_label) {
$selected = (string)$recording_speed === $speed_value ? "selected='selected'" : '';
echo " <option value='".escape($speed_value)."' $selected>".escape($speed_label)."</option>\n";
}
echo " </select>\n";
echo "<br />\n";
echo ($text['description-speed'] ?? 'Select the speech speed (1.0 is normal).')."\n";
echo "</td>\n";
echo "</tr>\n";
}
if ($language_enabled) {
echo "<tr>\n";
echo "<td class='vncell' valign='top' align='left' nowrap>\n";
Submodule
+1
Submodule app/speech added at f33e33f09d
+1
Submodule app/transcribe added at 5230939cb3