Conteúdo de áudio com codificação Base64

Quando você envia dados de áudio para a API Speech-to-Text, é possível enviá-los diretamente (no campo content da solicitação) ou ter a API executar o reconhecimento remotamente nos dados armazenados em um bucket do Google Cloud Storage. Só é possível enviar dados diretamente no campo content para reconhecimento síncrono somente se os seus dados de áudio tiverem no máximo 60 segundos e 10 MB. Todos os dados de áudio no campo content precisam estar no formato base64. Nesta página, veja como converter áudio de um arquivo binário para dados codificados como Base64.

Se os dados de áudio excederem 60 segundos ou 10 MB, eles precisarão ser armazenados em um bucket do Google Cloud Storage para serem enviados para reconhecimento. Você pode analisá-lo de forma assíncrona sem convertê-lo no formato base64. Consulte a documentação de reconhecimento assíncrono para mais detalhes.

Como incorporar o áudio com codificação Base64

Os dados de áudio são binários. Em uma solicitação gRPC, você pode simplesmente gravar os dados binários diretamente; no entanto, JSON é usado ao fazer uma solicitação REST. JSON é um formato de texto que não suporta diretamente dados binários, então você precisará converter esses dados binários em texto usando a codificação Base64.

Para codificar um arquivo de áudio em base64:

Linux

  1. Codifique o arquivo de áudio usando a ferramenta de linha de comando base64, evitando a quebra automática de linha usando a sinalização -w 0:
    $ base64 source_audio_file -w 0 > dest_audio_file

2. Crie um arquivo de solicitação JSON, colocando o áudio com codificação base64 in-line no campo content da solicitação:

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

Mac OSX

  1. Codifique o arquivo de áudio usando a ferramenta de linha de comando base64:
    $ base64 source_audio_file > dest_audio_file

2. Crie um arquivo de solicitação JSON, colocando o áudio com codificação base64 in-line no campo content da solicitação:

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

Windows

  1. Codifique o arquivo de áudio usando a ferramenta Base64.exe:
    C:> Base64.exe -e source_audio_file > dest_audio_file

2. Crie um arquivo de solicitação JSON, colocando o áudio com codificação base64 in-line no campo content da solicitação:

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

Como incorporar o conteúdo de áudio de modo programático

Incorporar dados binários de áudio em solicitações por meio de editores de texto não é desejável nem prático. Na prática, você estará incorporando arquivos com codificação base64 no código do cliente. Todas as linguagens de programação compatíveis têm mecanismos integrados para o conteúdo de codificação base64:

Python

Em Python, codifique os arquivos de áudio em base64 da seguinte maneira:

# 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

Em Node.js, codifique os arquivos de áudio em Base64 da seguinte maneira, sendo que audioFile são os dados de áudio com codificação binária:

// 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

No Java, use o método estático encodeBase64 dentro de org.apache.commons.codec.binary.Base64 para codificar arquivos binários de codificação base64:

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

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