Audio.php 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. <?php
  2. namespace Content\Lib;
  3. use Dever;
  4. class Audio
  5. {
  6. public function get($data, $uid = false)
  7. {
  8. if (!is_array($data)) {
  9. $data = Dever::db('content/audio')->getOne($data);
  10. }
  11. if (!$data) {
  12. Dever::alert('错误的课程信息');
  13. }
  14. $data = $this->getContent($data, $uid);
  15. return $data;
  16. }
  17. # 获取相关推荐
  18. public function getRelation($info)
  19. {
  20. $where['noid'] = $info['id'];
  21. return Dever::db('content/audio')->getRelation($where);
  22. }
  23. # 增加浏览量
  24. public function addView($id)
  25. {
  26. Dever::db('content/audio')->addView($id);
  27. }
  28. # 获取课程列表
  29. public function getList()
  30. {
  31. $data = Dever::db('content/audio')->getList();
  32. return $data;
  33. }
  34. # 获取课程章节列表
  35. public function getContentList($id)
  36. {
  37. $where['audio_id'] = $id;
  38. $data = Dever::db('content/audio_content')->getData($where);
  39. return $data;
  40. }
  41. # 根据文字获取语音
  42. public function convert($id)
  43. {
  44. //Dever::daemon('content/lib/audio.convert_daemon?id=' . $id);
  45. }
  46. public function test_api($id)
  47. {
  48. $this->convert_daemon($id);
  49. return 'ok';
  50. }
  51. public function convert_daemon($id)
  52. {
  53. $id = Dever::input('id');
  54. $data = Dever::db('content/audio_content')->one($id);
  55. if ($data && !$data['ali_request_id'] && !$info['audio'] && $data['audio_content']) {
  56. $request = $this->audio($data['id'], $data['audio_id'], $data['audio_content']);
  57. if ($request) {
  58. $update['where_id'] = $id;
  59. $update['ali_request_id'] = $request[0];
  60. $update['ali_task_id'] = $request[1];
  61. $update['audio_status'] = 2;
  62. Dever::db('content/audio_content')->update($update);
  63. }
  64. }
  65. }
  66. private function token()
  67. {
  68. $token = Dever::load('token/lib/aliyun')->token();
  69. $url = 'https://nls-gateway.cn-shanghai.aliyuncs.com/stream/v1/tts';
  70. # 长文本
  71. $url = 'https://nls-gateway.cn-shanghai.aliyuncs.com/rest/v1/tts/async';
  72. return array
  73. (
  74. 'url' => $url,
  75. 'token' => $token,
  76. 'appkey' => 'k6ZkLekn5NfRuhR4'
  77. );
  78. }
  79. private function audio($id, $audio_id, $text)
  80. {
  81. $text = str_replace('</p>', "\r\n", $text);
  82. $text = str_replace('<br>', "\r\n", $text);
  83. $text = str_replace('<br />', "\r\n", $text);
  84. $text = str_replace(' ', '', $text);
  85. $text = str_replace('&nbsp;', " ", $text);
  86. $text = strip_tags($text);
  87. $config = $this->token();
  88. $param['header']['appkey'] = $config['appkey'];
  89. $param['header']['token'] = $config['token'];
  90. $param['payload']['tts_request']['text'] = $text;
  91. $param['payload']['tts_request']['voice'] = 'Aixia';
  92. $param['payload']['tts_request']['format'] = 'wav';
  93. $param['payload']['tts_request']['volume'] = 100;
  94. $param['payload']['tts_request']['speech_rate'] = -150;
  95. $param['payload']['tts_request']['pitch_rate'] = 0;
  96. $param['payload']['enable_notify'] = true;
  97. $param['payload']['notify_url'] = Dever::url('lib/audio.audio_address?id=' . $id, 'content');
  98. $param['context']['device_id'] = 'my_php_audio';
  99. $data = Dever::curl($config['url'], $param, 'post', true);
  100. $data = Dever::json_decode($data);
  101. if (isset($data['request_id']) && $data['request_id'] && isset($data['data']['task_id']) && $data['data']['task_id']) {
  102. return array($data['request_id'], $data['data']['task_id']);
  103. }
  104. return false;
  105. }
  106. public function audio_address_api()
  107. {
  108. $id = Dever::input('id');
  109. $msg = Dever::json_encode($_REQUEST);
  110. Dever::log($msg, 'audio');
  111. return;
  112. $info = Dever::db('content/audio_content')->one($id);
  113. if ($info && $info['ali_request_id'] && !$info['audio']) {
  114. $config = $this->token();
  115. $param['token'] = $config['token'];
  116. $param['appkey'] = $config['appkey'];
  117. $param['request_id'] = $info['ali_request_id'];
  118. $param['task_id'] = $info['ali_task_id'];
  119. $data = Dever::curl($config['url'], $param);
  120. $data = Dever::json_decode($data);
  121. if (isset($data['data']['audio_address']) && $data['data']['audio_address']) {
  122. #成功
  123. $update['where_id'] = $id;
  124. $update['audio'] = $this->download($info['id'], $info['audio_id'], $data['data']['audio_address']);
  125. $update['audio_status'] = 3;
  126. Dever::db('content/audio_content')->update($update);
  127. }
  128. }
  129. return 'ok';
  130. }
  131. private function download($id, $audio_id, $source)
  132. {
  133. $data = Dever::load('upload/save')->copy($source, 6);
  134. $file = $data['url'];
  135. return $file;
  136. $path = Dever::path(Dever::data(), 'audio/' . $audio_id . '/');
  137. $file = $path . $id . '.wav';
  138. if (!file_exists($file)) {
  139. $content = file_get_contents($source);
  140. file_put_contents($file, $content);
  141. }
  142. return $file;
  143. }
  144. }