全方位站长技能、SEO优化学习平台
当前位置:网站首页 > PHP笔记 > 正文

PHP教程:百度文字转语音函数封装

作者:文煞发布时间:2024-09-18分类:PHP笔记浏览:155


温馨提示:手机扫码可阅读当前文章!
文章简介:首先本文分享一个来自别的站长封装好的文字转语音的JS代码:function duanbaiduyuyin(fixedText){ var content = fixedText.trim();&nb...

首先本文分享一个来自别的站长封装好的文字转语音的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 中处理数据。

欢迎您,来自美国的朋友,您的IP:18.225.175.230,您的网络:Amazon数据中心


PHP笔记排行
随机推荐
猜你喜欢

服务热线

1888888888

要发发发发发发

站长微信公众号

站长微信公众号

分享:

支付宝

微信