Gemini, ses girişini analiz edip anlayabilir. Bu sayede aşağıdaki gibi kullanım alanlarına olanak tanır:
- Ses içeriğiyle ilgili soruları tanımlayın, özetleyin veya yanıtlayın.
- Sesin transkriptini sağlayın.
- Sesin belirli segmentlerini analiz edin.
Bu kılavuzda, ses girişine metin yanıtı oluşturmak için Gemini API'yi nasıl kullanacağınız gösterilmektedir.
Başlamadan önce
Gemini API'yi çağırmadan önce seçtiğiniz SDK'nın yüklü olduğundan ve Gemini API anahtarının yapılandırılmış ve kullanıma hazır olduğundan emin olun.
Ses girişi
Gemini'ye ses verilerini aşağıdaki şekillerde sağlayabilirsiniz:
generateContent
için istek göndermeden önce ses dosyası yükleyin.generateContent
isteğiyle satır içi ses verilerini iletin.
Ses dosyası yükleme
Ses dosyası yüklemek için Files API'yi kullanabilirsiniz. Toplam istek boyutu (dosyalar, metin istemi, sistem talimatları vb. dahil) 20 MB'tan büyük olduğunda her zaman Files API'yi kullanın.
Aşağıdaki kod, bir ses dosyası yükler ve ardından dosyayı generateContent
adresine yapılan bir aramada kullanır.
from google import genai
client = genai.Client(api_key="GOOGLE_API_KEY")
myfile = client.files.upload(file="path/to/sample.mp3")
response = client.models.generate_content(
model="gemini-2.0-flash", contents=["Describe this audio clip", myfile]
)
print(response.text)
import {
GoogleGenAI,
createUserContent,
createPartFromUri,
} from "@google/genai";
const ai = new GoogleGenAI({ apiKey: "GOOGLE_API_KEY" });
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.0-flash",
contents: createUserContent([
createPartFromUri(myfile.uri, myfile.mimeType),
"Describe this audio clip",
]),
});
console.log(response.text);
}
await main();
file, err := client.UploadFileFromPath(ctx, "path/to/sample.mp3", nil)
if err != nil {
log.Fatal(err)
}
defer client.DeleteFile(ctx, file.Name)
model := client.GenerativeModel("gemini-2.0-flash")
resp, err := model.GenerateContent(ctx,
genai.FileData{URI: file.URI},
genai.Text("Describe this audio clip"))
if err != nil {
log.Fatal(err)
}
printResponse(resp)
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?key=${GOOGLE_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.0-flash:generateContent?key=$GOOGLE_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
Medya dosyalarıyla çalışma hakkında daha fazla bilgi edinmek için Files API başlıklı makaleyi inceleyin.
Ses verilerini satır içi olarak iletme
Ses dosyası yüklemek yerine, istekteki satır içi ses verilerini generateContent
'e iletebilirsiniz:
from google.genai import types
with open('path/to/small-sample.mp3', 'rb') as f:
audio_bytes = f.read()
response = client.models.generate_content(
model='gemini-2.0-flash',
contents=[
'Describe this audio clip',
types.Part.from_bytes(
data=audio_bytes,
mime_type='audio/mp3',
)
]
)
print(response.text)
import { GoogleGenAI } from "@google/genai";
import * as fs from "node:fs";
const ai = new GoogleGenAI({ apiKey: "GOOGLE_API_KEY" });
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.0-flash",
contents: contents,
});
console.log(response.text);
// Initialize a Gemini model appropriate for your use case.
model := client.GenerativeModel("gemini-2.0-flash")
bytes, err := os.ReadFile("path/to/small-sample.mp3")
if err != nil {
log.Fatal(err)
}
prompt := []genai.Part{
genai.Blob{MIMEType: "audio/mp3", Data: bytes},
genai.Text("Please summarize the audio."),
}
// Generate content using the prompt.
resp, err := model.GenerateContent(ctx, prompt...)
if err != nil {
log.Fatal(err)
}
// Handle the response of generated text
for _, c := range resp.Candidates {
if c.Content != nil {
fmt.Println(*c.Content)
}
}
Satır içi ses verileriyle ilgili göz önünde bulundurulması gereken birkaç nokta:
- Maksimum istek boyutu 20 MB'tır. Bu boyut, metin istemleri, sistem talimatları ve satır içi olarak sağlanan dosyaları içerir. Dosyanızın boyutu toplam istek boyutunu 20 MB'ı aşacaksa istekte kullanmak üzere ses dosyası yüklemek için Files API'yi kullanın.
- Bir ses kesitini birden çok kez kullanıyorsanız ses dosyası yüklemek daha verimlidir.
Transkript alma
Ses verilerinin metin kaydını almak için istemde bunu belirtmeniz yeterlidir:
myfile = client.files.upload(file='path/to/sample.mp3')
prompt = 'Generate a transcript of the speech.'
response = client.models.generate_content(
model='gemini-2.0-flash',
contents=[prompt, myfile]
)
print(response.text)
import {
GoogleGenAI,
createUserContent,
createPartFromUri,
} from "@google/genai";
const ai = new GoogleGenAI({ apiKey: "GOOGLE_API_KEY" });
const myfile = await ai.files.upload({
file: "path/to/sample.mp3",
config: { mimeType: "audio/mpeg" },
});
const result = await ai.models.generateContent({
model: "gemini-2.0-flash",
contents: createUserContent([
createPartFromUri(myfile.uri, myfile.mimeType),
"Generate a transcript of the speech.",
]),
});
console.log("result.text=", result.text);
// Initialize a Gemini model appropriate for your use case.
model := client.GenerativeModel("gemini-2.0-flash")
// Create a prompt using text and the URI reference for the uploaded file.
prompt := []genai.Part{
genai.FileData{URI: sampleAudio.URI},
genai.Text("Generate a transcript of the speech."),
}
// Generate content using the prompt.
resp, err := model.GenerateContent(ctx, prompt...)
if err != nil {
log.Fatal(err)
}
// Handle the response of generated text
for _, c := range resp.Candidates {
if c.Content != nil {
fmt.Println(*c.Content)
}
}
Zaman damgalarına başvurma
MM:SS
biçimindeki zaman damgalarını kullanarak ses dosyasının belirli bölümlerine atıfta bulunabilirsiniz. Örneğin, aşağıdaki istemde, aşağıdaki bilgileri içeren bir transkript istenir:
- Dosyanın başlangıcından 2 dakika 30 saniye sonra başlar.
Dosyanın başlangıcından 3 dakika 29 saniye sonra sona erer.
# Create a prompt containing timestamps.
prompt = "Provide a transcript of the speech from 02:30 to 03:29."
// Create a prompt containing timestamps.
const prompt = "Provide a transcript of the speech from 02:30 to 03:29."
// Create a prompt containing timestamps.
prompt := []genai.Part{
genai.FileData{URI: sampleAudio.URI},
genai.Text("Provide a transcript of the speech from 02:30 to 03:29."),
}
Jetonları sayma
Bir ses dosyasındaki jeton sayısını öğrenmek için countTokens
yöntemini çağırın. Örneğin:
response = client.models.count_tokens(
model='gemini-2.0-flash',
contents=[myfile]
)
print(response)
import {
GoogleGenAI,
createUserContent,
createPartFromUri,
} from "@google/genai";
const ai = new GoogleGenAI({ apiKey: "GOOGLE_API_KEY" });
const myfile = await ai.files.upload({
file: "path/to/sample.mp3",
config: { mimeType: "audio/mpeg" },
});
const countTokensResponse = await ai.models.countTokens({
model: "gemini-2.0-flash",
contents: createUserContent([
createPartFromUri(myfile.uri, myfile.mimeType),
]),
});
console.log(countTokensResponse.totalTokens);
tokens, err := model.CountTokens(ctx, genai.FileData{URI: sampleAudio.URI})
if err != nil {
log.Fatal(err)
}
fmt.Printf("File %s is %d tokens", sampleAudio.DisplayName, tokens.TotalTokens)
Desteklenen ses biçimleri
Gemini, aşağıdaki ses biçimi MIME türlerini destekler:
- WAV -
audio/wav
- MP3 -
audio/mp3
- AIFF -
audio/aiff
- AAC -
audio/aac
- OGG Vorbis -
audio/ogg
- FLAC -
audio/flac
Sesle ilgili teknik ayrıntılar
- Gemini, her saniyelik sesi 32 jeton olarak temsil eder. Örneğin,bir dakikalık ses 1.920 jeton olarak temsil edilir.
- Gemini yalnızca İngilizce konuşmalara yanıt verebilir.
- Gemini, kuş sesi veya siren sesi gibi konuşma dışı bileşenleri "anlayabilir".
- Tek bir istemde desteklenen maksimum ses verisi uzunluğu 9,5 saattir. Gemini, tek bir istemdeki ses dosyalarının sayısını sınırlamaz.Ancak tek bir istemdeki tüm ses dosyalarının toplam uzunluğu 9,5 saati aşamaz.
- Gemini, ses dosyalarını 16 Kb/sn. veri çözünürlüğüne indirger.
- Ses kaynağı birden fazla kanal içeriyorsa Gemini bu kanalları tek bir kanalda birleştirir.
Sırada ne var?
Bu kılavuzda, ses verilerine yanıt olarak nasıl metin oluşturulacağı gösterilmektedir. Daha fazla bilgi edinmek için aşağıdaki kaynakları inceleyin:
- Dosya istemi stratejileri: Gemini API, çoklu formatlı istem olarak da bilinen metin, resim, ses ve video verileriyle istemleri destekler.
- Sistem talimatları: Sistem talimatları, modelin davranışını belirli ihtiyaçlarınıza ve kullanım alanlarınıza göre yönlendirmenize olanak tanır.
- Güvenlik kılavuzu: Üretken yapay zeka modelleri bazen yanlış, önyargılı veya rahatsız edici gibi beklenmedik çıkışlar üretebilir. Bu tür çıkışlardan kaynaklanan zarar riskini sınırlamak için işlem sonrası ve gerçek kişiler tarafından değerlendirme yapılması önemlidir.