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;
}
}