Contenido de audio codificado en Base64

En esta página, se describe cómo convertir audio de un archivo binario a datos codificados en Base64.

Cuando pasas audio a la API de Speech, puedes pasar el URI de un archivo ubicado en Google Cloud Storage o puede incorporar datos de audio directamente en el campo content de la solicitud.

Audio codificado en Base64

Los datos de audio son datos binarios. Dentro de una solicitud gRPC, puedes escribir los datos binarios directamente; sin embargo, para realizar una solicitud REST, se utiliza JSON. Es un formato de texto que no admite directamente datos binarios, por lo que deberás convertir estos datos binarios en texto mediante la codificación Base64.

Para codificar un archivo de audio en Base64, haz lo siguiente:

Linux

  1. Codifica el archivo de audio con la herramienta de línea de comandos de Base64 y asegúrate de evitar el ajuste de línea con la marca -w 0:
    $ base64 source_audio_file -w 0 > dest_audio_file

2 Crea un archivo de solicitud JSON; intercala el audio codificado en Base64 dentro del campo content de la solicitud:

    {
      "config": {
        "encoding":"FLAC",
        "sampleRateHertz":16000,
        "languageCode":"en-US"
      },
      "audio": {
        "content": "ZkxhQwAAACIQABAAAAUJABtAA+gA8AB+W8FZndQvQAyjv..."
      }
    }

macOS

  1. Codifica el archivo de audio con la herramienta de línea de comandos Base64 como sigue:
    $ base64 source_audio_file > dest_audio_file

2 Crea un archivo de solicitud JSON; intercala el audio codificado en Base64 dentro del campo content de la solicitud:

    {
      "config": {
        "encoding":"FLAC",
        "sampleRateHertz":16000,
        "languageCode":"en-US"
      },
      "audio": {
        "content": "ZkxhQwAAACIQABAAAAUJABtAA+gA8AB+W8FZndQvQAyjv..."
      }
    }

Windows

  1. Codifica el archivo de audio con la herramienta Base64.exe:
    C:> Base64.exe -e source_audio_file > dest_audio_file

2 Crea un archivo de solicitud JSON; intercala el audio codificado en Base64 dentro del campo content de la solicitud:

    {
      "config": {
        "encoding":"FLAC",
        "sampleRateHertz":16000,
        "languageCode":"en-US"
       },
      "audio": {
        "content": "ZkxhQwAAACIQABAAAAUJABtAA+gA8AB+W8FZndQvQAyjv..."
      }
    }

Incorpora contenido de audio de manera programática

La incorporación de datos binarios de audio en solicitudes a través de editores de texto no es conveniente ni práctico. En la práctica, incorporarás archivos codificados en Base64 dentro del código del cliente. Todos los lenguajes de programación compatibles tienen mecanismos incorporados para el contenido de codificación en Base64:

Python

En Python, puedes codificar archivos de audio codificados en Base64 de la siguiente manera:

# Import the base64 encoding library.
import base64

# Pass the audio data to an encoding function.
def encode_audio(audio):
  audio_content = audio.read()
  return base64.b64encode(audio_content)

Node.js

En Node.js, codifica en Base64 los archivos de audio de la siguiente manera, en la que audioFile son los datos de audio codificados en formato binario:

// Imports the Google Cloud client library
const fs = require('fs');
const speech = require('@google-cloud/speech');

// Creates a client
const client = new speech.SpeechClient();

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// const filename = 'Local path to audio file, e.g. /path/to/audio.raw';
// const encoding = 'Encoding of the audio file, e.g. LINEAR16';
// const sampleRateHertz = 16000;
// const languageCode = 'BCP-47 language code, e.g. en-US';

const config = {
  encoding: encoding,
  sampleRateHertz: sampleRateHertz,
  languageCode: languageCode,
};
const audio = {
  content: fs.readFileSync(filename).toString('base64'),
};

const request = {
  config: config,
  audio: audio,
};

// Detects speech in the audio file
const [response] = await client.recognize(request);
const transcription = response.results
  .map(result => result.alternatives[0].transcript)
  .join('\n');
console.log('Transcription: ', transcription);

Java

En Java, usa el método estático encodeBase64 dentro de org.apache.commons.codec.binary.Base64 para codificar los archivos binarios en Base64:

// Import the Base64 encoding library.
import org.apache.commons.codec.binary.Base64;

// Encode the speech.
byte[] encodedAudio = Base64.encodeBase64(audio.getBytes());