What the analyzer returns
The microphone starts capturing as soon as access is granted. Realtime transcription streams your words while Resonance 2 analyzes the captured audio for emotion and delivery. The demo shows up to five selected labels. Live readings update as you speak; the whole-recording reading appears after you stop.
Resonance 2 selects expression labels using its own thresholds and may return none. Its scores describe how speech sounds, not probabilities of a speaker’s feelings. The transcript comes from a separate model. See the Resonance 2 API reference and capabilities and scope.
Use the demo’s expression model in your app
For a saved recording, call Resonance 2 directly to get all 31 expression scores and the selected labels. This request covers the expression part of the demo. It returns one reading for the clip; the live transcript above comes from a separate Realtime connection.
New organizations need Resonance 2 access approval separately from activating a plan. Until approved, the API returns 403 model_access_required. You can keep using the public microphone demo while waiting.
Run a short recording through Resonance 2
This CREMA-D recording is an actor saying “It's eleven o'clock” with intended happiness. The command downloads the sample from the dataset’s pinned source revision, sends it to the API, and saves the full response as result.json. Use a terminal with cURL and Python 3, an API key from an approved organization, and an active allowance or credit balance. The request uses your normal audio allowance. Run it in an empty directory; it writes clip.wav and result.json.
set -eu
: "${ORUK_API_KEY:?Set ORUK_API_KEY to your Oruk API key first}"
curl --fail --silent --show-error --location \
'https://media.githubusercontent.com/media/CheyneyComputerScience/CREMA-D/1658cd342dff90010aa843eaeebd53610a08b1dc/AudioWAV/1001_IEO_HAP_MD.wav' -o clip.wav
request_id="$(python3 -c 'import uuid; print(uuid.uuid4())')"
curl --fail-with-body --silent --show-error \
'https://speech-api.oruk.ai/v1/audio/resonance-2?regime=f1' \
-H "Authorization: Bearer $ORUK_API_KEY" \
-H "X-Request-ID: $request_id" \
-F model=oruk-resonance-2 -F file=@clip.wav -o result.json
python3 - <<'PY'
import json
from pathlib import Path
result = json.loads(Path("result.json").read_text())
print("Selected labels:", result["labels"])
print("Sad (-) / happy (+):", result["axes"]["sad__happy"])
print("Model revision:", result["model_revision"])
print("Calibration revision:", result["calibration_revision"])
PYKeep request_id and the same audio if you retry the cURL request after a timeout. Starting the whole example again creates a new request. SDK 0.2.10 has no dedicated helper for this route; the example uses HTTP directly.
Listen and compare with the saved September 17 response
The saved response selected energetic (0.797) and happy (0.785). Its sad__happy axis was 0.785. That positive value favors happy; it is not a 79% probability of happiness. A new request may differ as the preview changes, so keep both revision fields. An empty labels array is also a valid result.
This is one format example, not an accuracy estimate. The research article includes all six examples from this actor, including mistakes.
CREMA-D, Cao et al. (2014). Audio source and license · Complete saved response and provenance · API fields and error handling
Analyze a recording with Resonance 1 in Python
Resonance 1 is oruk’s flagship speech recognition model. It transcribes English recordings and analyzes emotion and speaking style in one request. This saved-file example uses stable Resonance 1. The live microphone above uses Resonance 2 preview and a separate realtime transcript, so its output differs.
Install the official Python SDK in your terminal:
python -m pip install https://oruk.ai/sdk/oruk-0.2.15-py3-none-any.whlSave the following as analyze.py, put recording.wav in the same directory, and set ORUK_API_KEY in your environment.
import os
from oruk import Oruk
with Oruk(api_key=os.environ["ORUK_API_KEY"]) as client:
result = client.analyze("recording.wav", model="oruk-resonance")
print(result["text"])
for segment in result["segments"]:
print(segment["start"], segment["end"], segment["emotions"], segment["styles"])Run python analyze.py with the same Python environment used for installation. The script prints the transcript, then each segment’s start and end in seconds with its returned emotion and style labels. For request options and downloads, see the official SDK documentation.
The recording-level score for a label is the highest returned segment score for that label. It does not tell you how much of the recording has that emotion. See the worked example of segment and recording scores before turning these results into analytics. Use the evaluation guide to choose recordings that match your use case, hold out speakers, and inspect errors by label.
The microphone demo stops after 30 seconds. File integrations support longer recordings within the documented audio formats and limits. Record only audio you have permission to process.
FAQ
- Is this voice emotion analyzer free?
- Yes. The microphone demo combines Resonance 2 preview with realtime transcription at no cost and with no account. For your own applications, plans start at $9/month with audio minutes included, and self-serve plans start with a 7-day free trial.
- Is my voice recording stored?
- This microphone demo sends audio to Oruk over TLS. Resonance 2 buffers audio in memory during the session; reset or session closure clears the buffer, and any in-flight analysis keeps its committed audio until it finishes. Completed expression results, without raw audio or a transcript, are stored for durable settlement and authorized same-ID replay. Replay is available for 24 hours; this is not a physical-deletion deadline. Request metadata is retained for billing, security, and support. Demo audio and outputs are not used for training; see the privacy policy for details.
- How does the analyzer detect emotion from voice?
- Resonance 2 scores vocal expression directly from the audio signal. This demo shows up to five selected emotion and delivery labels while you speak, then analyzes the whole recording when you stop. An empty reading is valid. Labels describe how speech sounds, not what the speaker inwardly feels.
- What languages does it support?
- Start with English when testing this combined demo. Its transcript comes from the separate Realtime preview, which supports 32 locales. That transcription coverage does not establish the same language coverage for Resonance 2 expression scores.
- Can I use this in my own product?
- Yes. This live demo combines the Realtime WebSocket for text with the dedicated Resonance 2 affect route for expression scores. For a saved recording, the stable Resonance 1 /v1/audio/analysis endpoint returns transcript, emotion, style, and timed segments in one response. These models have different response contracts; see the API documentation for each.
Build this into your product
Use the speech API for call analytics, meeting tools, and research pipelines. Plans start at $9/month with audio minutes included, and self-serve plans start with a 7-day free trial.