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 中,請使用 encodeBase64 靜態方法 (位於 org.apache.commons.codec.binary.Base64 中),對二進位檔案進行 base64 編碼:

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

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