Inicio rápido: Síntesis de voz en C++ en Linux mediante el SDK de VozQuickstart: Synthesize speech in C++ on Linux by using the Speech SDK

También hay inicios rápidos disponibles para el reconocimiento de voz.Quickstarts are also available for speech-recognition.

En este artículo, va a crear una aplicación de consola de C++ para Linux (Ubuntu 16.04, Ubuntu 18.04, Debian 9).In this article, you create a C++ console application for Linux (Ubuntu 16.04, Ubuntu 18.04, Debian 9). Usará el SDK de Voz de Cognitive Services para sintetizar la voz a partir de texto en tiempo real y reproducirla en los altavoces de su PC.You use the Cognitive Services Speech SDK to synthesize speech from text in real time and play the speech on your PC's speaker. La aplicación se crea con el SDK de Voz para Linux y con el compilador de C++ de la distribución de Linux (por ejemplo, g++).The application is built with the Speech SDK for Linux and your Linux distribution's C++ compiler (for example, g++).

Requisitos previosPrerequisites

Necesita una clave de suscripción de servicios de voz para completar este inicio rápido.You need a Speech Services subscription key to complete this Quickstart. Puede obtener una gratis.You can get one for free. Para más detalles, consulte Prueba gratuita de los servicios de voz.See Try the Speech Services for free for details.

Instalación del SDK de VozInstall Speech SDK

Importante

Al descargar cualquiera de los componentes del SDK de Voz de Azure Cognitive Services de esta página, acepta su licencia.By downloading any of the Speech SDK for Azure Cognitive Services components on this page, you acknowledge its license. Consulte los términos de licencia del software de Microsoft para el SDK de Voz.See the Microsoft Software License Terms for the Speech SDK.

La versión actual del SDK de Speech de Cognitive Services es 1.6.0.The current version of the Cognitive Services Speech SDK is 1.6.0.

El SDK de Voz para Linux se puede usar para crear aplicaciones de 64 bits y 32 bits.The Speech SDK for Linux can be used to build both 64-bit and 32-bit applications. Las bibliotecas y los archivos de encabezado necesarios se pueden descargar como un archivo tar desde https://aka.ms/csspeech/linuxbinary.The required libraries and header files can be downloaded as a tar file from https://aka.ms/csspeech/linuxbinary.

Descargue e instale el SDK de la forma siguiente:Download and install the SDK as follows:

  1. Asegúrese de que se instalan las dependencias del SDK.Make sure the SDK's dependencies are installed.

    • En Ubuntu:On Ubuntu:

      sudo apt-get update
      sudo apt-get install build-essential libssl1.0.0 libasound2 wget
      
    • En Debian 9:On Debian 9:

      sudo apt-get update
      sudo apt-get install build-essential libssl1.0.2 libasound2 wget
      
  2. Seleccione el directorio al que desea extraer los archivos del SDK de Voz y configure la variable de entorno SPEECHSDK_ROOT para que apunte a ese directorio.Choose a directory to which the Speech SDK files should be extracted, and set the SPEECHSDK_ROOT environment variable to point to that directory. Esta variable facilita la referencia al directorio en futuros comandos.This variable makes it easy to refer to the directory in future commands. Por ejemplo, si desea usar el directorio speechsdk en el directorio principal, use un comando similar al siguiente:For example, if you want to use the directory speechsdk in your home directory, use a command like the following:

    export SPEECHSDK_ROOT="$HOME/speechsdk"
    
  3. Cree el directorio si aún no existe.Create the directory if it doesn't exist yet.

    mkdir -p "$SPEECHSDK_ROOT"
    
  4. Descargue y extraiga el archivo .tar.gz que contienen los archivos binarios del SDK de Voz:Download and extract the .tar.gz archive containing the Speech SDK binaries:

    wget -O SpeechSDK-Linux.tar.gz https://aka.ms/csspeech/linuxbinary
    tar --strip 1 -xzf SpeechSDK-Linux.tar.gz -C "$SPEECHSDK_ROOT"
    
  5. Valide el contenido del directorio de nivel superior del paquete extraído:Validate the contents of the top-level directory of the extracted package:

    ls -l "$SPEECHSDK_ROOT"
    

    La lista de directorios debe contener los archivos de avisos y licencias de terceros, así como un directorio include que contenga archivos de encabezado (.h) y un directorio lib que contenga bibliotecas.The directory listing should contain the third-party notice and license files, as well as an include directory containing header (.h) files and a lib directory containing libraries.

    PathPath DESCRIPCIÓNDescription
    license.md LicenciaLicense
    ThirdPartyNotices.md Avisos de terceros.Third-party notices.
    REDIST.txt Aviso de redistribución.Redistribution notice.
    include Los archivos de encabezado necesarios para C y C++The required header files for C and C++
    lib/x64 Biblioteca nativa para x64 necesaria para vincular la aplicaciónNative library for x64 required to link your application
    lib/x86 Biblioteca nativa para x86 necesaria para vincular la aplicaciónNative library for x86 required to link your application

Adición de código de ejemploAdd sample code

  1. Cree un archivo de código fuente C++ denominado helloworld.cpp y pegue el siguiente código en él.Create a C++ source file named helloworld.cpp, and paste the following code into it.

    #include <iostream> // cin, cout
    #include <speechapi_cxx.h>
    
    using namespace std;
    using namespace Microsoft::CognitiveServices::Speech;
    
    void synthesizeSpeech()
    {
        // Creates an instance of a speech config with specified subscription key and service region.
        // Replace with your own subscription key and service region (e.g., "westus").
        auto config = SpeechConfig::FromSubscription("YourSubscriptionKey", "YourServiceRegion");
    
        // Creates a speech synthesizer using the default speaker as audio output. The default spoken language is "en-us".
        auto synthesizer = SpeechSynthesizer::FromConfig(config);
    
        // Receive a text from console input and synthesize it to speaker.
        cout << "Type some text that you want to speak..." << std::endl;
        cout << "> ";
        std::string text;
        getline(cin, text);
    
        auto result = synthesizer->SpeakTextAsync(text).get();
    
        // Checks result.
        if (result->Reason == ResultReason::SynthesizingAudioCompleted)
        {
            cout << "Speech synthesized to speaker for text [" << text << "]" << std::endl;
        }
        else if (result->Reason == ResultReason::Canceled)
        {
            auto cancellation = SpeechSynthesisCancellationDetails::FromResult(result);
            cout << "CANCELED: Reason=" << (int)cancellation->Reason << std::endl;
    
            if (cancellation->Reason == CancellationReason::Error)
            {
                cout << "CANCELED: ErrorCode=" << (int)cancellation->ErrorCode << std::endl;
                cout << "CANCELED: ErrorDetails=[" << cancellation->ErrorDetails << "]" << std::endl;
                cout << "CANCELED: Did you update the subscription info?" << std::endl;
            }
        }
    
        // This is to give some time for the speaker to finish playing back the audio
        cout << "Press enter to exit..." << std::endl;
        cin.get();
    }
    
    int main(int argc, char **argv) {
        setlocale(LC_ALL, "");
        synthesizeSpeech();
        return 0;
    }
    
  2. En este nuevo archivo, reemplace la cadena YourSubscriptionKey por su clave de suscripción de servicios de voz.In this new file, replace the string YourSubscriptionKey with your Speech Services subscription key.

  3. Reemplace la cadena YourServiceRegion por la región asociada a sus suscripción (por ejemplo, westus para la suscripción de evaluación gratuita).Replace the string YourServiceRegion with the region associated with your subscription (for example, westus for the free trial subscription).

Compilación de la aplicaciónBuild the app

Nota

Asegúrese de introducir los siguientes comandos como una única línea de comandos.Make sure to enter the commands below as a single command line. La forma más fácil de hacerlo es copiar el comando usando el botón Copiar junto a cada comando, y luego pegarlo en el símbolo del shell.The easiest way to do that is to copy the command by using the Copy button next to each command, and then paste it at your shell prompt.

  • En un sistema x64 (64 bits), ejecute el siguiente comando para crear la aplicación.On an x64 (64-bit) system, run the following command to build the application.

    g++ helloworld.cpp -o helloworld -I "$SPEECHSDK_ROOT/include/cxx_api" -I "$SPEECHSDK_ROOT/include/c_api" --std=c++14 -lpthread -lMicrosoft.CognitiveServices.Speech.core -L "$SPEECHSDK_ROOT/lib/x64" -l:libasound.so.2
    
  • En un sistema x86 (32 bits), ejecute el siguiente comando para crear la aplicación.On an x86 (32-bit) system, run the following command to build the application.

    g++ helloworld.cpp -o helloworld -I "$SPEECHSDK_ROOT/include/cxx_api" -I "$SPEECHSDK_ROOT/include/c_api" --std=c++14 -lpthread -lMicrosoft.CognitiveServices.Speech.core -L "$SPEECHSDK_ROOT/lib/x86" -l:libasound.so.2
    

Ejecución de la aplicaciónRun the app

  1. Configuración de la ruta de acceso de la biblioteca del cargador para que apunte a la biblioteca del SDK de Voz.Configure the loader's library path to point to the Speech SDK library.

    • En un sistema x64 (64 bits), escriba el siguiente comando.On an x64 (64-bit) system, enter the following command.

      export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$SPEECHSDK_ROOT/lib/x64"
      
    • En un sistema x86 (32 bits), escriba el siguiente comando.On an x86 (32-bit) system, enter this command.

      export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$SPEECHSDK_ROOT/lib/x86"
      
  2. Ejecute la aplicación.Run the application.

    ./helloworld
    
  3. En la ventana de consola aparece un aviso que le pide que escriba texto.In the console window, a prompt appears, prompting you to type some text. Escriba algunas palabras o una frase.Type a few words or a sentence. El texto que escriba se transmite a los servicios de Voz y se sintetiza en voz, la cual se reproduce en el altavoz.The text that you typed is transmitted to the Speech Services and synthesized to speech, which plays on your speaker.

    Type some text that you want to speak...
    > hello
    Speech synthesized to speaker for text [hello]
    Press enter to exit...
    

Pasos siguientesNext steps

Otras referenciasSee also