首先本文分享一个来自别的站长封装好的文字转语音的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 已涵盖下面“如果”的所有条件写法。
一、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文字转语音
当然以上工作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 中处理数据。








