Alur kerja real-time memungkinkan Anda mengakses model teks-ke-ucapan (TTS) melalui protokol standar.
Antarmuka standar untuk model TTS yang dikembangkan sendiri
Untuk menambahkan model teks-ke-ucapan (TTS) buatan Anda ke dalam alur kerja, Anda harus mengimplementasikan layanan streaming HTTP yang dapat diakses melalui Internet. Layanan tersebut harus mengenkapsulasi model TTS Anda sesuai dengan spesifikasi masukan dan keluaran yang telah ditentukan.
Di Konsol orkestrasi, konfigurasikan parameter berikut untuk node Text-to-Speech (TTS):
Nama | Tipe | Diperlukan | Deskripsi | Contoh |
URL Permintaan | String | Ya | Titik akhir HTTPS dari model yang dikembangkan sendiri. | https://www.abc.com |
Token | String | Tidak | Token otorisasi untuk layanan. | AUJH-pfnTNMPBm6iWXcJAcWsrscb5KYaLitQhHBLKrI |
Laju sampel | Integer | Ya | Laju sampel dalam Hz. Nilai yang valid:
| 48000 |
Antarmuka hanya mendukung data audio mono dalam format S16LE. Ubah sampel data Anda ke format yang didukung sebelum mengirimkannya.
Saat alur kerja real-time dijalankan, layanan menyusun data formulir menjadi permintaan POST yang dikirim ke titik akhir HTTPS dari model TTS buatan Anda yang telah dikonfigurasi. Tabel berikut menjelaskan parameter permintaan tersebut.
Nama | Tipe | Wajib | Deskripsi | Contoh |
Teks | String | Ya | Teks untuk sintesis suara. | Halo |
VoiceId | String | Tidak | Suara. | yourVoiceId |
SampleRate | Integer | Ya | Laju sampel dalam Hz. | 48000 |
Token | String | Tidak | Token otorisasi untuk layanan. | AUJH-pfnTNMPBm6iWXcJAcWsrscb5KYaLitQhHBLKrI |
ExtendData | String | Ya | Data ekstensi TTS kustom. Ini mencakup ID instans dan data bisnis yang ditentukan pengguna saat memulai instans. | {'InstanceId':'68e00b6640e*****3e943332fee7','ChannelId':'123','SentenceId':'3',UserData':'{"aaaa":"bbbb"}'} |
| String | Ya | ID instans. | 68e00b6640e*****3e943332fee7 |
| String | Ya | ID saluran. | 123 |
| Int | Ya | ID pasangan tanya-jawab. Catatan Untuk satu pertanyaan pengguna, Agen menggunakan ID yang sama untuk tanggapannya. | 3 |
| String | Tidak | Emosi ucapan. Nilai yang valid:
Catatan Jika Anda tidak memberikan parameter ini, ucapan yang disintesis tidak memiliki atribut emosional. | happy |
| String | Tidak | Data bisnis kustom yang diteruskan saat instans diluncurkan. | {"aaaa":"bbbb"} |
Kirimkan aliran audio PCM yang dihasilkan dengan suara dan laju sampel yang sesuai ke layanan secara bertahap melalui tanggapan streaming HTTP. Layanan kemudian akan mendorong data audio tersebut ke node berikutnya secara real time.
Server TTS Kustom
Python
Contoh kode berikut menunjukkan cara menyesuaikan server TTS:
from aiohttp import web
async def stream_audio(request):
data = await request.json()
text = data.get('Text', "")
token = data.get('Token', None)
sample_rate = data.get('SampleRate', 48000)
extend_data = data.get('ExtendData', "")
print(f"text:{text}, token:{token}, sample_rate:{sample_rate}, extend_data:{extend_data}")
# TODO: Periksa apakah token valid.
response = web.StreamResponse(
status=200,
reason='OK',
headers={'Content-Type': 'audio/mpeg'}
)
# Mulai tanggapan.
await response.prepare(request)
# generate_tts_data adalah Korutin yang menghasilkan data audio.
async for chunk in generate_tts_data(text, sample_rate):
await response.write(chunk)
# Selesaikan tanggapan.
await response.write_eof()
return response
async def generate_tts_data(text: str, sample_rate: int):
# TODO: Panggil layanan TTS untuk menghasilkan data audio dengan laju sampel yang sesuai.
# Contoh: Baca data audio dari file.
file_path = '/your_dir/sample.pcm'
with open(file_path, 'rb') as f:
while True:
chunk = f.read(4096) # Baca data sebesar 4 KB setiap kali.
if not chunk:
break
yield chunk
app = web.Application()
app.add_routes([web.post('/stream-audio', stream_audio)])
if __name__ == '__main__':
web.run_app(app)