Gemini может анализировать и понимать аудиовход, что позволяет использовать его в следующих случаях:
- Опишите, обобщите или ответьте на вопросы об аудиоконтенте.
- Предоставьте транскрипцию аудиозаписи.
- Проанализируйте отдельные фрагменты аудиозаписи.
В этом руководстве показано, как использовать API Gemini для генерации текстового ответа на аудиовход.
Прежде чем начать
Перед вызовом API Gemini убедитесь, что у вас установлен нужный вам SDK , а также настроен и готов к использованию ключ API Gemini .
Входной аудиосигнал
Вы можете предоставить аудиоданные Gemini следующими способами:
-  Прежде чем отправлять запрос на generateContent, загрузите аудиофайл .
-  Передайте встроенные аудиоданные с запросом generateContent.
Загрузить аудиофайл
Вы можете использовать API Files для загрузки аудиофайла. Всегда используйте API Files, если общий размер запроса (включая файлы, текстовую подсказку, системные инструкции и т. д.) превышает 20 МБ.
 Следующий код загружает аудиофайл, а затем использует его в вызове generateContent . 
Питон
from google import genai
client = genai.Client()
myfile = client.files.upload(file="path/to/sample.mp3")
response = client.models.generate_content(
    model="gemini-2.5-flash", contents=["Describe this audio clip", myfile]
)
print(response.text)
JavaScript
import {
  GoogleGenAI,
  createUserContent,
  createPartFromUri,
} from "@google/genai";
const ai = new GoogleGenAI({});
async function main() {
  const myfile = await ai.files.upload({
    file: "path/to/sample.mp3",
    config: { mimeType: "audio/mp3" },
  });
  const response = await ai.models.generateContent({
    model: "gemini-2.5-flash",
    contents: createUserContent([
      createPartFromUri(myfile.uri, myfile.mimeType),
      "Describe this audio clip",
    ]),
  });
  console.log(response.text);
}
await main();
Идти
package main
import (
  "context"
  "fmt"
  "os"
  "google.golang.org/genai"
)
func main() {
  ctx := context.Background()
  client, err := genai.NewClient(ctx, nil)
  if err != nil {
      log.Fatal(err)
  }
  localAudioPath := "/path/to/sample.mp3"
  uploadedFile, _ := client.Files.UploadFromPath(
      ctx,
      localAudioPath,
      nil,
  )
  parts := []*genai.Part{
      genai.NewPartFromText("Describe this audio clip"),
      genai.NewPartFromURI(uploadedFile.URI, uploadedFile.MIMEType),
  }
  contents := []*genai.Content{
      genai.NewContentFromParts(parts, genai.RoleUser),
  }
  result, _ := client.Models.GenerateContent(
      ctx,
      "gemini-2.5-flash",
      contents,
      nil,
  )
  fmt.Println(result.Text())
}
ОТДЫХ
AUDIO_PATH="path/to/sample.mp3"
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 "https://generativelanguage.googleapis.com/upload/v1beta/files" \
  -H "x-goog-api-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-2.5-flash:generateContent" \
    -H "x-goog-api-key: $GEMINI_API_KEY" \
    -H 'Content-Type: application/json' \
    -X POST \
    -d '{
      "contents": [{
        "parts":[
          {"text": "Describe this audio clip"},
          {"file_data":{"mime_type": "${MIME_TYPE}", "file_uri": '$file_uri'}}]
        }]
      }' 2> /dev/null > response.json
cat response.json
echo
jq ".candidates[].content.parts[].text" response.json
Дополнительную информацию о работе с медиафайлами см. в разделе Files API .
Передача аудиоданных в строку
 Вместо загрузки аудиофайла вы можете передать встроенные аудиоданные в запросе generateContent : 
Питон
from google import genai
from google.genai import types
with open('path/to/small-sample.mp3', 'rb') as f:
    audio_bytes = f.read()
client = genai.Client()
response = client.models.generate_content(
  model='gemini-2.5-flash',
  contents=[
    'Describe this audio clip',
    types.Part.from_bytes(
      data=audio_bytes,
      mime_type='audio/mp3',
    )
  ]
)
print(response.text)
JavaScript
import { GoogleGenAI } from "@google/genai";
import * as fs from "node:fs";
const ai = new GoogleGenAI({});
const base64AudioFile = fs.readFileSync("path/to/small-sample.mp3", {
  encoding: "base64",
});
const contents = [
  { text: "Please summarize the audio." },
  {
    inlineData: {
      mimeType: "audio/mp3",
      data: base64AudioFile,
    },
  },
];
const response = await ai.models.generateContent({
  model: "gemini-2.5-flash",
  contents: contents,
});
console.log(response.text);
Идти
package main
import (
  "context"
  "fmt"
  "os"
  "google.golang.org/genai"
)
func main() {
  ctx := context.Background()
  client, err := genai.NewClient(ctx, nil)
  if err != nil {
      log.Fatal(err)
  }
  audioBytes, _ := os.ReadFile("/path/to/small-sample.mp3")
  parts := []*genai.Part{
      genai.NewPartFromText("Describe this audio clip"),
    &genai.Part{
      InlineData: &genai.Blob{
        MIMEType: "audio/mp3",
        Data:     audioBytes,
      },
    },
  }
  contents := []*genai.Content{
      genai.NewContentFromParts(parts, genai.RoleUser),
  }
  result, _ := client.Models.GenerateContent(
      ctx,
      "gemini-2.5-flash",
      contents,
      nil,
  )
  fmt.Println(result.Text())
}
Несколько вещей, которые следует иметь в виду относительно встроенных аудиоданных:
- Максимальный размер запроса составляет 20 МБ, включая текстовые подсказки, системные инструкции и файлы, предоставленные в строке. Если размер вашего файла приведет к тому, что общий размер запроса превысит 20 МБ, используйте API файлов, чтобы загрузить аудиофайл для использования в запросе.
- Если вы используете аудиофрагмент несколько раз, эффективнее загрузить аудиофайл .
Получить расшифровку
Чтобы получить расшифровку аудиоданных, просто попросите об этом в командной строке:
Питон
from google import genai
client = genai.Client()
myfile = client.files.upload(file='path/to/sample.mp3')
prompt = 'Generate a transcript of the speech.'
response = client.models.generate_content(
  model='gemini-2.5-flash',
  contents=[prompt, myfile]
)
print(response.text)
JavaScript
import {
  GoogleGenAI,
  createUserContent,
  createPartFromUri,
} from "@google/genai";
const ai = new GoogleGenAI({});
const myfile = await ai.files.upload({
  file: "path/to/sample.mp3",
  config: { mimeType: "audio/mpeg" },
});
const result = await ai.models.generateContent({
  model: "gemini-2.5-flash",
  contents: createUserContent([
    createPartFromUri(myfile.uri, myfile.mimeType),
    "Generate a transcript of the speech.",
  ]),
});
console.log("result.text=", result.text);
Идти
package main
import (
  "context"
  "fmt"
  "os"
  "google.golang.org/genai"
)
func main() {
  ctx := context.Background()
  client, err := genai.NewClient(ctx, nil)
  if err != nil {
      log.Fatal(err)
  }
  localAudioPath := "/path/to/sample.mp3"
  uploadedFile, _ := client.Files.UploadFromPath(
      ctx,
      localAudioPath,
      nil,
  )
  parts := []*genai.Part{
      genai.NewPartFromText("Generate a transcript of the speech."),
      genai.NewPartFromURI(uploadedFile.URI, uploadedFile.MIMEType),
  }
  contents := []*genai.Content{
      genai.NewContentFromParts(parts, genai.RoleUser),
  }
  result, _ := client.Models.GenerateContent(
      ctx,
      "gemini-2.5-flash",
      contents,
      nil,
  )
  fmt.Println(result.Text())
}
См. временные метки
 Вы можете ссылаться на определенные разделы аудиофайла, используя временные метки в форме MM:SS . Например, следующий запрос запрашивает транскрипт, который
- Начинается с 2 минут 30 секунд от начала файла.
- Заканчивается на 3 минуте 29 секунде от начала файла. 
Питон
# Create a prompt containing timestamps.
prompt = "Provide a transcript of the speech from 02:30 to 03:29."
JavaScript
// Create a prompt containing timestamps.
const prompt = "Provide a transcript of the speech from 02:30 to 03:29."
Идти
package main
import (
  "context"
  "fmt"
  "os"
  "google.golang.org/genai"
)
func main() {
  ctx := context.Background()
  client, err := genai.NewClient(ctx, nil)
  if err != nil {
      log.Fatal(err)
  }
  localAudioPath := "/path/to/sample.mp3"
  uploadedFile, _ := client.Files.UploadFromPath(
      ctx,
      localAudioPath,
      nil,
  )
  parts := []*genai.Part{
      genai.NewPartFromText("Provide a transcript of the speech " +
                            "between the timestamps 02:30 and 03:29."),
      genai.NewPartFromURI(uploadedFile.URI, uploadedFile.MIMEType),
  }
  contents := []*genai.Content{
      genai.NewContentFromParts(parts, genai.RoleUser),
  }
  result, _ := client.Models.GenerateContent(
      ctx,
      "gemini-2.5-flash",
      contents,
      nil,
  )
  fmt.Println(result.Text())
}
Подсчет жетонов
 Вызовите метод countTokens , чтобы получить количество токенов в аудиофайле. Например: 
Питон
from google import genai
client = genai.Client()
response = client.models.count_tokens(
  model='gemini-2.5-flash',
  contents=[myfile]
)
print(response)
JavaScript
import {
  GoogleGenAI,
  createUserContent,
  createPartFromUri,
} from "@google/genai";
const ai = new GoogleGenAI({});
const myfile = await ai.files.upload({
  file: "path/to/sample.mp3",
  config: { mimeType: "audio/mpeg" },
});
const countTokensResponse = await ai.models.countTokens({
  model: "gemini-2.5-flash",
  contents: createUserContent([
    createPartFromUri(myfile.uri, myfile.mimeType),
  ]),
});
console.log(countTokensResponse.totalTokens);
Идти
package main
import (
  "context"
  "fmt"
  "os"
  "google.golang.org/genai"
)
func main() {
  ctx := context.Background()
  client, err := genai.NewClient(ctx, nil)
  if err != nil {
      log.Fatal(err)
  }
  localAudioPath := "/path/to/sample.mp3"
  uploadedFile, _ := client.Files.UploadFromPath(
      ctx,
      localAudioPath,
      nil,
  )
  parts := []*genai.Part{
      genai.NewPartFromURI(uploadedFile.URI, uploadedFile.MIMEType),
  }
  contents := []*genai.Content{
      genai.NewContentFromParts(parts, genai.RoleUser),
  }
  tokens, _ := client.Models.CountTokens(
      ctx,
      "gemini-2.5-flash",
      contents,
      nil,
  )
  fmt.Printf("File %s is %d tokens\n", localAudioPath, tokens.TotalTokens)
}
Поддерживаемые аудиоформаты
Gemini поддерживает следующие типы аудиоформатов MIME:
-  WAV - audio/wav
-  MP3 - audio/mp3
-  AIFF - audio/aiff
-  AAC - audio/aac
-  OGG Vorbis - audio/ogg
-  FLAC - audio/flac
Технические подробности об аудио
- Gemini представляет каждую секунду аудио в виде 32 токенов; например, одна минута аудио представлена в виде 1920 токенов.
- Близнецы могут «понимать» неречевые компоненты, такие как пение птиц или сирены.
- Максимальная поддерживаемая длина аудиоданных в одном запросе составляет 9,5 часов. Gemini не ограничивает количество аудиофайлов в одном запросе; однако общая совокупная длина всех аудиофайлов в одном запросе не может превышать 9,5 часов.
- Gemini понижает разрешение аудиофайлов до 16 Кбит/с.
- Если источник звука содержит несколько каналов, Gemini объединяет эти каналы в один канал.
Что дальше?
В этом руководстве показано, как генерировать текст в ответ на аудиоданные. Чтобы узнать больше, см. следующие ресурсы:
- Стратегии подсказок файлов : API Gemini поддерживает подсказки с текстом, изображениями, аудио- и видеоданными, также известные как мультимодальные подсказки.
- Системные инструкции : Системные инструкции позволяют вам управлять поведением модели в зависимости от ваших конкретных потребностей и вариантов использования.
- Руководство по безопасности : Иногда генеративные модели ИИ выдают неожиданные результаты, например, неточные, предвзятые или оскорбительные. Постобработка и человеческая оценка имеют важное значение для ограничения риска вреда от таких результатов.