SSMLを使ったSayの操作|TropoスクリプティングAPI

プロンプトや応答のピッチ、ボリューム、イントネーションをコントロールする必要があったり、コントロールしたくなることはよくあります。 このコントロールを簡単に行うために、Tropoは音声合成マーク付け言語(SSML)と呼ばれる基準に元々対応しています。

SSMLは W3C から、ペース、トーン、ピッチ、そしてコンピュータによって生成された全ての音声をコントロールするための国際規格です。 以下のサンプルでは、「おはようございます」という音声の速度を操作しています。

say("<speak>おはようございます<prosody rate='-50%'>おはようございます</prosody></speak>");
say "<speak>おはようございます
    <prosody rate='-50%'>おはようございます</prosody>
    </speak>"
<?php
    say("<speak>おはようございます<prosody rate='-50%'>おはようございます</prosody></speak>");
?>
		
say("<speak>おはようございます<prosody rate='-50%'>おはようございます</prosody></speak>")
say("<speak>おはようございます<prosody rate='-50%'>おはようございます</prosody></speak>")

上記の例では、再生速度をコントロールするために、SSMLのprosody要素であるrateプロパティを使用しました。 prosody要素の他の属性には、pitchcontourvolumeなどがあります。

say-as

ピッチ、ボリューム、イントネーションのコントロールに加えて、音声合成(TTS)エンジンのテキストの解釈(特に数字)をコントロールしなければならないこともあります。 SSMLのsay-as要素を使えば、テキストを、currency(お金)digits(桁)number(数字)date(日付)time(時刻)phone(電話番号) のどれに該当するものとして解釈べきなのかを定めることができます。 ほとんどのオプションの説明は不要ですが、 digits(桁)を使えばテキストをひとまとまりの数字としてではなく、個々の数字として解釈し(1234は「1」、「2」、[3」、「4」と解釈されます)、 number(数字)を使えばテキストをひとまとまりの値(1234は「千二百三十四」と発音されます)ことを覚えておくと便利でしょう。 下で示しているのがsay-as要素の使い方を示すコード例です。

function say_as(value,type){
      ssml_start="<?xml version='1.0'?><speak>";
      ssml_end="</say-as></speak>";
      ssml ="<say-as interpret-as='vxml:"+ type + "'>" + value+"";
      complete_string = ssml_start + ssml + ssml_end;
      log('@@ Say as: ' + complete_string);
      say(complete_string);
}

wait(3000);

say_as('USD51.33','currency');
say_as('20314253','digits');
say_as('2031.435','number');
say_as('4075551212','phone');
say_as('20090226','date');
say_as('0515a','time');
def say_as(value,type)
    ssml_start="<?xml version='1.0'?><speak>"
    ssml_end="</say-as></speak>"
    ssml ="<say-as interpret-as='vxml:#{type}'>#{value}"
    complete_string = ssml_start + ssml + ssml_end
    log '@@ Say as: ' + complete_string
    say complete_string
end

wait(3000)

say_as('USD51.33','currency')
say_as('20314253','digits')
say_as('2031.435','number')
say_as('4075551212','phone')
say_as('20090226','date')
say_as('0515a','time')
<?php
    function say_as($value, $type) {
        $ssml_start = "<?xml version='1.0'?><speak>";
        $ssml_end="</say-as></speak>";
        $ssml ="<say-as interpret-as=\"vxml:$type\">$value";
        $complete_string = $ssml_start . $ssml . $ssml_end;
        _log('@@ Say as: ' . $complete_string);
        say($complete_string);
    }

    wait(3000);

    say_as("USD51.33","currency");
    say_as("20314253","digits");
    say_as("2031.435","number");
    say_as("4075551212","phone");
    say_as("20090226","date");
    say_as("0515a","time");
?>
def say_as(value,type):
    ssml_start="<?xml version='1.0'?><speak>"
    ssml_end="</say-as></speak>"
    ssml ="<say-as interpret-as='vxml:"+ type + "'>" + value+""
    complete_string = ssml_start + ssml + ssml_end
    log('@@ Say as: ' + complete_string)
    say(complete_string)

wait(3000)

say_as('USD51.33','currency')
say_as('20314253','digits')
say_as('2031.435','number')
say_as('4075551212','phone')
say_as('20090226','date')
say_as('0515a','time')
def say_as(value, type){
    ssml_start = "<?xml version='1.0'?><speak>"
    ssml_end = "</say-as></speak>"
    ssml = "<say-as interpret-as='vxml:$type'>$value"
    complete_string = ssml_start + ssml + ssml_end
    log('@@ Say as: ' + complete_string)
    say complete_string
}
    
await(3000)

say_as('USD51.33','currency')
say_as('20314253','digits')
say_as('2031.435','number')
say_as('4075551212','phone')
say_as('20090226','date')
say_as('0515a','time')
 

次は高度なオーディオ概念について説明します。