Как включить SSML в Python

Мне нужно использовать SSML для воспроизведения аудиофайла с тегом в моем Alexa Skill (согласно инструкциям Amazon).

Проблема в том, что я не знаю, как использовать SSML с Python. Я знаю, что могу использовать его с Java, но я хочу развить свои навыки с Python. Я просмотрел все, но не нашел ни одного рабочего примера SSML в скрипте/программе Python - кто-нибудь знает?


person SamYoungNY    schedule 14.04.2016    source источник


Ответы (6)


Это было задано два года назад, но, возможно, кому-то будет полезно нижеизложенное.

Я только что проверил, и если вы используете SDK Alexa Skills Kit для Python вы можете просто добавить SSML в свой ответ, например:

@sb.request_handler(can_handle_func=is_request_type("LaunchRequest"))
def launch_request_handler(handler_input):

    speech_text = "Wait for it 3 seconds<break time="3s"/> Buuuu!"

    return handler_input.response_builder.speak(speech_text).response

Надеюсь это поможет.

person wmatt    schedule 01.09.2018

Звук SSML находится в атрибуте response.outputSpeech.ssml. Вот пример obj с удаленными другими обязательными параметрами:

{
 "response": {
    "outputSpeech": {
      "type": "SSML",
      "ssml": "<speak>
              Welcome to Car-Fu.
              <audio src="https://carfu.com/audio/carfu-welcome.mp3" />
              You can order a ride, or request a fare estimate. Which will it be?
              </speak>"
    }
}

Дополнительная ссылка:

person BMW    schedule 21.04.2016

Установите ssml-builder «pip install ssml-builder» и используйте его:

from ssml_builder.core import Speech

speech = Speech()
speech.add_text('sample text')
ssml = speech.speak()
print(ssml)
person Victor Vrabii    schedule 28.09.2019

Эти комментарии очень помогли понять, как заставить SSML работать с помощью ask-sdk-python. Вместо

speech_text = "Wait for it 3 seconds<break time="3s"/> Buuuu!" - from wmatt's comment

Я определил переменные, которые представляют начало и конец каждого тега, который я использую.

ssml_start = '<speak>'
speech_text = ssml_start + whispered_s + "Here are the latest alerts from MMDA" + whispered_e

используя одинарные кавычки и объедините эти строки в речевой вывод, и это сработало! Большое спасибо, ребята! Я очень ценю это!

person Len    schedule 04.04.2019

Пакет ssml для python существует.

вы можете установить, как показано ниже, с помощью pip



    $ pip install pyssml
    or
    $ pip3 install pyssml


так пример ссылка ниже

http://blog.naver.com/chandong83/221145083125 извините. это корейский.



    # -*- coding: utf-8 -*-
    # for amazon
    import re
    import os
    import sys
    import time
    from boto3 import client
    from botocore.exceptions import BotoCoreError, ClientError
    import vlc
    from pyssml.PySSML import PySSML


    # amazon service fuction
    # if isSSML is True, SSML format
    # else Text format
    def aws_polly(text, isSSML = False):
        voiceid = 'Joanna'

        try:
            polly = client("polly", region_name="ap-northeast-2")

            if isSSML:
                textType = 'ssml'
            else:
                textType = 'text'

            response = polly.synthesize_speech(
                    TextType=textType,
                    Text=text,
                    OutputFormat="mp3",
                    VoiceId=voiceid)

            # get Audio Stream (mp3 format)
            stream = response.get("AudioStream")

            # save the audio Stream File
            with open('aws_test_tts.mp3', 'wb') as f:
                data = stream.read()
                f.write(data)


            # VLC play audio
            # non block
            p = vlc.MediaPlayer('./aws_test_tts.mp3')
            p.play()

        except ( BotoCoreError, ClientError) as err:
            print(str(err))


    if __name__ == '__main__':
        # normal pyssml
        #s = PySSML()

        # amazon speech ssml
        s = AmazonSpeech()

        # normal 
        s.say('i am normal')

        #  speed is very slow
        s.prosody({'rate':"x-slow"}, 'i am very slow')

        #  volume is very loud
        s.prosody({'volume':'x-loud'}, 'my voice is very loud')

        #  take a one sec
        s.pause('1s')

        #  pitch is very high
        s.prosody({'pitch':'x-high'}, 'my tone is very high')

        # amazone 
        s.whisper('i am whispering')
        # print to convert to ssml format
        print(s.ssml())

        # request aws polly and play
        aws_polly(s.ssml(), True)

        # Wait while playback.
        time.sleep(50)


person chandong83    schedule 23.11.2017

Этот вопрос был несколько расплывчатым, однако мне удалось выяснить, как включить SSML в скрипт Python. Вот фрагмент, который воспроизводит звук:

  if 'Item' in intent['slots']:
    chosen_item = intent['slots']['Item']['value']
    session_attributes = create_attributes(chosen_item)

    speech_output =  '<speak> Here is something to play' + \
    chosen_item + \
    '<audio src="https://s3.amazonaws.com/example/example.mp3" /> </speak>'
person SamYoungNY    schedule 20.04.2016
comment
Пользователь BMW указал на правильный ответ. Когда вы устанавливаете для параметра type объекта outputSpeech JSON значение SSML и вместо этого используете ssml, если text, вы можете использовать теги SSML (как описано в Справочник по языку разметки речи (SSML)). - person abaumg; 29.01.2018