123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187 |
- <?php
- namespace Content\Lib;
- use Dever;
- class Audio
- {
- public function get($data, $uid = false)
- {
- if (!is_array($data)) {
- $data = Dever::db('content/audio')->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('</p>', "\r\n", $text);
- $text = str_replace('<br>', "\r\n", $text);
- $text = str_replace('<br />', "\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;
- }
- }
|