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 エンコードを使用して、テキストに変換する必要があります。

ほとんどの開発環境には、バイナリを ASCII テキストデータにエンコードするネイティブの base64 ユーティリティがあります。ファイルをエンコードするには:

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

base64 エンコードされたデータをインラインで挿入して、JSON リクエスト ファイルを作成します。

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