実装に必要なもの:
- PHPをサポートするWebサーバー(ローカルのデンバータイプを使用できます)。
- Yandex SpeechKitキー(非営利プロジェクトの場合は、無料で入手できます)。
- サイトなしでキーが提供されない場合、Hostinger.ruにサイトを作成できます。
- 都市IDのリスト。
この資料は情報提供のみを目的として提供されているため、サイトへのインストールプロセスおよび都市の追加はここでは考慮されません。
動作原理:
- 選択した都市のmp3ファイルのリクエストを送信します。
- XMLファイルを解析し、必要なパラメーターを取得します。
- 単語の語尾を修正して正しい発音を設定します。
- mp3ファイルを生成するためのパラメーター(音声、音色、ファイル形式、言語、テキスト)を設定します。
- mp3ファイルを生成します。
- Audio HTML 5オブジェクトを作成し、ファイルを再生します。
都市を選択するためのフォームを含むスクリプト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を使用した音声合成)。
記述されたコードは理想的であると主張するものではなく、いつでも変更できます。