SpeechKit Cloud APIを使用して、Yandexからの天気とニュースを音声で伝えます

こんにちは この記事では、「Voice Weather and News Informer」サイトでできることについてお話したいと思います。たとえば、都市を選択すると、実際の天気予報だけでなく、任意のニュースも表示されます。 実際、このスクリプトはSmart Homeシステムで通知するために開発されましたが、この記事で行われたホスティングでPHPをサポートしているサイトであれば簡単にやり直すことができます。 音声合成の例では、YandexのSpeechKit Cloud APIテクノロジーと、PHPで記述されたXML天気予報およびニュースパーサーYandexが使用されます。



実装に必要なもの:



この資料は情報提供のみを目的として提供されているため、サイトへのインストールプロセスおよび都市の追加はここでは考慮されません。



動作原理:



都市を選択するためのフォームを含むスクリプトindex.html
<!DOCTYPE html> <html lang="ru"> <head> <title> SpeechKit Cloud API   Yandex.</title> <meta charset="utf-8"> </head> <body> <script language="javascript" type="text/javascript"> function Get_Weather() { var tts_text=document.getElementById('weather').value; console.log(tts_text); var response="weather.php?&q="+encodeURI(tts_text); //  mp3  var audio = document.getElementById("gameMusic"); if (audio) { audio.parentNode.removeChild(audio); } //    audio audio = document.createElement("audio"); audio.setAttribute("id", "gameMusic"); audio.setAttribute("autoplay", "true"); //audio.setAttribute("loop", "false"); var mp3 = document.createElement("source"); mp3.setAttribute("src", response); mp3.setAttribute("type", "audio/mpeg"); audio.appendChild(mp3); audio.play(); document.body.appendChild(audio); } function Get_News() { var tts_text=document.getElementById('news').value; console.log(tts_text); var response="news.php?&q="+encodeURI(tts_text); //  mp3  var audio = document.getElementById("gameMusic"); if (audio) { audio.parentNode.removeChild(audio); } //    audio audio = document.createElement("audio"); audio.setAttribute("id", "gameMusic"); audio.setAttribute("autoplay", "true"); //audio.setAttribute("loop", "false"); var mp3 = document.createElement("source"); mp3.setAttribute("src", response); mp3.setAttribute("type", "audio/mpeg"); audio.appendChild(mp3); audio.play(); document.body.appendChild(audio); } </script> <h1><span> SpeechKit Cloud API   Yandex.</span></h1> <h2></h2> <select size="1" onclick="Get_Weather();" id="weather"> <option disabled> </option> <option value="27612"></option> <option value="34880"></option> <option value="26063">-</option> <option value="25913"></option> </select> <h2></h2> <select size="1" onclick="Get_News();" id="news"> <option disabled> </option> <option selected value="Astrakhan"></option> <option value="Volgograd"></option> <option value="Krasnodar"></option> <option value="Moscow"></option> <option value="Saratov"></option> </select> </body> </html>
      
      







Gordaは、 select要素に新しいオプションパラメーターを設定することで追加できます。



天気weather.phpのmp3ファイルを生成するためのスクリプト
 <?php $id=$_GET["q"]; // id  $url="http://export.yandex.ru/weather-ng/forecasts/".$id.".xml"; // url xml  $xml = simplexml_load_file($url); //  XML-   //: $city=$xml['city']; // $temp=$xml->fact->temperature; //  $weather_type=$xml->fact->weather_type; //   $humidity=$xml->fact->humidity; //  $wind_direction=$xml->fact->wind_direction; //   $wind_speed=$xml->fact->wind_speed; //   $pressure=$xml->fact->pressure; //  $znak=""; if($wind_direction=="e") { $wind_direction_text="";} if($wind_direction=="w") { $wind_direction_text="";} if($wind_direction=="s") { $wind_direction_text="";} if($wind_direction=="n") { $wind_direction_text="";} if($wind_direction=="se") { $wind_direction_text="-";} if($wind_direction=="ne") { $wind_direction_text="-";} if($wind_direction=="sw") { $wind_direction_text="-";} if($wind_direction=="nw") { $wind_direction_text="-";} $minus_arry=preg_match("/(-)/", $temp, $minus_out); if (!empty($minus_out[1])) { $znak=""; $temp=str_replace("-","",$temp); } // if( $temp=="1" or $temp=="21" or $temp=="31" or $temp=="41" or $temp=="51" or $temp=="61" or $temp=="71" or $temp=="81" or $temp=="91" or $temp=="101") { $text=""; } else { // if( $temp=="2" or $temp=="3" or $temp=="4" or $temp=="22" or $temp=="23" or $temp=="24" or $temp=="32" or $temp=="33" or $temp=="34" or $temp=="42" or $temp=="43" or $temp=="44" or $temp=="52" or $temp=="53" or $temp=="54" or $temp=="62" or $temp=="63" or $temp=="64" or $temp=="72" or $temp=="73" or $temp=="74" or $temp=="82" or $temp=="83" or $temp=="84" or $temp=="92" or $temp=="93" or $temp=="94" or $temp=="102" or $temp=="103" ) {$text="";} else {$text="";} } // if( $humidity=="1" or $humidity=="21" or $humidity=="31" or $humidity=="41" or $humidity=="51" or $humidity=="61" or $humidity=="71" or $humidity=="81" or $humidity=="91" or $humidity=="101") { $humidity_text=""; } else { // if( $humidity=="2" or $humidity=="3" or $humidity=="4" or $humidity=="22" or $humidity=="23" or $humidity=="24" or $humidity=="32" or $humidity=="33" or $humidity=="34" or $humidity=="42" or $humidity=="43" or $humidity=="44" or $humidity=="52" or $humidity=="53" or $humidity=="54" or $humidity=="62" or $humidity=="63" or $humidity=="64" or $humidity=="72" or $humidity=="73" or $humidity=="74" or $humidity=="82" or $humidity=="83" or $humidity=="84" or $humidity=="92" or $humidity=="93" or $humidity=="94" or $humidity=="102" or $humidity=="103" ) {$humidity_text="";} else {$humidity_text="";} } // if( $pressure=="701" or $pressure=="721" or $pressure=="731" or $pressure=="741" or $pressure=="751" or $pressure=="761" or $pressure=="771" or $pressure=="781" or $pressure=="791" or $pressure=="801") { $pressure_text="  "; } else { // if( $pressure=="702" or $pressure=="703" or $pressure=="704" or $pressure=="722" or $pressure=="723" or $pressure=="724" or $pressure=="732" or $pressure=="733" or $pressure=="734" or $pressure=="742" or $pressure=="743" or $pressure=="744" or $pressure=="752" or $pressure=="753" or $pressure=="754" or $pressure=="762" or $pressure=="763" or $pressure=="764" or $pressure=="772" or $pressure=="773" or $pressure=="774" or $pressure=="782" or $pressure=="783" or $pressure=="784" or $pressure=="792" or $pressure=="793" or $pressure=="794" or $pressure=="802" or $pressure=="803" ) {$pressure_text="  ";} else {$pressure_text="  ";} } $say_text="   ".$city." ".$weather_type.". T  ".$znak." ".$temp." ".$text.".  ".$humidity." ".$humidity_text.".  ".$wind_direction_text." ".$wind_speed."   .   ".$pressure." ".$pressure_text." !"; $qs = http_build_query(array("format" => "mp3","lang" => "ru-RU","speaker" => "jane","key" => "SpeechKit_Cloud_API_Key","emotion" => "good", "text" => $say_text)); //   $ctx = stream_context_create(array("http"=>array("method"=>"GET","header"=>"Referer: \r\n"))); $soundfile = file_get_contents("https://tts.voicetech.yandex.net/generate?".$qs, false, $ctx); //    mp3  echo($soundfile); ?>
      
      







スクリプトでは、 SpeechKit_Cloud_API_Keyを受け取ったキーに変更する必要があります。

news.phpニュースのmp3ファイルを生成するスクリプト
 <?php $city=$_GET['q']; $data_file="http://news.yandex.ru/".$city."/index.rss"; //  xml  $xml = simplexml_load_file($data_file); //  xml   $number= rand(1,13); //    $news=$xml->channel->item[$number]->description; // $title=$xml->channel->item[$number]->title; // $content_news = trim(preg_replace('/\s{2,}/', ' ', $news));//   $content_title = trim(preg_replace('/\s{2,}/', ' ', $title));//   $text=$content_title." - ".$content_news; $search = array('"','"',' ',')','('); $replace = array(''); $text = str_replace($search, $replace, $text); $qs = http_build_query(array("format" => "mp3","lang" => "ru-RU","speaker" => "jane","key" => "SpeechKit_Cloud_API_Key","emotion" => "good", "text" => $text)); //   $ctx = stream_context_create(array("http"=>array("method"=>"GET","header"=>"Referer: \r\n"))); $soundfile = file_get_contents("https://tts.voicetech.yandex.net/generate?".$qs, false, $ctx); //    mp3  echo($soundfile); ?>
      
      









スクリプトでは、 SpeechKit_Cloud_API_Keyを受け取ったキーに変更する必要があります。 このテクノロジーは、日付と時刻の表明にも使用できます。 言語、音色、声(男性と女性)を変更することができます。音声合成のすべてのパラメーターの説明は、下にあるSpeechKit Cloud APIへのリンクにあります。

上記のスクリプトは、Google ChromeおよびIceweaselブラウザーでテストされましたが、HTML 5 Web Audioをサポートする他のブラウザーで正しく動作するはずです。



PS中古文献



Yandexを公開します。 あなたの天気

Yandexからの天気

Yandexからのニュース

SpeechKit Cloud API

こちらのSpeechKit Cloud APIをご覧くださいYouTubeで何が起こったのかを見てください(7分目の冒頭の例-RHVoiceを使用した音声合成)。



記述されたコードは理想的であると主張するものではなく、いつでも変更できます。



All Articles