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 はバイナリ エンコードの音声ファイルです。

// Provides "hints" to the speech recognizer to favor
// specific classes of words in the results.

// Imports the Google Cloud client library
const speech = require('@google-cloud/speech');

// Creates a client
const client = new speech.SpeechClient();

async function transcribeContextClasses() {
  // storageUri = 'gs://YOUR_BUCKET_ID/path/to/your/file.wav'
  const audio = {
    uri: storageUri,
  };

  // SpeechContext: to configure your speech_context see:
  // https://cloud.google.com/speech-to-text/docs/reference/rpc/google.cloud.speech.v1#speechcontext
  // Full list of supported phrases(class tokens) here:
  // https://cloud.google.com/speech-to-text/docs/class-tokens
  const speechContext = {
    phrases: ['$TIME'],
  };

  // RecognitionConfig: to configure your encoding and sample_rate_hertz, see:
  // https://cloud.google.com/speech-to-text/docs/reference/rpc/google.cloud.speech.v1#recognitionconfig
  const config = {
    encoding: 'LINEAR16',
    sampleRateHertz: 8000,
    languageCode: 'en-US',
    speechContexts: [speechContext],
  };

  const request = {
    config: config,
    audio: audio,
  };

  // Detects speech in the audio file.
  const [response] = await client.recognize(request);
  response.results.forEach((result, index) => {
    const transcript = result.alternatives[0].transcript;
    console.log('-'.repeat(20));
    console.log(`First alternative of result ${index}`);
    console.log(`Transcript: ${transcript}`);
  });
}

transcribeContextClasses();

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