Base64 エンコード音声コンテンツ

Speech-to-Text API に音声データを送信する場合は、データを直接送信するか(リクエストの content フィールドに指定)、API を使用して Google Cloud Storage バケットに格納されているデータにリモート認識を行います。音声データが 60 秒以下で 10 MB 以下の場合にのみ同期認識content フィールドでデータを直接送信できます。content フィールド内の音声データは base64 形式である必要があります。このページでは、音声をバイナリ ファイルから base64 エンコード データに変換する方法について説明します。

60 秒または 10 MB を超える音声データを送信して認識を行うには、データを Google Cloud Storage バケットに保存する必要があります。base64 形式に変換せずに非同期で分析することもできます。詳細については、非同期認識のドキュメントをご覧ください。

Base64 エンコード音声の埋め込み

音声データはバイナリデータです。gRPC リクエスト内に単純にバイナリデータを書き込むことができますが、REST リクエストを行う際には、JSON が使われます。JSON はバイナリデータを直接サポートしていないテキスト形式であるため、それらのバイナリデータは Base64 エンコードを使用して、テキストに変換する必要があります。

音声ファイルを base64 エンコードするには:

Linux

  1. base64 コマンドライン ツールを使用して、音声ファイルをエンコードし、-w 0 フラグを使用して、行の折り返しを防ぎます。
    $ base64 source_audio_file -w 0 > dest_audio_file

2.リクエストの content フィールド内に base64 エンコードされた音声ファイルをインラインで挿入して、JSON リクエスト ファイルを作成します。

    {
      "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.リクエストの content フィールド内に base64 エンコードされた音声ファイルをインラインで挿入して、JSON リクエスト ファイルを作成します。

    {
      "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.リクエストの content フィールド内に base64 エンコードされた音声ファイルをインラインで挿入して、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 はバイナリ エンコードの音声ファイルです。

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