服务热线
1888888888
作者:文煞发布时间:2024-09-18分类:PHP笔记浏览:155
首先本文分享一个来自别的站长封装好的文字转语音的JS代码:
function duanbaiduyuyin(fixedText){ var content = fixedText.trim(); var audioId = 'audio' + Math.random().toString(36).substr(2, 9); $('body').append('<div><audio id="' + audioId + '" controls="controls" hidden="true" autoplay="autoplay"><source src="https://tts.baidu.com/text2audio?tex=' + content + '&cuid=dict&lan=ZH&ctp=2&pdt=30&vol=9&per=0" type="audio/mpeg"/></source></audio></div>');
调用方法:
duanbaiduyuyin('你需要合成的文字内容')
注:上述存在字数限制,请勿将其用于长文本的一次性语音合成。反之,可参考美文苑即时通讯聊天室的 JS 。该 JS 已涵盖下面“如果”的所有条件写法。
倘若还需要更高级别的操作,例如将自己整合的百度语音合成接口返回的二进制音乐文件转换为 blob 进行播放,或者按照文章内容的 P 标签进行分割并循环语音合成播放,又或者依据字数多少进行分割播放等,那么请重点阅读以下内容。
per 表示发音人,vol 代表音量。
既然登上首页,那就再补充一点,若超过 1024 字符,按照多少字数分割后再进行语音合成。代码如下:
function baiduyuyin(element) { var bubbleDiv = element.closest('.bubble.you'); if (bubbleDiv) { layer.msg('正在合成中'); var content = bubbleDiv.textContent.trim(); var chunks = []; for (var i = 0; i < content.length; i += 500) { chunks.push(content.substr(i, 500)); } chunks.forEach(function(chunk, index) { $('body').append(' '); }); } }
函数里的“bubble.you”是我聊天室中某用户的聊天文字内容的 dom ,如果是文章内容,请将 dom 元素名更换为您自己的。另外,此函数是按照 500 字进行分割并分段循环语音合成。
当然以上工作PHP也是可以轻松完成的。我们可以将这段 JavaScript 代码转换为 PHP 代码,我们需要理解它的功能。这段 JavaScript 代码主要是从具有特定类名的元素中提取文本内容,然后将其分割成多个小块,并显示一个消息提示“正在合成中”。
在 PHP 中,我们没有 DOM 操作的直接方式,但我们可以模拟这个过程。以下是用 PHP 实现类似功能的示例代码:
<?php function baiduyuyin($element) { // 假设 $element 是 DOMElement 对象,我们需要找到最近的具有 'bubble you' 类的父元素 while ($element->parentNode) { $element = $element->parentNode; if ($element->classList->contains('bubble you')) { break; } } // 检查是否找到了对应的元素 if ($element instanceof DOMElement) { echo '正在合成中'; // 获取元素的文本内容,并去除首尾空白字符 $content = trim($element->textContent); // 将内容分割成500字符的块 $chunks = str_split($content, 500); // 遍历所有块 foreach ($chunks as $index => $chunk) { // 输出每个块(在实际应用中可能需要进一步的逻辑处理) echo $chunk . "<br>"; } } } // 假设这是某个 HTML 内容 $htmlContent = <<<HTML <div class="bubble you">这是一个包含很多文本的气泡。</div> HTML; // 使用 DOMDocument 加载 HTML 内容 $dom = new DOMDocument(); @$dom->loadHTML($htmlContent, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD); // 假设我们有一个指向特定元素的引用 $element = $dom->getElementsByTagName('div')->item(0); // 调用函数 baiduyuyin($element); ?>
在这段 PHP 代码中,我们使用 `DOMDocument` 类来解析 HTML 内容,并使用 DOMElement`类的方法来查找和操作 DOM 元素。我们假设 $element`是指向 HTML 内容中特定元素的引用。然后我们模拟 JavaScript 代码的行为来获取元素的文本内容,分割成块,并输出。
请注意,由于 PHP 不是客户端语言,因此在 Web 页面上显示消息通常需要结合 JavaScript 或发送适当的 HTTP 响应。这里的 echo`语句仅用于演示如何在 PHP 中处理数据。
分享:
支付宝
微信