aidoc.uz

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:

  1. Ovozni matnga aylantirasiz

    Foydalanuvchi gapirgan audio faylni Whisper orqali matnga o'giring.

  2. Matnni odatdagidek modelga yuborasiz

    Olingan matnni Responses API'ga input sifatida yuboring — bu oddiy matnli suhbat, oldingi boblardagi bilan bir xil.

  3. 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#

BelgiSababYechim
Transkripsiya noto'g'ri/sifatsizlanguage ko'rsatilmagan yoki fon shovqini kuchlilanguage="uz" qo'shing, sifatliroq mikrofon/yozuv ishlating
Uzun audio bilan xatoFayl hajmi chegaradan oshganFaylni segmentlarga bo'lib yuboring
TTS ovozi notabiiy eshitiladiMatn juda uzun jumlalar yoki qisqartmalardan iboratMatnni tabiiy, qisqaroq jumlalarga bo'ling
Ovozli yordamchi sekin javob beradiUch bosqich ketma-ket, kechikishsiz kutish kerakKechikishga chidamli bo'lmasa, realtime interfeysga o'ting
Yodda saqlang
  • 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.
Amaliy topshiriq

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.