| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187 | <?phpnamespace 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;    }}
 |