Gemini API を使用した音声機能の詳細

Gemini は、音声に関するプロンプトに応答できます。たとえば、Gemini は次のことを行えます。

  • 音声コンテンツの説明、要約、質問への回答を行う。
  • 音声の文字起こしを提供します。
  • 音声の特定のセグメントに関する回答または文字変換を提供します。

このガイドでは、Gemini API を使用して音声ファイルと音声コンテンツを操作するさまざまな方法について説明します。

サポートされているオーディオ形式

Gemini は、次の音声形式の MIME タイプをサポートしています。

  • WAV - audio/wav
  • MP3 - audio/mp3
  • AIFF - audio/aiff
  • AAC - audio/aac
  • OGG Vorbis - audio/ogg
  • FLAC - audio/flac

オーディオに関する技術的な詳細

Gemini では、音声に対して次のルールが適用されます。

  • Gemini では、音声の 1 秒は 32 個のトークンとして表されます。たとえば、1 分間の音声は 1,920 個のトークンとして表されます。
  • Gemini は、英語の音声に対する回答のみを推測できます。
  • Gemini は、鳥のさえずりやサイレンなど、音声以外のコンポーネントを「理解」できます。
  • 1 つのプロンプトでサポートされる音声データの最大長は 9.5 時間です。Gemini では、1 つのプロンプト内の音声ファイルのに制限はありませんが、1 つのプロンプト内のすべての音声ファイルの合計時間は 9.5 時間を超過できません。
  • Gemini は、音声ファイルを 16 Kbps のデータ解像度にダウンサンプリングします。
  • 音声ソースに複数のチャンネルが含まれている場合、Gemini はこれらのチャンネルを 1 つのチャンネルに統合します。

始める前に: プロジェクトと API キーを設定する

Gemini API を呼び出す前に、プロジェクトを設定し、API キーを構成する必要があります。

音声ファイルを Gemini で使用できるようにする

音声ファイルを Gemini で使用できるようにするには、次のいずれかの方法を使用します。

  • プロンプト リクエストを送信する前に、音声ファイルをアップロードします。
  • 音声ファイルをインライン データとしてプロンプト リクエストに指定します。

音声ファイルをアップロードしてコンテンツを生成する

File API を使用すると、任意のサイズの音声ファイルをアップロードできます。リクエストの合計サイズ(ファイル、テキスト プロンプト、システム インストラクションなど)が 20 MB を超える場合は、常に File API を使用してください。

media.upload を呼び出して、File API を使用してファイルをアップロードします。次のコードは、音声ファイルをアップロードし、models.generateContent の呼び出しでそのファイルを使用します。

MIME_TYPE=$(file -b --mime-type "${AUDIO_PATH}")
NUM_BYTES=$(wc -c < "${AUDIO_PATH}")
DISPLAY_NAME=AUDIO

tmp_header_file=upload-header.tmp

# Initial resumable request defining metadata.
# The upload url is in the response headers dump them to a file.
curl "${BASE_URL}/upload/v1beta/files?key=${GEMINI_API_KEY}" \
  -D upload-header.tmp \
  -H "X-Goog-Upload-Protocol: resumable" \
  -H "X-Goog-Upload-Command: start" \
  -H "X-Goog-Upload-Header-Content-Length: ${NUM_BYTES}" \
  -H "X-Goog-Upload-Header-Content-Type: ${MIME_TYPE}" \
  -H "Content-Type: application/json" \
  -d "{'file': {'display_name': '${DISPLAY_NAME}'}}" 2> /dev/null

upload_url=$(grep -i "x-goog-upload-url: " "${tmp_header_file}" | cut -d" " -f2 | tr -d "\r")
rm "${tmp_header_file}"

# Upload the actual bytes.
curl "${upload_url}" \
  -H "Content-Length: ${NUM_BYTES}" \
  -H "X-Goog-Upload-Offset: 0" \
  -H "X-Goog-Upload-Command: upload, finalize" \
  --data-binary "@${AUDIO_PATH}" 2> /dev/null > file_info.json

file_uri=$(jq ".file.uri" file_info.json)
echo file_uri=$file_uri

# Now generate content using that file
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key=$GEMINI_API_KEY" \
    -H 'Content-Type: application/json' \
    -X POST \
    -d '{
      "contents": [{
        "parts":[
          {"text": "Describe this audio clip"},
          {"file_data":{"mime_type": "audio/mp3", "file_uri": '$file_uri'}}]
        }]
       }' 2> /dev/null > response.json

cat response.json
echo

jq ".candidates[].content.parts[].text" response.json

ファイルのメタデータを取得する

API がアップロードされたファイルを正常に保存したことを確認するには、files.get を呼び出してメタデータを取得します。

name=$(jq ".file.name" file_info.json)
# Get the file of interest to check state
curl https://generativelanguage.googleapis.com/v1beta/files/$name > file_info.json
# Print some information about the file you got
name=$(jq ".file.name" file_info.json)
echo name=$name
file_uri=$(jq ".file.uri" file_info.json)
echo file_uri=$file_uri

アップロードしたファイルを一覧表示する

複数の音声ファイル(および他の種類のファイル)をアップロードできます。次のコードは、アップロードされたすべてのファイルのリストを生成します。

echo "My files: "

curl "https://generativelanguage.googleapis.com/v1beta/files?key=$GEMINI_API_KEY"

アップロードしたファイルを削除する

ファイルは 48 時間後に自動的に削除されます。必要に応じて、アップロードしたファイルを手動で削除できます。次に例を示します。

curl --request "DELETE" https://generativelanguage.googleapis.com/v1beta/files/$name?key=$GEMINI_API_KEY

次のステップ

このガイドでは、File API を使用して音声ファイルをアップロードし、音声入力からテキスト出力を生成する方法について説明します。詳細については、次のリソースをご覧ください。

  • ファイル プロンプト戦略: Gemini API は、テキスト、画像、音声、動画データによるプロンプト(マルチモーダル プロンプト)をサポートしています。
  • システム指示: システム指示を使用すると、特定のニーズやユースケースに基づいてモデルの動作を制御できます。
  • 安全性に関するガイダンス: 生成 AI モデルは、不正確な出力、偏見のある出力、不適切な出力など、予期しない出力を生成することがあります。このような出力による被害のリスクを軽減するには、後処理と人間による評価が不可欠です。