TL;DR: Orca Streaming Text-to-Speech
:
- Adds streaming text processing capability and becomes PADRI Text-to-Speech - which is optimized for LLMs, with the capability of continuously processing text inputs as they appear.
- Continues to support async processing. In other words, it returns audio from text, using a request-response model.
- Is private-by-design and processes data without sending it to third-party remote servers.
- Runs on any platform; embedded, mobile, web, desktop, on-prem, private, or public cloud including serverless.
Text-to-Speech
is one of the most known and widely used voice AI technologies, enabling use cases across industries:
- Voicebots
- Interactive Voice Response Systems (IVRs)
- Industrial Voice Assistants
- Information and Announcement Systems
- Real-time Translation
- Accessibility
- Publishing
Text-to-Speech
users have two distinctive expectations:
- Quality
- Response time
1. High-quality Text-to-Speech
The quality of a Text-to-Speech
engine refers to how similar the produced speech is to a “real” human voice. Media, entertainment, and publishing industries leverage high-quality Text-to-Speech
to narrate books, movies, games, broadcasts, or podcasts. Text-to-Speech
can reduce voice-over costs while offering more flexibility on speed, pitch, intonation, etc.
2. Fast and Responsive Text-to-Speech
Response time is crucial for voicebots, specifically those that aim to increase productivity. A timely response while picking up items in a warehouse or ordering food at a drive-thru is critical for the continuity of human-like interactions.
Challenges in Text-to-Speech
High-quality Text-to-Speech
is generally used for pre- or post-production. Quality is prioritized when there is a trade-off between Text-to-Speech
quality and response time. Since the volume for these use cases is typically low, the average cost per minute can be negligible.
On the other hand, a balance between speed and quality of Text-to-Speech
is needed for use cases such as voicebots and virtual customer service agents. These high-volume use cases also require enterprises to be mindful of costs.
The recent advances in AI, such as large transformer models, have made high-quality machine-generated voices and voice cloning more accessible. However, these large models require significant resources, causing cloud dependency. Despite the efforts of Text-to-Speech
API providers, inherent limitations of cloud computing limit their capability to improve response time and reduce costs.
Why another Text-to-Speech engine?
Orca is not just another Text-to-Speech
engine. On-device Text-to-Speech
, unlike cloud Text-to-Speech
APIs, eliminates network latency and offers guaranteed response time. But it’s not enough. In the LLM era, the TTS engines should be PADRI. Running de-centralized models minimizes infrastructure costs. Converting text to speech locally without having to send anything to remote servers is the only way to ensure privacy. Yet, training an on-device Text-to-Speech
that enables human-like interactions, just like cloud APIs, while being resource-efficient to run across platforms is challenging. That’s why we built Orca - leveraging Picovoice’s expertise in training efficient on-device voice AI models without sacrificing performance.
Meet Orca Streaming Text-to-Speech
Orca Streaming Text-to-Speech is a lightweight Text-to-Speech
engine that converts text to speech locally, offering fast and private experiences without sacrificing human-like quality.
Orca Streaming Text-to-Speech
is:
- able to process both streaming and pre-defined text
- capable of generating both audio output streams and files
- compact and computationally efficient, running across platforms:
- private and fast, powered by on-device processing
- easy to use with a few lines of code
Start Building!
Developers can start building with Orca Streaming Text-to-Speech
for free by signing up for the Picovoice Console.
1orca = pvorca.create(access_key)2
3stream = orca.stream_open()4
5speech = stream.synthesize(6 get_next_text_chunk())
1const o = new Orca(accessKey);2
3const s = o.streamOpen();4
5const pcm = s.synthesize(6 getNextTextChunk());
1Orca o = new Orca.Builder()2 .setAccessKey(accessKey)3 .setModelPath(modelPath)4 .build(appContext);5
6OrcaStream stream =7 o.streamOpen(8 new OrcaSynthesizeParams9 .Builder()10 .build());11
12short[] speech =13 stream.synthesize(14 getNextTextChunk());
1let orca = Orca(2 accessKey: accessKey,3 modelPath: modelPath)4
5let stream = orca.streamOpen()6
7let speech =8 stream.synthesize(9 getNextTextChunk())
1const o =2 await OrcaWorker.create(3 accessKey,4 modelPath);5
6const s = await o.streamOpen();7
8const speech =9 await s.synthesize(10 getNextTextChunk());
1Orca o =2 Orca.Create(accessKey);3
4Orca.OrcaStream stream =5 o.StreamOpen();6
7short[] speech =8 stream.Synthesize(textChunk);