使用 base64 对音频内容进行编码

向 Speech-to-Text API 发送音频数据时,您可以直接发送数据(在请求的 content 字段中),也可以使 API 对存储在 Cloud Storage 存储桶中的数据远程执行识别。当音频数据不超过 60 秒和 10 MB 时,才可在 content 字段中直接发送数据以进行同步识别content 字段中的任何音频数据都必须采用 base64 格式。本页面介绍如何将音频从二进制文件转换为使用 base64 编码的数据。

如果音频数据超过 60 秒或 10 MB,则必须将其存储在 Cloud Storage 存储桶中才能发送以进行识别。您可以异步分析音频数据,无需将其转换为 base64 格式。如需了解详情,请参阅异步识别文档

使用命令行

在 gRPC 请求中,您可以直接写出二进制数据;但是,在发出 REST 请求时系统会使用 JSON。JSON 是一种不直接支持二进制数据的文本格式,因此您需要使用 Base64 编码将此类二进制数据转换为文本。

大多数开发环境都包含一个原生 base64 实用程序,用于将二进制文件编码为 ASCII 文本数据。如需对文件进行编码,请按照以下说明操作:

Linux

使用 base64 命令行工具对文件进行编码,请注意,务必使用 -w 0 标志以避免换行:

base64 INPUT_FILE -w 0 > OUTPUT_FILE

macOS

使用 base64 命令行工具对文件进行编码:

base64 -i INPUT_FILE -o OUTPUT_FILE

Windows

使用 Base64.exe 工具对文件进行编码:

Base64.exe -e INPUT_FILE > OUTPUT_FILE

PowerShell

使用 Convert.ToBase64String 方法对文件进行编码:

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

创建 JSON 请求文件,并内嵌 base64 编码的数据:

JSON

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

使用客户端库

通过文本编辑器将二进制数据嵌入请求中既不可取也不实用。在实际使用中,您应在客户端代码中嵌入使用 base64 编码的文件。所有受支持的编程语言都内置有适用于 base64 编码内容的机制。

Python

在 Python 中,使用 base64 编码的音频文件如下所示:

# 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

在 Node.js 中,base64 以如下方式对音频文件进行编码,其中 audioFile 是音频编码文件的路径。

const fs = require('fs');
const content = fs.readFileSync(audioFile).toString('base64');

Java

对于 Java,请在 org.apache.commons.codec.binary.Base64 中使用 encodeBase64 静态方法对二进制文件进行 base64 编码:

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

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