![Oracle Drags Its Feet in the JavaScript Trademark Dispute](https://cdn.sanity.io/images/cgdhsj6q/production/919c3b22c24f93884c548d60cbb338e819ff2435-1024x1024.webp?w=400&fit=max&auto=format)
Security News
Oracle Drags Its Feet in the JavaScript Trademark Dispute
Oracle seeks to dismiss fraud claims in the JavaScript trademark dispute, delaying the case and avoiding questions about its right to the name.
@picovoice/orca-node
Advanced tools
Made in Vancouver, Canada by Picovoice
Orca is an on-device streaming text-to-speech engine that is designed for use with LLMs, enabling zero-latency voice assistants. Orca is:
npm install @picovoice/orca-node
Orca requires a valid Picovoice AccessKey
at initialization. AccessKey
acts as your credentials when using Orca
SDKs.
You can get your AccessKey
for free. Make sure to keep your AccessKey
secret.
Signup or Login to Picovoice Console to get your AccessKey
.
Orca supports two modes of operation: streaming and single synthesis. In the streaming synthesis mode, Orca processes an incoming text stream in real-time and generates audio in parallel. In the single synthesis mode, the complete text needs to be known in advance and is synthesized in a single call to the Orca engine.
Create an instance of the Orca engine:
const { Orca } = require("@picovoice/orca-node");
const accessKey = "${ACCESS_KEY}"; // Obtained from the Picovoice Console (https://console.picovoice.ai/)
const orca = new Orca(accessKey);
Replace ${ACCESS_KEY}
with your AccessKey obtained from Picovoice Console.
To synthesize a text stream, create an OrcaStream
object and add text to it one-by-one:
const stream = orca.streamOpen();
for (const textChunk of textGenerator()) {
const pcm = stream.synthesize(textChunk);
if (pcm !== null) {
// handle pcm
}
}
The textGenerator()
function can be any stream generating text, for example an LLM response.
The OrcaStream
object buffers input text until there is enough to generate audio. If there is not enough text to
generate
audio, null
is returned.
To ensure smooth transitions between chunks, the stream.synthesize()
function returns an audio chunk that only
includes the audio for a portion of the text that has been added.
When done, call flush
to synthesize any remaining text, and close
to delete the OrcaStream
object.
const flushedPcm = stream.flush();
if (flushedPcm !== null) {
// handle flushed pcm
}
stream.close()
If the complete text is known before synthesis, single synthesis mode can be used to generate speech in a single call to Orca:
const result = orca.synthesize("${TEXT}");
const alignments = orca.synthesizeToFile("${TEXT}", "${OUTPUT_PATH}");
Replace ${TEXT}
with the text to be synthesized and ${OUTPUT_PATH}
with the path to save the generated audio as a
single-channel 16-bit PCM WAV file.
In single synthesis mode, Orca returns metadata of the synthesized audio in the form of a list of OrcaAlignment
objects.
When done make sure to explicitly release the resources using:
orca.release()
Orca accepts the 26 lowercase (a-z) and 26 uppercase (A-Z) letters of the English alphabet, numbers,
basic symbols, as well as common punctuation marks. You can get a list of all supported characters by calling
validCharacters()
.
Pronunciations of characters or words not supported by this list can be achieved with
custom pronunciations.
Orca allows to embed custom pronunciations in the text via the syntax: {word|pronunciation}
.
The pronunciation is expressed in ARPAbet phonemes, for example:
Orca can synthesize speech with various voices, each of which is characterized by a model file located in lib/common. To create an instance of the engine with a specific voice, use:
const orca = new Orca(accessKey, { modelPath: "${MODEL_PATH}" });
and replace ${MODEL_PATH}
with the path to the model file with the desired voice.
Orca allows for keyword arguments to control the synthesized speech. They can be provided to the streamOpen
method or the single synthesis methods synthesize
and synthesizeToFile
:
speechRate
: Controls the speed of the generated speech. Valid values are within [0.7, 1.3]. A higher (lower) value
produces speech that is faster (slower). The default is 1.0
.randomState
: Sets the random state for sampling during synthesis. This can be used to ensure that the synthesized
speech is deterministic across different runs. Valid values are all non-negative integers. If not provided, a random
seed will be chosen and the synthesis process will be non-deterministic.const synthesizeParams = {
speechRate: 1.3,
randomState: 42,
};
// Streaming synthesis
const OrcaStream = await orca.streamOpen(synthesizeParams);
// Single synthesis
const result = await orca.synthesize("${TEXT}", synthesizeParams);
const alignments = await orca.synthesizeToFile("${TEXT}", "${OUTPUT_PATH}", synthesizeParams);
To obtain the set of valid characters, call orca.validCharacters
.
To retrieve the maximum number of characters allowed, call orca.maxCharacterLimit
.
The sample rate of Orca is orca.sampleRate
.
Along with the raw PCM or saved audio file, Orca returns metadata for the synthesized audio in single synthesis mode.
The OrcaAlignment
object has the following properties:
OrcaPhoneme
objects.The OrcaPhoneme
object has the following properties:
Orca Node.js demo package provides command-line utilities for processing audio using Orca.
FAQs
Picovoice Orca Node.js binding
We found that @picovoice/orca-node demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 0 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Oracle seeks to dismiss fraud claims in the JavaScript trademark dispute, delaying the case and avoiding questions about its right to the name.
Security News
The Linux Foundation is warning open source developers that compliance with global sanctions is mandatory, highlighting legal risks and restrictions on contributions.
Security News
Maven Central now validates Sigstore signatures, making it easier for developers to verify the provenance of Java packages.