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

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

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

嵌入使用 base64 编码的音频

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

要对音频文件进行 base64 编码,请执行以下操作:

Linux

  1. 使用 base64 命令行工具对音频文件进行编码,请注意,务必使用 -w 0 标志以免换行:
    $ base64 source_audio_file -w 0 > dest_audio_file

2. 创建一个 JSON 请求文件,并在该请求的 content 字段中内嵌使用 base64 编码的音频:

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

Mac OSX

  1. 使用 base64 命令行工具对音频文件进行编码:
    $ base64 source_audio_file > dest_audio_file

2. 创建一个 JSON 请求文件,并在该请求的 content 字段中内嵌使用 base64 编码的音频:

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

Windows

  1. 使用 Base64.exe 工具对音频文件进行编码:
    C:> Base64.exe -e source_audio_file > dest_audio_file

2. 创建一个 JSON 请求文件,并在该请求的 content 字段中内嵌使用 base64 编码的音频:

    {
      "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 是使用二进制编码的音频数据:

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

对于 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());