Base64-Codierung von Audioinhalten

Wenn Sie Audiodaten an die Speech-to-Text API senden, können Sie die Daten entweder direkt (im Feld content der Anfrage) senden oder die API Spracherkennung aus der Ferne für Daten durchführen lassen, die in einem Google Cloud Storage-Bucket gespeichert sind. Audiodaten können zur synchronen Erkennung nur direkt im Feld content gesendet werden, wenn sie maximal 60 Sekunden und 10 MB groß sind. Alle Audiodaten im Feld content müssen das base64-Format haben. Auf dieser Seite wird beschrieben, wie Audiodaten aus einer Binärdatei in base64-codierte Daten umgewandelt werden.

Wenn Ihre Audiodaten 60 Sekunden oder 10 MB überschreiten, müssen sie in einem Google Cloud Storage-Bucket gespeichert werden, damit sie zur Erkennung gesendet werden können. Sie können sie asynchron analysieren, ohne sie in das base64-Format zu konvertieren. Weitere Informationen finden Sie in der Dokumentation zur asynchronen Erkennung.

Base64-codierte Audiodaten einbetten

Audiodaten sind binäre Daten. Innerhalb einer gRPC-Anfrage können Sie die Binärdaten einfach direkt ausschreiben. Bei einer REST-Anfrage müssen Sie jedoch JSON verwenden. JSON ist ein Textformat, das Binärdaten nicht direkt unterstützt, weshalb diese mit der base64-Codierung in Text umgewandelt werden müssen.

So codieren Sie eine Audiodatei mit base64:

Linux

  1. Codieren Sie die Audiodatei mit dem base64-Befehlszeilentool und achten Sie darauf, dass Zeilenumbrüche verhindert werden. Verwenden Sie dazu das Flag -w 0:
    $ base64 source_audio_file -w 0 > dest_audio_file

2. Erstellen Sie eine JSON-Anfragedatei, die das base64-codierte Audio im Feld content des Anfragebereichs enthält:

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

Mac OSX

  1. Codieren Sie die Audiodatei mit dem Befehlszeilentool base64:
    $ base64 source_audio_file > dest_audio_file

2. Erstellen Sie eine JSON-Anfragedatei, die das base64-codierte Audio im Feld content des Anfragebereichs enthält:

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

Windows

  1. Codieren Sie die Audiodatei mit dem Befehlszeilentool Base64.exe:
    C:> Base64.exe -e source_audio_file > dest_audio_file

2. Erstellen Sie eine JSON-Anfragedatei, die das base64-codierte Audio im Feld content des Anfragebereichs enthält:

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

Audioinhalte programmgesteuert einbetten

Binäre Audiodaten mit Texteditoren in Anfragen einzubetten, ist weder wünschenswert noch praktisch. In der Praxis betten Sie base64-codierte Dateien in den Clientcode ein. Alle unterstützten Programmiersprachen haben integrierte Mechanismen für die base64-codierte Inhalte:

Python

So codieren Sie Audiodateien mit base64 in Python:

# 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

So codieren Sie Audiodateien mit base64 in Node.js, wobei audioFile die binärcodierten Audiodaten sind:

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

Mit der statischen Methode encodeBase64 in org.apache.commons.codec.binary.Base64 codieren Sie in Java Binärdateien in base64:

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

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