|
@@ -88,11 +88,78 @@ class DeepSeekService
|
|
return $result;
|
|
return $result;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ // 新增合成任务
|
|
|
|
+ public function addGenerateTask($data) {
|
|
|
|
+ $bid = getProp($data, 'bid');
|
|
|
|
+ $cid = getProp($data, 'cid');
|
|
|
|
+ $version_id = getProp($data, 'version_id');
|
|
|
|
+ $generate_json = getProp($data, 'generate_json');
|
|
|
|
+
|
|
|
|
+ // 更新角色-音色信息
|
|
|
|
+ $existed_role_info = DB::table('mp_book_version')->where('bid', $bid)->where('id', $version_id)->value('role_info');
|
|
|
|
+ $existed_role_info = json_decode($existed_role_info, true);
|
|
|
|
+ if ($existed_role_info) $existed_roles = array_keys($existed_role_info);
|
|
|
|
+ else $existed_roles = [];
|
|
|
|
+
|
|
|
|
+ // 获取情感信息
|
|
|
|
+ $emotion_list = DB::table('mp_emotion_list')->where('is_enabled', 1)->pluck('emotion_name', 'emotion_code')->toArray();
|
|
|
|
+ $emotion_list = array_flip($emotion_list);
|
|
|
|
+
|
|
|
|
+ // 构造生成音频的json
|
|
|
|
+ $words = json_decode($generate_json, true);
|
|
|
|
+ foreach($words as &$word) {
|
|
|
|
+ if (!isset($word['text']) || !isset($word['emotion']) || !isset($word['voice_type']) || !isset($word['voice_name']) || !isset($word['speed_ratio']) || !isset($word['loudness_ratio']) || !isset($word['emotion_scale'])) Utils::throwError('20003:参数格式有误');
|
|
|
|
+ if (!($word['text']) || !($word['voice_type']) || !($word['voice_name']) || !($word['speed_ratio']) || !($word['loudness_ratio']) || !($word['emotion_scale'])) Utils::throwError('20003:参数不得为空');
|
|
|
|
+ $role = getProp($word, 'role');
|
|
|
|
+ $word['gender'] = (int)$word['gender'];
|
|
|
|
+ if (isset($emotion_list[getProp($word, 'emotion')])) { // 如果有对应情感则赋值,没有则默认为中性(neutral)
|
|
|
|
+ $word['emotion_type'] = $emotion_list[getProp($word, 'emotion')];
|
|
|
|
+ }else {
|
|
|
|
+ $word['emotion'] = '中性';
|
|
|
|
+ $word['emotion_type'] = 'neutral';
|
|
|
|
+ }
|
|
|
|
+ if (!in_array($role, $existed_roles)) {
|
|
|
|
+ $existed_role_info[$role] = [
|
|
|
|
+ 'timbre_type' => $word['voice_type'],
|
|
|
|
+ 'timbre_name' => $word['voice_name'],
|
|
|
|
+ ];
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // $word['voice_name'] = $role_timbre[$role]['timbre_name'];
|
|
|
|
+ // $word['voice_type'] = $role_timbre[$role]['timbre_type'];
|
|
|
|
+ // $word['speed_ratio'] = mt_rand(9,11)/10;
|
|
|
|
+ // $word['loudness_ratio'] = mt_rand(5,12)/10;
|
|
|
|
+ // $word['emotion_scale'] = mt_rand(1,5);
|
|
|
|
+ }
|
|
|
|
+ $generate_json = json_encode($words, 256);
|
|
|
|
+
|
|
|
|
+ try {
|
|
|
|
+ DB::beginTransaction();
|
|
|
|
+ $role_info = json_encode($existed_role_info, 256);
|
|
|
|
+ $boolen = DB::table('mp_book_version')->where('bid', $bid)->where('id', $version_id)->update(['role_info' => $role_info, 'updated_at' => date('Y-m-d H:i:s')]);
|
|
|
|
+ if (!$boolen) {
|
|
|
|
+ DB::rollBack();
|
|
|
|
+ Utils::throwError('20003:更新角色信息失败');
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $boolen1 = DB::table('mp_chapter_audios')->where('bid', $bid)->where('version_id', $version_id)->where('cid', $cid)->update(['generate_status'=>'执行中', 'generate_json' => $generate_json, 'updated_at' => date('Y-m-d H:i:s')]);
|
|
|
|
+ if (!$boolen1) {
|
|
|
|
+ DB::rollBack();
|
|
|
|
+ Utils::throwError('20003:更新生成数据失败');
|
|
|
|
+ }
|
|
|
|
+ } catch (\Exception $e) {
|
|
|
|
+ DB::rollBack();
|
|
|
|
+ Utils::throwError('20003:'.$e->getMessage());
|
|
|
|
+ }
|
|
|
|
+ DB::commit();
|
|
|
|
+ return true;
|
|
|
|
+ }
|
|
|
|
+
|
|
public function timbreList($data) {
|
|
public function timbreList($data) {
|
|
$gender = getProp($data, 'gender');
|
|
$gender = getProp($data, 'gender');
|
|
$timbre_name = getProp($data, 'timbre_name');
|
|
$timbre_name = getProp($data, 'timbre_name');
|
|
|
|
|
|
- $query = DB::table('mp_timbres')->where('is_enabled', 1)->select('timbre_name', 'timbre_type', 'gender');
|
|
|
|
|
|
+ $query = DB::table('mp_timbres')->where('is_enabled', 1)->select('timbre_name as voice_name', 'timbre_type as voice_type', 'gender');
|
|
if ($gender) {
|
|
if ($gender) {
|
|
$query->where('gender', $gender);
|
|
$query->where('gender', $gender);
|
|
}
|
|
}
|
|
@@ -101,7 +168,7 @@ class DeepSeekService
|
|
}
|
|
}
|
|
$list = $query->get()->map(function ($value) {
|
|
$list = $query->get()->map(function ($value) {
|
|
$value = (array)$value;
|
|
$value = (array)$value;
|
|
- $value['timbre_name'] = str_replace('(多情感)', '', $value['timbre_name']);
|
|
|
|
|
|
+ $value['voice_name'] = str_replace('(多情感)', '', $value['voice_name']);
|
|
return $value;
|
|
return $value;
|
|
})->toArray();
|
|
})->toArray();
|
|
|
|
|