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