getOne($data); } if (!$data) { Dever::alert('错误的课程信息'); } $data = $this->getContent($data, $uid); return $data; } # 获取相关推荐 public function getRelation($info) { $where['noid'] = $info['id']; return Dever::db('content/audio')->getRelation($where); } # 增加浏览量 public function addView($id) { Dever::db('content/audio')->addView($id); } # 获取课程列表 public function getList() { $data = Dever::db('content/audio')->getList(); return $data; } # 获取课程章节列表 public function getContentList($id) { $where['audio_id'] = $id; $data = Dever::db('content/audio_content')->getData($where); return $data; } # 根据文字获取语音 public function convert($id) { //Dever::daemon('content/lib/audio.convert_daemon?id=' . $id); } public function test_api($id) { $this->convert_daemon($id); return 'ok'; } public function convert_daemon($id) { $id = Dever::input('id'); $data = Dever::db('content/audio_content')->one($id); if ($data && !$data['ali_request_id'] && !$info['audio'] && $data['audio_content']) { $request = $this->audio($data['id'], $data['audio_id'], $data['audio_content']); if ($request) { $update['where_id'] = $id; $update['ali_request_id'] = $request[0]; $update['ali_task_id'] = $request[1]; $update['audio_status'] = 2; Dever::db('content/audio_content')->update($update); } } } private function token() { $token = Dever::load('token/lib/aliyun')->token(); $url = 'https://nls-gateway.cn-shanghai.aliyuncs.com/stream/v1/tts'; # 长文本 $url = 'https://nls-gateway.cn-shanghai.aliyuncs.com/rest/v1/tts/async'; return array ( 'url' => $url, 'token' => $token, 'appkey' => 'k6ZkLekn5NfRuhR4' ); } private function audio($id, $audio_id, $text) { $text = str_replace('

', "\r\n", $text); $text = str_replace('
', "\r\n", $text); $text = str_replace('
', "\r\n", $text); $text = str_replace(' ', '', $text); $text = str_replace(' ', " ", $text); $text = strip_tags($text); $config = $this->token(); $param['header']['appkey'] = $config['appkey']; $param['header']['token'] = $config['token']; $param['payload']['tts_request']['text'] = $text; $param['payload']['tts_request']['voice'] = 'Aixia'; $param['payload']['tts_request']['format'] = 'wav'; $param['payload']['tts_request']['volume'] = 100; $param['payload']['tts_request']['speech_rate'] = -150; $param['payload']['tts_request']['pitch_rate'] = 0; $param['payload']['enable_notify'] = true; $param['payload']['notify_url'] = Dever::url('lib/audio.audio_address?id=' . $id, 'content'); $param['context']['device_id'] = 'my_php_audio'; $data = Dever::curl($config['url'], $param, 'post', true); $data = Dever::json_decode($data); if (isset($data['request_id']) && $data['request_id'] && isset($data['data']['task_id']) && $data['data']['task_id']) { return array($data['request_id'], $data['data']['task_id']); } return false; } public function audio_address_api() { $id = Dever::input('id'); $msg = Dever::json_encode($_REQUEST); Dever::log($msg, 'audio'); return; $info = Dever::db('content/audio_content')->one($id); if ($info && $info['ali_request_id'] && !$info['audio']) { $config = $this->token(); $param['token'] = $config['token']; $param['appkey'] = $config['appkey']; $param['request_id'] = $info['ali_request_id']; $param['task_id'] = $info['ali_task_id']; $data = Dever::curl($config['url'], $param); $data = Dever::json_decode($data); if (isset($data['data']['audio_address']) && $data['data']['audio_address']) { #成功 $update['where_id'] = $id; $update['audio'] = $this->download($info['id'], $info['audio_id'], $data['data']['audio_address']); $update['audio_status'] = 3; Dever::db('content/audio_content')->update($update); } } return 'ok'; } private function download($id, $audio_id, $source) { $data = Dever::load('upload/save')->copy($source, 6); $file = $data['url']; return $file; $path = Dever::path(Dever::data(), 'audio/' . $audio_id . '/'); $file = $path . $id . '.wav'; if (!file_exists($file)) { $content = file_get_contents($source); file_put_contents($file, $content); } return $file; } }