lh 4 月之前
父節點
當前提交
5ca982726a
共有 1 個文件被更改,包括 49 次插入1 次删除
  1. 49 1
      app/Services/Anime/AnimeService.php

+ 49 - 1
app/Services/Anime/AnimeService.php

@@ -1016,8 +1016,56 @@ class AnimeService
             ];
 
             if ($segment_content) {
+                // 先将segment_content赋值到update_data
+                $update_data['segment_content'] = $segment_content;
+                
                 // 使用现有方法分析segment_content,提取各个字段
                 $this->handleSegmentContent($update_data);
+                
+                // 如果有对话内容,创建视频配音合成任务
+                if (getProp($update_data, 'dialogue')) {
+                    $now = date('Y-m-d H:i:s');
+                    $generate_json = [
+                        'text' => getProp($update_data, 'dialogue'),
+                        'role' => getProp($update_data, 'voice_actor'),
+                        'voice_type' => getProp($update_data, 'voice_type'),
+                        'voice_name' => getProp($update_data, 'voice_name'),
+                        'emotion' => getProp($update_data, 'emotion'),
+                        'emotion_type' => getProp($update_data, 'emotion_type'),
+                        'gender' => getProp($update_data, 'gender'),
+                        'speed_ratio' => getProp($update_data, 'speed_ratio', 0),
+                        'loudness_ratio' => getProp($update_data, 'loudness_ratio', 0),
+                        'emotion_scale' => getProp($update_data, 'emotion_scale', 0),
+                        'pitch' => getProp($update_data, 'pitch', 0),
+                    ];
+                    
+                    // 插入视频配音合成任务
+                    $dubTaskId = DB::table('mp_dub_video_tasks')->insertGetId([
+                        'alias_segment_id' => $segment_id,
+                        'generate_status' => '执行中',
+                        'audio_url' => '',
+                        'generate_json' => json_encode($generate_json, 256),
+                        'created_at' => $now,
+                        'updated_at' => $now,
+                    ]);
+                    
+                    if (!$dubTaskId) {
+                        Utils::throwError('20003:创建配音任务失败!');
+                    }
+                    
+                    // 请求远程服务器执行生成
+                    $client = new Client(['timeout' => 300, 'verify' => false]);
+                    $result = $client->get("http://122.9.129.83:5000/api/anime/genAudio?taskId={$dubTaskId}");
+                    $response = $result->getBody()->getContents();
+                    $response_arr = json_decode($response, true);
+                    if (!isset($response_arr['code']) || (int)$response_arr['code'] !== 0) {
+                        $error_msg = isset($response_arr['msg']) ? $response_arr['msg'] : '未知错误';
+                        dLog('anime')->error('火山生成音频失败', ['error' => $error_msg, 'task_id' => $dubTaskId]);
+                        logDB('anime', 'error', '火山生成音频失败', ['error' => $error_msg, 'task_id' => $dubTaskId]);
+                        Utils::throwError('20003:火山生成音频失败');
+                    }
+                    $update_data['audio_url'] = '';
+                }
             }
 
             if ($image_url) {
@@ -1888,7 +1936,7 @@ class AnimeService
             unset($segment['id']);
             $segment['segment_number'] += 1;
             $segment['segment_id'] = date('YmdHis') . mt_rand(1000, 9999) . str_pad($segment['segment_number'], 3, "0", STR_PAD_LEFT);
-            $segment['pic_task_id'] = $segment['pic_task_status'] = $segment['video_task_id'] = $segment['video_task_status'] = '';
+            // $segment['pic_task_id'] = $segment['pic_task_status'] = $segment['video_task_id'] = $segment['video_task_status'] = '';
             $segment['created_at'] = $segment['updated_at'] = date('Y-m-d H:i:s');
 
             // 更新其他分镜序号