3-qism · Kengaytirilgan imkoniyatlar·10-bob
Audio: nutqni matnga, matnni nutqqa aylantirish
Ovozli xabarni transkripsiya qilish (STT) va matnni tabiiy ovozga aylantirish (TTS) — ovozli yordamchi qurish uchun ikki asosiy g'isht, sifat sozlamalari bilan.
Ovozli yordamchi yoki transkripsiya xizmati qurish uchun ikki yo'nalishdagi aylantirish kerak: odam gapirgan ovozni matnga (Speech-to-Text) va model javobini eshitiladigan ovozga (Text-to-Speech). Ikkalasi ham alohida, oddiy API chaqiruvi.
1. Ovozdan matnga (Speech-to-Text)#
audio_fayl = open("suhbat.mp3", "rb")
transkript = client.audio.transcriptions.create(
model="whisper-1",
file=audio_fayl,
)
print(transkript.text)
# → "Assalomu alaykum, mahsulotim haqida savolim bor edi..."2. Tilni aniq ko'rsatish — aniqlikni oshiradi#
transkript = client.audio.transcriptions.create(
model="whisper-1",
file=audio_fayl,
language="uz", # tilni oldindan aytish tanib olish aniqligini oshiradi
)Agar audio o'zbek tilida bo'lsa-yu, siz language parametrini
bermasangiz, model tilni o'zi aniqlashga harakat qiladi — bu ko'pincha
ishlaydi, lekin tilni oldindan aytish har doim ishonchliroq natija
beradi, ayniqsa qisqa yoki shovqinli audio fayllarda.
3. Vaqt tamg'asi bilan transkripsiya#
Uzun audio faylda qaysi so'z qachon aytilgani kerak bo'lsa (masalan, subtitr yaratish uchun), batafsilroq format so'rash mumkin:
transkript = client.audio.transcriptions.create(
model="whisper-1",
file=audio_fayl,
language="uz",
response_format="verbose_json",
timestamp_granularities=["segment"], # yoki ["word"] — so'z darajasida
)
for segment in transkript.segments:
print(f"[{segment.start:.1f}s - {segment.end:.1f}s] {segment.text}")4. Uzun audio fayllar — bo'lib yuborish#
Transkripsiya API'si bir so'rovda qabul qiladigan fayl hajmiga chegara qo'yadi. Soatlab davom etadigan yozuv (masalan, ma'ruza yoki uchrashuv) bilan ishlayotgan bo'lsangiz, uni avval kichikroq bo'laklarga (masalan, 10 daqiqalik segmentlarga) bo'lib, har birini alohida yuborish va natijalarni birlashtirish kerak bo'ladi:
from pydub import AudioSegment
audio = AudioSegment.from_mp3("uzun_maruza.mp3")
bolak_uzunligi = 10 * 60 * 1000 # 10 daqiqa, millisekundlarda
toliq_matn = []
for i in range(0, len(audio), bolak_uzunligi):
bolak = audio[i:i + bolak_uzunligi]
bolak.export("vaqtinchalik.mp3", format="mp3")
natija = client.audio.transcriptions.create(
model="whisper-1", file=open("vaqtinchalik.mp3", "rb"), language="uz"
)
toliq_matn.append(natija.text)
print(" ".join(toliq_matn))5. Matndan ovozga (Text-to-Speech)#
response = client.audio.speech.create(
model="gpt-4o-mini-tts",
voice="alloy",
input="Assalomu alaykum! Sizga qanday yordam bera olaman?",
)
response.stream_to_file("javob.mp3")Bir necha tayyor "ovoz" (voice) variantlari mavjud — har biri turli ohang va xarakterga ega. Qaysi biri loyihangizga mos kelishini sinab ko'rish uchun bir necha qisqa jumlani har bir ovozda generatsiya qilib solishtiring.
6. Ovoz tezligi va formatini sozlash#
response = client.audio.speech.create(
model="gpt-4o-mini-tts",
voice="alloy",
input="Sekinroq va aniqroq talaffuz kerak bo'lgan matn.",
speed=0.9, # 1.0 — odatiy, 0.25-4.0 oralig'ida sozlanadi
response_format="mp3", # "mp3", "wav", "opus" va boshqalar
)speed'ni pasaytirish — ta'lim yoki tibbiy kontent uchun foydali (aniq
tushunish muhim), oshirish esa tezkor eslatmalar uchun.
7. Ikkalasini birlashtirish: oddiy ovozli yordamchi#
Uchta bosqichni birlashtirsak — to'liq ovozli suhbat aylanishi hosil bo'ladi:
Ovozni matnga aylantirasiz
Foydalanuvchi gapirgan audio faylni Whisper orqali matnga o'giring.
Matnni odatdagidek modelga yuborasiz
Olingan matnni Responses API'ga
inputsifatida yuboring — bu oddiy matnli suhbat, oldingi boblardagi bilan bir xil.Javobni ovozga aylantirasiz
Model qaytargan matn javobini TTS orqali audio faylga aylantiring va foydalanuvchiga qaytaring.
# 1. Ovozdan matnga
foydalanuvchi_matni = client.audio.transcriptions.create(
model="whisper-1", file=open("savol.mp3", "rb"), language="uz"
).text
# 2. Oddiy matnli suhbat
javob = client.responses.create(
model="gpt-4o-mini",
instructions="Sen — qisqa va aniq javob beruvchi yordamchisan.",
input=foydalanuvchi_matni,
).output_text
# 3. Matndan ovozga
client.audio.speech.create(
model="gpt-4o-mini-tts", voice="alloy", input=javob
).stream_to_file("javob.mp3")8. Real vaqtli (realtime) muqobil#
Yuqoridagi uch bosqichli yondashuv — oddiy, lekin kechikish bor: avval butun audio yozib olinadi, keyin transkripsiya, keyin javob, keyin ovoz. Jonli telefon suhbatiga o'xshash, kechikishsiz tajriba kerak bo'lsa, OpenAI'ning alohida real vaqtli (realtime) audio interfeysi mavjud — u ovozni to'g'ridan-to'g'ri, oqim sifatida qayta ishlaydi. Bu — ilg'or mavzu va alohida chuqur o'rganishni talab qiladi; bu kitobda asoslarni bilgach, rasmiy hujjatlardagi realtime bo'limiga murojaat qiling.
9. Nima noto'g'ri ketishi mumkin#
| Belgi | Sabab | Yechim |
|---|---|---|
| Transkripsiya noto'g'ri/sifatsiz | language ko'rsatilmagan yoki fon shovqini kuchli | language="uz" qo'shing, sifatliroq mikrofon/yozuv ishlating |
| Uzun audio bilan xato | Fayl hajmi chegaradan oshgan | Faylni segmentlarga bo'lib yuboring |
| TTS ovozi notabiiy eshitiladi | Matn juda uzun jumlalar yoki qisqartmalardan iborat | Matnni tabiiy, qisqaroq jumlalarga bo'ling |
| Ovozli yordamchi sekin javob beradi | Uch bosqich ketma-ket, kechikishsiz kutish kerak | Kechikishga chidamli bo'lmasa, realtime interfeysga o'ting |
- 01Speech-to-Text (Whisper) — ovozni matnga aylantiradi, language parametri aniqlikni oshiradi.
- 02verbose_json va timestamp_granularities — subtitr yoki vaqt bo'yicha tahlil uchun.
- 03Text-to-Speech — matnni tanlangan ovoz uslubida va tezlikda audio faylga aylantiradi.
- 04Uchtasini ketma-ket bog'lash — oddiy ovozli yordamchi qurishning eng tez yo'li.
- 05Kechikishsiz, jonli suhbat kerak bo'lsa — alohida realtime interfeysga qarang.
Ovozli FAQ botini yozing
Oldingi bobda yozgan mini FAQ qidiruv tizimini audio kirish/chiqish bilan birlashtiring: foydalanuvchi savolni gapirib yozadi (audio fayl), tizim uni matnga aylantiradi, eng mos javobni topadi va uni ovozli javob sifatida qaytaradi.
Maslahatni ko'rsatish
Foydalanuvchi savolini audio fayl sifatida qabul qiling, uni Whisper bilan matnga aylantiring, 7-bobdagi embedding'lar bilan yozgan mini qidiruv funksiyasiga yuboring, va topilgan javobni TTS orqali ovozga aylantirib qaytaring.