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

本页介绍如何将音频从二进制文件转换为使用 base64 编码的数据。

向 Speech API 传递音频时,您可以传递位于 Google Cloud Storage 上的文件的 URI,也可以直接在请求的 content 字段内嵌入音频数据。

嵌入使用 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());