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