Вы можете попросить модель Gemini проанализировать предоставленные вами аудиофайлы либо непосредственно (в кодировке base64), либо по URL-адресу. При использовании Firebase AI Logic вы можете отправить этот запрос непосредственно из своего приложения.
Благодаря этой возможности вы можете делать, например, следующее:
- Опишите, кратко изложите или ответьте на вопросы об аудиоконтенте.
- Расшифровка аудиоконтента
- Проанализируйте отдельные фрагменты аудиозаписи, используя временные метки.
Перейти к примерам кода Перейти к коду для потоковых ответов
| Дополнительные возможности работы со звуком описаны в других руководствах. Создание структурированного вывода Многоходовой чат Двусторонняя потоковая передача |
Прежде чем начать
Чтобы просмотреть контент и код, относящиеся к вашему поставщику API Gemini , нажмите на него. |
Если вы еще этого не сделали, пройдите руководство по началу работы , в котором описывается, как настроить проект Firebase, подключить приложение к Firebase, добавить SDK, инициализировать бэкэнд-сервис для выбранного вами поставщика API Gemini и создать экземпляр GenerativeModel .
Вы можете использовать этот общедоступный файл с MIME-типом
audio/mp3( просмотреть или скачать файл ).https://storage.googleapis.com/cloud-samples-data/generative-ai/audio/pixel.mp3
Генерация текста из аудиофайлов (в кодировке base64)
| Прежде чем опробовать этот пример, выполните раздел «Перед началом работы » этого руководства, чтобы настроить свой проект и приложение. В этом разделе вам также нужно будет нажать кнопку для выбранного вами поставщика API Gemini , чтобы увидеть на этой странице контент, относящийся к данному поставщику . |
Вы можете попросить модель Gemini сгенерировать текст, предоставив текст и аудиозапрос — указав mimeType входного файла и сам файл. Требования и рекомендации к входным файлам вы найдете далее на этой странице.
Быстрый
Вы можете вызвать generateContent() для генерации текста из многомодального ввода, включающего текст и один аудиофайл.
import FirebaseAILogic
// Initialize the Gemini Developer API backend service
let ai = FirebaseAI.firebaseAI(backend: .googleAI())
// Create a `GenerativeModel` instance with a model that supports your use case
let model = ai.generativeModel(modelName: "gemini-2.5-flash")
// Provide the audio as `Data`
guard let audioData = try? Data(contentsOf: audioURL) else {
print("Error loading audio data.")
return // Or handle the error appropriately
}
// Specify the appropriate audio MIME type
let audio = InlineDataPart(data: audioData, mimeType: "audio/mpeg")
// Provide a text prompt to include with the audio
let prompt = "Transcribe what's said in this audio recording."
// To generate text output, call `generateContent` with the audio and text prompt
let response = try await model.generateContent(audio, prompt)
// Print the generated text, handling the case where it might be nil
print(response.text ?? "No text in response.")
Kotlin
Вы можете вызвать generateContent() для генерации текста из многомодального ввода, включающего текст и один аудиофайл.
// Initialize the Gemini Developer API backend service
// Create a `GenerativeModel` instance with a model that supports your use case
val model = Firebase.ai(backend = GenerativeBackend.googleAI())
.generativeModel("gemini-2.5-flash")
val contentResolver = applicationContext.contentResolver
val inputStream = contentResolver.openInputStream(audioUri)
if (inputStream != null) { // Check if the audio loaded successfully
inputStream.use { stream ->
val bytes = stream.readBytes()
// Provide a prompt that includes the audio specified above and text
val prompt = content {
inlineData(bytes, "audio/mpeg") // Specify the appropriate audio MIME type
text("Transcribe what's said in this audio recording.")
}
// To generate text output, call `generateContent` with the prompt
val response = model.generateContent(prompt)
// Log the generated text, handling the case where it might be null
Log.d(TAG, response.text?: "")
}
} else {
Log.e(TAG, "Error getting input stream for audio.")
// Handle the error appropriately
}
Java
Вы можете вызвать generateContent() для генерации текста из многомодального ввода, включающего текст и один аудиофайл.
ListenableFuture .
// Initialize the Gemini Developer API backend service
// Create a `GenerativeModel` instance with a model that supports your use case
GenerativeModel ai = FirebaseAI.getInstance(GenerativeBackend.googleAI())
.generativeModel("gemini-2.5-flash");
// Use the GenerativeModelFutures Java compatibility layer which offers
// support for ListenableFuture and Publisher APIs
GenerativeModelFutures model = GenerativeModelFutures.from(ai);
ContentResolver resolver = getApplicationContext().getContentResolver();
try (InputStream stream = resolver.openInputStream(audioUri)) {
File audioFile = new File(new URI(audioUri.toString()));
int audioSize = (int) audioFile.length();
byte audioBytes = new byte[audioSize];
if (stream != null) {
stream.read(audioBytes, 0, audioBytes.length);
stream.close();
// Provide a prompt that includes the audio specified above and text
Content prompt = new Content.Builder()
.addInlineData(audioBytes, "audio/mpeg") // Specify the appropriate audio MIME type
.addText("Transcribe what's said in this audio recording.")
.build();
// To generate text output, call `generateContent` with the prompt
ListenableFuture<GenerateContentResponse> response = model.generateContent(prompt);
Futures.addCallback(response, new FutureCallback<GenerateContentResponse>() {
@Override
public void onSuccess(GenerateContentResponse result) {
String text = result.getText();
Log.d(TAG, (text == null) ? "" : text);
}
@Override
public void onFailure(Throwable t) {
Log.e(TAG, "Failed to generate a response", t);
}
}, executor);
} else {
Log.e(TAG, "Error getting input stream for file.");
// Handle the error appropriately
}
} catch (IOException e) {
Log.e(TAG, "Failed to read the audio file", e);
} catch (URISyntaxException e) {
Log.e(TAG, "Invalid audio file", e);
}
Web
Вы можете вызвать generateContent() для генерации текста из многомодального ввода, включающего текст и один аудиофайл.
import { initializeApp } from "firebase/app";
import { getAI, getGenerativeModel, GoogleAIBackend } from "firebase/ai";
// TODO(developer) Replace the following with your app's Firebase configuration
// See: https://firebase.google.com/docs/web/learn-more#config-object
const firebaseConfig = {
// ...
};
// Initialize FirebaseApp
const firebaseApp = initializeApp(firebaseConfig);
// Initialize the Gemini Developer API backend service
const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });
// Create a `GenerativeModel` instance with a model that supports your use case
const model = getGenerativeModel(ai, { model: "gemini-2.5-flash" });
// Converts a File object to a Part object.
async function fileToGenerativePart(file) {
const base64EncodedDataPromise = new Promise((resolve) => {
const reader = new FileReader();
reader.onloadend = () => resolve(reader.result.split(','));
reader.readAsDataURL(file);
});
return {
inlineData: { data: await base64EncodedDataPromise, mimeType: file.type },
};
}
async function run() {
// Provide a text prompt to include with the audio
const prompt = "Transcribe what's said in this audio recording.";
// Prepare audio for input
const fileInputEl = document.querySelector("input[type=file]");
const audioPart = await fileToGenerativePart(fileInputEl.files);
// To generate text output, call `generateContent` with the text and audio
const result = await model.generateContent([prompt, audioPart]);
// Log the generated text, handling the case where it might be undefined
console.log(result.response.text() ?? "No text in response.");
}
run();
Dart
Вы можете вызвать generateContent() для генерации текста из многомодального ввода, включающего текст и один аудиофайл.
import 'package:firebase_ai/firebase_ai.dart';
import 'package:firebase_core/firebase_core.dart';
import 'firebase_options.dart';
// Initialize FirebaseApp
await Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform,
);
// Initialize the Gemini Developer API backend service
// Create a `GenerativeModel` instance with a model that supports your use case
final model =
FirebaseAI.googleAI().generativeModel(model: 'gemini-2.5-flash');
// Provide a text prompt to include with the audio
final prompt = TextPart("Transcribe what's said in this audio recording.");
// Prepare audio for input
final audio = await File('audio0.mp3').readAsBytes();
// Provide the audio as `Data` with the appropriate audio MIME type
final audioPart = InlineDataPart('audio/mpeg', audio);
// To generate text output, call `generateContent` with the text and audio
final response = await model.generateContent([
Content.multi([prompt,audioPart])
]);
// Print the generated text
print(response.text);
Единство
Вы можете вызвать функцию GenerateContentAsync() для генерации текста из многомодального ввода, включающего текст и один аудиофайл.
using Firebase;
using Firebase.AI;
// Initialize the Gemini Developer API backend service
var ai = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI());
// Create a `GenerativeModel` instance with a model that supports your use case
var model = ai.GetGenerativeModel(modelName: "gemini-2.5-flash");
// Provide a text prompt to include with the audio
var prompt = ModelContent.Text("Transcribe what's said in this audio recording.");
// Provide the audio as `data` with the appropriate audio MIME type
var audio = ModelContent.InlineData("audio/mpeg",
System.IO.File.ReadAllBytes(System.IO.Path.Combine(
UnityEngine.Application.streamingAssetsPath, "audio0.mp3")));
// To generate text output, call `GenerateContentAsync` with the text and audio
var response = await model.GenerateContentAsync(new [] { prompt, audio });
// Print the generated text
UnityEngine.Debug.Log(response.Text ?? "No text in response.");
Узнайте, как выбрать модель.подходит для вашего сценария использования и приложения.
Трансляция ответа
| Прежде чем опробовать этот пример, выполните раздел «Перед началом работы » этого руководства, чтобы настроить свой проект и приложение. В этом разделе вам также нужно будет нажать кнопку для выбранного вами поставщика API Gemini , чтобы увидеть на этой странице контент, относящийся к данному поставщику . |
Для ускорения взаимодействия можно не ждать полного результата генерации модели, а использовать потоковую обработку для частичного получения результатов. Для потоковой передачи ответа вызовите generateContentStream .
Быстрый
Вы можете вызвать generateContentStream() для потоковой передачи сгенерированного текста из многомодального ввода, включающего текст и один аудиофайл.
import FirebaseAILogic
// Initialize the Gemini Developer API backend service
let ai = FirebaseAI.firebaseAI(backend: .googleAI())
// Create a `GenerativeModel` instance with a model that supports your use case
let model = ai.generativeModel(modelName: "gemini-2.5-flash")
// Provide the audio as `Data`
guard let audioData = try? Data(contentsOf: audioURL) else {
print("Error loading audio data.")
return // Or handle the error appropriately
}
// Specify the appropriate audio MIME type
let audio = InlineDataPart(data: audioData, mimeType: "audio/mpeg")
// Provide a text prompt to include with the audio
let prompt = "Transcribe what's said in this audio recording."
// To stream generated text output, call `generateContentStream` with the audio and text prompt
let contentStream = try model.generateContentStream(audio, prompt)
// Print the generated text, handling the case where it might be nil
for try await chunk in contentStream {
if let text = chunk.text {
print(text)
}
}
Kotlin
Вы можете вызвать generateContentStream() для потоковой передачи сгенерированного текста из многомодального ввода, включающего текст и один аудиофайл.
// Initialize the Gemini Developer API backend service
// Create a `GenerativeModel` instance with a model that supports your use case
val model = Firebase.ai(backend = GenerativeBackend.googleAI())
.generativeModel("gemini-2.5-flash")
val contentResolver = applicationContext.contentResolver
val inputStream = contentResolver.openInputStream(audioUri)
if (inputStream != null) { // Check if the audio loaded successfully
inputStream.use { stream ->
val bytes = stream.readBytes()
// Provide a prompt that includes the audio specified above and text
val prompt = content {
inlineData(bytes, "audio/mpeg") // Specify the appropriate audio MIME type
text("Transcribe what's said in this audio recording.")
}
// To stream generated text output, call `generateContentStream` with the prompt
var fullResponse = ""
model.generateContentStream(prompt).collect { chunk ->
// Log the generated text, handling the case where it might be null
Log.d(TAG, chunk.text?: "")
fullResponse += chunk.text?: ""
}
}
} else {
Log.e(TAG, "Error getting input stream for audio.")
// Handle the error appropriately
}
Java
Вы можете вызвать generateContentStream() для потоковой передачи сгенерированного текста из многомодального ввода, включающего текст и один аудиофайл.
Publisher из библиотеки Reactive Streams .
// Initialize the Gemini Developer API backend service
// Create a `GenerativeModel` instance with a model that supports your use case
GenerativeModel ai = FirebaseAI.getInstance(GenerativeBackend.googleAI())
.generativeModel("gemini-2.5-flash");
// Use the GenerativeModelFutures Java compatibility layer which offers
// support for ListenableFuture and Publisher APIs
GenerativeModelFutures model = GenerativeModelFutures.from(ai);
ContentResolver resolver = getApplicationContext().getContentResolver();
try (InputStream stream = resolver.openInputStream(audioUri)) {
File audioFile = new File(new URI(audioUri.toString()));
int audioSize = (int) audioFile.length();
byte audioBytes = new byte[audioSize];
if (stream != null) {
stream.read(audioBytes, 0, audioBytes.length);
stream.close();
// Provide a prompt that includes the audio specified above and text
Content prompt = new Content.Builder()
.addInlineData(audioBytes, "audio/mpeg") // Specify the appropriate audio MIME type
.addText("Transcribe what's said in this audio recording.")
.build();
// To stream generated text output, call `generateContentStream` with the prompt
Publisher<GenerateContentResponse> streamingResponse =
model.generateContentStream(prompt);
StringBuilder fullResponse = new StringBuilder();
streamingResponse.subscribe(new Subscriber<GenerateContentResponse>() {
@Override
public void onNext(GenerateContentResponse generateContentResponse) {
String chunk = generateContentResponse.getText();
String text = (chunk == null) ? "" : chunk;
Log.d(TAG, text);
fullResponse.append(text);
}
@Override
public void onComplete() {
Log.d(TAG, fullResponse.toString());
}
@Override
public void onError(Throwable t) {
Log.e(TAG, "Failed to generate a response", t);
}
@Override
public void onSubscribe(Subscription s) {
}
});
} else {
Log.e(TAG, "Error getting input stream for file.");
// Handle the error appropriately
}
} catch (IOException e) {
Log.e(TAG, "Failed to read the audio file", e);
} catch (URISyntaxException e) {
Log.e(TAG, "Invalid audio file", e);
}
Web
Вы можете вызвать generateContentStream() для потоковой передачи сгенерированного текста из многомодального ввода, включающего текст и один аудиофайл.
import { initializeApp } from "firebase/app";
import { getAI, getGenerativeModel, GoogleAIBackend } from "firebase/ai";
// TODO(developer) Replace the following with your app's Firebase configuration
// See: https://firebase.google.com/docs/web/learn-more#config-object
const firebaseConfig = {
// ...
};
// Initialize FirebaseApp
const firebaseApp = initializeApp(firebaseConfig);
// Initialize the Gemini Developer API backend service
const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });
// Create a `GenerativeModel` instance with a model that supports your use case
const model = getGenerativeModel(ai, { model: "gemini-2.5-flash" });
// Converts a File object to a Part object.
async function fileToGenerativePart(file) {
const base64EncodedDataPromise = new Promise((resolve) => {
const reader = new FileReader();
reader.onloadend = () => resolve(reader.result.split(','));
reader.readAsDataURL(file);
});
return {
inlineData: { data: await base64EncodedDataPromise, mimeType: file.type },
};
}
async function run() {
// Provide a text prompt to include with the audio
const prompt = "Transcribe what's said in this audio recording.";
// Prepare audio for input
const fileInputEl = document.querySelector("input[type=file]");
const audioPart = await fileToGenerativePart(fileInputEl.files);
// To stream generated text output, call `generateContentStream` with the text and audio
const result = await model.generateContentStream([prompt, audioPart]);
// Log the generated text
for await (const chunk of result.stream) {
const chunkText = chunk.text();
console.log(chunkText);
}
}
run();
Dart
Вы можете вызвать generateContentStream() для потоковой передачи сгенерированного текста из многомодального ввода, включающего текст и один аудиофайл.
import 'package:firebase_ai/firebase_ai.dart';
import 'package:firebase_core/firebase_core.dart';
import 'firebase_options.dart';
// Initialize FirebaseApp
await Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform,
);
// Initialize the Gemini Developer API backend service
// Create a `GenerativeModel` instance with a model that supports your use case
final model =
FirebaseAI.googleAI().generativeModel(model: 'gemini-2.5-flash');
// Provide a text prompt to include with the audio
final prompt = TextPart("Transcribe what's said in this audio recording.");
// Prepare audio for input
final audio = await File('audio0.mp3').readAsBytes();
// Provide the audio as `Data` with the appropriate audio MIME type
final audioPart = InlineDataPart('audio/mpeg', audio);
// To stream generated text output, call `generateContentStream` with the text and audio
final response = await model.generateContentStream([
Content.multi([prompt, audioPart])
]);
// Print the generated text
await for (final chunk in response) {
print(chunk.text);
}
Единство
Вы можете вызвать функцию GenerateContentStreamAsync() для потоковой передачи сгенерированного текста из многомодального ввода, включающего текст и один аудиофайл.
using Firebase;
using Firebase.AI;
// Initialize the Gemini Developer API backend service
var ai = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI());
// Create a `GenerativeModel` instance with a model that supports your use case
var model = ai.GetGenerativeModel(modelName: "gemini-2.5-flash");
// Provide a text prompt to include with the audio
var prompt = ModelContent.Text("Transcribe what's said in this audio recording.");
// Provide the audio as `data` with the appropriate audio MIME type
var audio = ModelContent.InlineData("audio/mpeg",
System.IO.File.ReadAllBytes(System.IO.Path.Combine(
UnityEngine.Application.streamingAssetsPath, "audio0.mp3")));
// To stream generated text output, call `GenerateContentStreamAsync` with the text and audio
var responseStream = model.GenerateContentStreamAsync(new [] { prompt, audio });
// Print the generated text
await foreach (var response in responseStream) {
if (!string.IsNullOrWhiteSpace(response.Text)) {
UnityEngine.Debug.Log(response.Text);
}
}
Узнайте, как выбрать модель.подходит для вашего сценария использования и приложения.
Требования и рекомендации к входным аудиофайлам
Обратите внимание, что файл, предоставленный в виде встроенных данных, кодируется в base64 во время передачи, что увеличивает размер запроса. В случае слишком большого размера запроса вы получите ошибку HTTP 413.
Подробную информацию о следующих параметрах можно найти на странице «Поддерживаемые входные файлы и требования»:
- Различные варианты предоставления файла в запросе (либо непосредственно в запросе, либо с использованием URL-адреса или URI файла).
- Требования и лучшие практики для аудиофайлов
Поддерживаемые MIME-типы аудио
Мультимодальные модели Gemini поддерживают следующие MIME-типы аудио:
- AAC -
audio/aac - FLAC -
audio/flac - MP3 -
audio/mp3 - MPA -
audio/m4a - MPEG -
audio/mpeg - MPGA -
audio/mpga - MP4 -
audio/mp4 - OPUS -
audio/opus - PCM -
audio/pcm - WAV -
audio/wav - WEBM -
audio/webm
Ограничения на один запрос
Максимальное количество файлов на один запрос: 1 аудиофайлЧто еще можно сделать?
- Научитесь подсчитывать токены, прежде чем отправлять модели длинные запросы.
- Настройте Cloud Storage for Firebase , чтобы включать большие файлы в ваши многомодальные запросы и иметь более управляемое решение для предоставления файлов в подсказках. Файлы могут включать изображения, PDF-файлы, видео и аудио.
- Начните думать о подготовке к производству (см. контрольный список для производства ), включая:
- Настройка Firebase App Check для защиты API Gemini от неправомерного использования неавторизованными клиентами.
- Интеграция Firebase Remote Config для обновления значений в вашем приложении (например, имени модели) без выпуска новой версии приложения.
Попробуйте другие возможности.
- Создавайте многоэтапные диалоги (чат) .
- Генерация текста на основе текстовых подсказок .
- Генерируйте структурированный вывод (например, в формате JSON) как из текстовых, так и из мультимодальных запросов.
- Создавайте изображения на основе текстовых подсказок ( Gemini или Imagen ).
- Осуществляйте потоковую передачу входного и выходного сигнала (включая звук) с помощью Gemini Live API .
- Используйте инструменты (например, вызов функций и привязку к Google Search ), чтобы связать модель Gemini с другими частями вашего приложения, а также с внешними системами и информацией.
Узнайте, как управлять генерацией контента.
- Разберитесь в разработке подсказок для заданий , включая лучшие практики, стратегии и примеры подсказок.
- Настройте параметры модели , такие как температура и максимальное количество выходных токенов (для Gemini ) или соотношение сторон и генерация людей (для Imagen ).
- Используйте настройки безопасности , чтобы скорректировать вероятность получения ответов, которые могут быть сочтены вредными.
Узнайте больше о поддерживаемых моделях
Узнайте о моделях, доступных для различных вариантов использования , а также об их квотах и ценах .Оставьте отзыв о вашем опыте использования Firebase AI Logic.