Encoder du contenu audio en base64

Lorsque vous envoyez des données audio à l'API Speech-to-Text, vous pouvez soit les envoyer directement (via le champ content de la requête), soit faire en sorte que l'API effectue une reconnaissance à distance des données stockées dans un bucket Cloud Storage en spécifiant l'objet de stockage dans le champ uri de la requête.

Toutes les données audio du champ content dans les requêtes HTTP doivent être au format base64. Vous trouverez sur cette page la procédure à suivre pour convertir le contenu audio d'un fichier binaire en données encodées en base64.

Utiliser la ligne de commande

Dans une requête gRPC, vous pouvez écrire directement les données binaires. Cependant, une requête REST utilise JSON. JSON est un format de texte qui n'est pas directement compatible avec les données binaires. Vous devez donc convertir ces données binaires en texte en utilisant l'encodage Base64.

La plupart des environnements de développement contiennent un utilitaire natif base64 permettant d'encoder un fichier binaire en données texte ASCII. Pour encoder un fichier, procédez comme suit :

Linux

Encodez le fichier vidéo à l'aide de l'outil de ligne de commande base64, en veillant à empêcher tout retour à la ligne grâce à l'indicateur -w 0 :

base64 INPUT_FILE -w 0 > OUTPUT_FILE

macOS

Encodez le fichier à l'aide de l'outil de ligne de commande base64 :

base64 -i INPUT_FILE -o OUTPUT_FILE

Windows

Encodez le fichier à l'aide de l'outil Base64.exe :

Base64.exe -e INPUT_FILE > OUTPUT_FILE

PowerShell

Encodez le fichier à l'aide de la méthode Convert.ToBase64String :

[Convert]::ToBase64String([IO.File]::ReadAllBytes("./INPUT_FILE")) > OUTPUT_FILE

Créez un fichier de requête JSON en intégrant les données encodées en base64 :

JSON

{
  "recognizer": "projects/PROJECT_ID/locations/global/recognizers/_",
  "content": "ZkxhQwAAACIQABAAAAUJABtAA+gA8AB+W8FZndQvQAyjv..."
}

Utiliser les bibliothèques clientes

L'intégration de données binaires dans des requêtes via des éditeurs de texte n'est pas plus souhaitable qu'elle n'est pratique. Concrètement, vous allez incorporer des fichiers encodés en base64 dans le code client. Tous les langages de programmation compatibles intègrent des mécanismes d'encodage de contenu en base64.

Python

En Python, vous pouvez encoder les fichiers audio en base64 comme suit :

# Import the base64 encoding library.
import base64

# Pass the audio data to an encoding function.
def encode_audio(audio_file):
    with open(audio_file, "rb") as f:
        encoded_content = base64.b64encode(f.read())
    return encoded_content

Node.js

// Read the file into memory.
var fs = require('fs');
var audioFile = fs.readFileSync('/full/path/to/audio/file.wav');

// Convert the audio data to a Buffer and base64 encode it.
var encoded = Buffer.from(audioFile).toString('base64');

Java

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

// Encode the audio.
byte[] audioData = Base64.encodeBase64(audioFile.getBytes());
String encodedString = Base64.getEncoder().encodeToString(audioData);

Go

import (
    "bufio"
    "encoding/base64"
    "io"
    "os"
)

// Open audio file.
f, _ := os.Open("/full/path/to/audio/file.wav")

// Read entire audio into byte slice.
reader := bufio.NewReader(f)
content, _ := io.ReadAll(reader)

// Encode audio as base64.
base64.StdEncoding.EncodeToString(content)