百度语音合成 php sdk,Drupal 与百度云语音合成(PHP SDK)的集成 | Think in Drupal

作者:老葛 亚艾元软件

为客户开发一个语音提醒的功能,在党建o2o的指挥中心,如果有群众诉求提交,此时就会在党建O2O指挥中心的大屏上面,动态显示提示消息,并且支持语音的形式,通过声音提醒党建O2O指挥中心的负责人。

对于实时提醒,我们采用nodejs服务器,基于Drupal与nodejs的集成模块,做定制开发,初步实现了实时提醒。对于语音提醒,我们初步选择百度云里面的语音合成、识别接口。始终觉得,百度在AI方面,做的还是有特色的,特别是提出ALL in AI战略。语音接口也是百度AI的一部分。

百度的语音接口,包含两部分,语音合成、语音识别。语音合成就是将文本转成语音文件;语音识别就是将语音文件转成文本,他们使用一个SDK。我们的语言采用的PHP,两个接口合二为一。

百度语音文档地址:https://cloud.baidu.com/doc/SPEECH/index.html

百度语音SDK下载地址:https://ai.baidu.com/sdk

在百度后台,添加语音应用。我的账号已经认证,可以方便的添加,这个接口,初级阶段是免费的。所以也不用交钱。在管理界面的左边部分,有帮助文档,SDK下载的链接,很方便。我以前给百度工单里面提意见,说的就是帮助文档,下载地址,放到对应的接口的管理界面里面,开发的时候,好找。

将下载的PHP SDK放到自己的模块目录下面,这是我封装好的一段代码。

function mycustom_get_audio_file($text, $filename) {

require_once 'AipSpeech.php';

// 你的APPID AK SK

$app_id = '10xxxxxx';

$app_key = 'so81xxxxxxxxxxx';

$secret_key  = 'WoDXxxxxxxxxxxxxxxx';

$client = new AipSpeech($app_id, $app_key, $secret_key);

$result = $client->synthesis($text, 'zh', 1, array(

'vol' => 5,

));

drupal_set_message('abc');

if(!is_array($result)){

drupal_set_message('123');

//file_put_contents('audio.mp3', $result);

$dir_uri = file_stream_wrapper_get_instance_by_uri('public://');

$realpath = $dir_uri->realpath();

$sudio_dir = 'public://baiduaudio';

$return = file_prepare_directory($sudio_dir);

if (empty($return)) {

drupal_mkdir('public://baiduaudio', 0777, TRUE);

}

$file_path = $realpath . "/baiduaudio/". $filename;

drupal_set_message('filepath:' .  $file_path);

file_put_contents($file_path, $result);

$file_url = file_create_url('public://baiduaudio/' .$filename);

return $file_url;

}

return '';

}

这个封装的函数,能够实现给一段文本,调用百度AI的语音接口,生成MP3文件,保存到本地,将文件路径返回给调用者。

我测试了一下,就这样,就能用了,非常简单。百度云最大的进步就是直接提供了PHP版本的SDK,以前他们家的产品,都是只提供java和C和nodejs的,对于PHP开发者来说,有时候需要自己基于他们的rest API从头写,痛苦。

在诉求状态发生变化的时候,使用nodejs,实时通知,这是服务器端的代码:

$message->data['description'] = '嘀嘀嘀,嘀嘀嘀,' . $sub_wechat .'刚刚受理一条' . $service_type .',请及时办结';

$text = $message->data['description'];

$filename = 'shouli_' .$node->nid .'.pm3';

$return = mycustom_get_audio_file($text,$filename);

$message->data['audio_url'] = $return;

$message->callback = 'nodejsMycustom';

nodejs_send_content_channel_message($message);

前端代码js:

Drupal.Nodejs.callbacks.nodejsMycustom = {

callback: function (message) {

console.log(message);

var audio_url = message.data.audio_url || '';

if(audio_url != '') {

var audio = document.createElement("audio");

audio.src = audio_url;

audio.play();

console.log(audio.src);

}

这段js代码,在前段,接收nodejs的实时通知消息,如果消息里面,包含了audio_url,此时创建一个audio元素,调用它的播放功能。

这样就实现了客户要求的语音提醒功能了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值