From b678c6e9ceea042d5d204e420791c1cc6cdfb5a0 Mon Sep 17 00:00:00 2001 From: fusionate Date: Fri, 31 May 2024 15:01:09 -0600 Subject: [PATCH] Recording - Edit: Fix waveform generation for newly created OpenAI generated audio files, misc adjustments. --- app/recordings/recording_edit.php | 75 +++++++++++++++++-------------- 1 file changed, 41 insertions(+), 34 deletions(-) diff --git a/app/recordings/recording_edit.php b/app/recordings/recording_edit.php index 186411d410..f577c854ac 100644 --- a/app/recordings/recording_edit.php +++ b/app/recordings/recording_edit.php @@ -84,37 +84,39 @@ //get the form value and set to php variables if (!empty($_POST)) { - $recording_filename = $_POST["recording_filename"]; - $recording_filename_original = $_POST["recording_filename_original"]; + $recording_filename = $_POST["recording_filename"] ?? ''; + $recording_filename_original = $_POST["recording_filename_original"] ?? ''; $recording_name = $_POST["recording_name"]; $recording_voice = $_POST["recording_voice"]; $recording_model = $_POST["recording_model"]; - $recording_language = $_POST["recording_language"]; + //$recording_language = $_POST["recording_language"]; //$translate = $_POST["translate"]; $recording_message = $_POST["recording_message"]; $recording_description = $_POST["recording_description"]; //sanitize recording filename and name - $recording_filename_ext = strtolower(pathinfo($recording_filename, PATHINFO_EXTENSION)); - if (!in_array($recording_filename_ext, ['wav','mp3','ogg'])) { - $recording_filename = pathinfo($recording_filename, PATHINFO_FILENAME); - $recording_filename = str_replace('.', '', $recording_filename); + if (!empty($recording_filename)) { + $recording_filename_ext = strtolower(pathinfo($recording_filename, PATHINFO_EXTENSION)); + if (!in_array($recording_filename_ext, ['wav','mp3','ogg'])) { + $recording_filename = pathinfo($recording_filename, PATHINFO_FILENAME); + $recording_filename = str_replace('.', '', $recording_filename); + } + $recording_filename = str_replace("\\", '', $recording_filename); + $recording_filename = str_replace('/', '', $recording_filename); + $recording_filename = str_replace('..', '', $recording_filename); + $recording_filename = str_replace(' ', '-', $recording_filename); + $recording_filename = str_replace("'", '', $recording_filename); } - $recording_filename = str_replace("\\", '', $recording_filename); - $recording_filename = str_replace('/', '', $recording_filename); - $recording_filename = str_replace('..', '', $recording_filename); - $recording_filename = str_replace(' ', '-', $recording_filename); - $recording_filename = str_replace("'", '', $recording_filename); $recording_name = str_replace("'", '', $recording_name); } //process the HTTP POST if (!empty($_POST) && empty($_POST["persistformvar"])) { //get recording uuid to edit - $recording_uuid = $_POST["recording_uuid"]; + $recording_uuid = $_POST["recording_uuid"] ?? ''; //delete the recording if (permission_exists('recording_delete')) { - if ($_POST['action'] == 'delete' && is_uuid($recording_uuid)) { + if (!empty($_POST['action']) && $_POST['action'] == 'delete' && is_uuid($recording_uuid)) { //prepare $array[0]['checked'] = 'true'; $array[0]['uuid'] = $recording_uuid; @@ -154,7 +156,7 @@ return; } - //add the bridge_uuid + //add the recording_uuid if (empty($recording_uuid)) { $recording_uuid = uuid(); } @@ -164,16 +166,15 @@ // $recording_model = $settings->get('speech', 'model', ''); //} - //set the recording format - if (empty($recording_format)) { - $recording_format = 'wav'; - } - //update the database if (empty($_POST["persistformvar"])) { if (permission_exists('recording_edit')) { + + //set the recording format + $recording_format = $recording_format ?? 'wav'; + //if file name is not the same then rename the file - if ($recording_filename != $recording_filename_original) { + if (!empty($recording_filename) && !empty($recording_filename_original) && $recording_filename != $recording_filename_original) { rename($_SESSION['switch']['recordings']['dir'].'/'.$_SESSION['domain_name'].'/'.$recording_filename_original, $_SESSION['switch']['recordings']['dir'].'/'.$_SESSION['domain_name'].'/'.$recording_filename); } @@ -201,6 +202,16 @@ //$speech->audio_translate = $translate; $speech->audio_message = $recording_message; $speech->speech(); + + //fix invalid riff & data header lengths in generated wave file + if ($speech_engine == 'openai') { + $recording_filename_temp = str_replace('.'.$recording_format, '.tmp.'.$recording_format, $recording_filename); + exec('sox --ignore-length '.$recording_path.'/'.$recording_filename.' '.$recording_path.'/'.$recording_filename_temp); + if (file_exists($recording_path.'/'.$recording_filename_temp)) { + exec('rm -f '.$recording_path.'/'.$recording_filename.' && mv '.$recording_path.'/'.$recording_filename_temp.' '.$recording_path.'/'.$recording_filename); + } + unset($recording_filename_temp); + } } //audio to text - get the transcription from the audio file @@ -321,8 +332,8 @@ echo "\n"; echo " \n"; echo "
\n"; @@ -343,12 +354,8 @@ if (!empty($voices)) { echo " \n"; } @@ -370,8 +377,8 @@ sort($languages); echo " \n"; } @@ -392,14 +399,14 @@ echo "\n"; if (substr($_SESSION['theme']['input_toggle_style']['text'], 0, 6) == 'switch') { echo " \n"; } else { echo " \n"; } echo "
\n";