Getting Started
Hermes is the Hecttor Speech Enhancer SDK for human listening. For a conceptual tour of the three functionalities (Noise Cancellation, Speech Speed Adjustment, Voice Boost), see the Overview.
Installation
Hermes ships as a platform-specific package matching your SDK language and runtime.
# Install the wheel that matches your Python version and OS, e.g.:
pip install hecttor_sdk-3.0.1-cp311-cp311-macosx_arm64.whl# Install the .tgz that matches your platform, e.g.:
npm install ./hecttor_sdk-2.0.0-linux-x64-node.tgz<!-- Maven: add the per-platform fat JAR to your project -->
<dependency>
<groupId>io.hecttor</groupId>
<artifactId>hecttor-sdk</artifactId>
<version>2.0.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/hecttor_sdk-2.0.0-macos.jar</systemPath>
</dependency># CMakeLists.txt: point CMAKE_PREFIX_PATH at the unpacked SDK and link
list(APPEND CMAKE_PREFIX_PATH "/path/to/hecttor-sdk/lib/cmake")
find_package(HecttorSDK REQUIRED)
target_link_libraries(your_app PRIVATE Hecttor::SDK)# Add the NuGet package (per-platform RIDs are bundled inside the .nupkg)
dotnet add package Hecttor.SDK --version 2.0.0// go.mod — point the module at the extracted Go SDK directory
require hecttor.ai/sdk v1.0.0
replace hecttor.ai/sdk => /path/to/extracted/go# Then make the binding find the native libs at runtime
export HECTTOR_SDK_LIB_DIR=/path/to/extracted/native
go build .The exact install artifact varies by SDK language, platform, and runtime version. Use the package matching your environment; your license email or onboarding contact has the right link.
Configure your SDK key
Store your SDK key in an environment variable rather than hardcoding it:
export HECTTOR_API_KEY="your_api_key_here"Then read it from your application:
import os
api_key = os.environ["HECTTOR_API_KEY"]const apiKey = process.env.HECTTOR_API_KEY;String apiKey = System.getenv("HECTTOR_API_KEY");#include <cstdlib>
const char* apiKey = std::getenv("HECTTOR_API_KEY");string apiKey = Environment.GetEnvironmentVariable("HECTTOR_API_KEY");import "os"
apiKey := os.Getenv("HECTTOR_API_KEY")Never expose your SDK key in client-side code or commit it to version control.
Your first enhancement
The full integration: initialize Hermes once with all three functionalities (Noise Cancellation, Voice Boost, and Speech Speed Adjustment), then feed it audio chunks of the configured size.
import numpy as np
from hecttor_sdk import (
HumanSpeechEnhancer,
HumanSpeechEnhancerConfig,
NoiseCancellationConfig,
SpeedControlConfig,
)
config = HumanSpeechEnhancerConfig(
api_key="your_api_key_here",
chunk_size_ms=20, # Required for speed control
sample_rate=16000, # Supported: 4000, 8000, 16000, 24000, 32000, 44100, 48000
enable_voice_boost=True,
noise_cancellation_config=NoiseCancellationConfig(
model_name="your_model", # "auris-1.0" or "coda-1.0"
enhancer_weight=1.0 # 0.0 = original, 1.0 = fully enhanced (default)
),
speed_control_config=SpeedControlConfig(
speed_intensity=1.0, # 0.7–1.5
slowdown_capacity_ms=800.0 # recommended 400–1000
)
)
enhancer = HumanSpeechEnhancer()
success, error = enhancer.initialize(config)
if not success:
print(f"Initialization failed: {error}")
exit(1)
chunk_size = enhancer.get_chunk_size_samples()
print(f"Input chunk size: {chunk_size} samples")
audio_chunk = np.random.randn(chunk_size).astype(np.float32)
enhanced, error = enhancer.process_chunk(audio_chunk)
if enhanced is not None:
print(f"Input: {chunk_size} -> Output: {len(enhanced)} samples (varies with speed control)")
else:
print(f"Error: {error}")const { HumanSpeechEnhancer } = require('hecttor_sdk');
async function main() {
const enhancer = new HumanSpeechEnhancer();
await enhancer.initialize({
apiKey: 'your_api_key_here',
chunkSizeMs: 20, // Required for speed control
sampleRate: 16000, // Supported: 4000, 8000, 16000, 24000, 32000, 44100, 48000
enableVoiceBoost: true,
noiseCancellationConfig: {
modelName: 'your_model', // "auris-1.0" or "coda-1.0"
enhancerWeight: 1.0, // 0.0 = original, 1.0 = fully enhanced (default)
},
speedControlConfig: {
speedIntensity: 1.0, // 0.7-1.5
slowdownCapacityMs: 800.0, // recommended 400-1000
},
});
const chunkSize = enhancer.getChunkSizeSamples();
console.log(`Input chunk size: ${chunkSize} samples`);
const audioChunk = new Float32Array(chunkSize); // ... fill with audio data ...
const enhanced = await enhancer.processChunk(audioChunk);
console.log(`Input: ${chunkSize} -> Output: ${enhanced.length} samples (varies with speed control)`);
}
main().catch((err) => console.error(err.message));import io.hecttor.sdk.*;
public class FullExample {
public static void main(String[] args) {
HumanSpeechEnhancerConfig config = HumanSpeechEnhancerConfig.builder("your_api_key_here")
.chunkSizeMs(20) // Required for speed control
.sampleRate(16000) // Supported: 4000, 8000, 16000, 24000, 32000, 44100, 48000
.enableVoiceBoost(true)
.noiseCancellation(new HumanSpeechEnhancerConfig.NoiseCancellationConfig(
"your_model", // "auris-1.0" or "coda-1.0"
1.0f // enhancerWeight: 0.0 = original, 1.0 = fully enhanced
))
.speedControl(new HumanSpeechEnhancerConfig.SpeedControlConfig(
1.0f, // speedIntensity: 0.7-1.5
800.0f // slowdownCapacityMs: recommended 400-1000
))
.build();
try (HumanSpeechEnhancer enhancer = new HumanSpeechEnhancer()) {
enhancer.initialize(config);
int chunkSize = enhancer.getChunkSizeSamples();
System.out.println("Input chunk size: " + chunkSize + " samples");
float[] audioChunk = new float[chunkSize]; // ... fill with audio data ...
float[] enhanced = enhancer.processChunk(audioChunk);
System.out.println("Input: " + chunkSize + " -> Output: " + enhanced.length
+ " samples (varies with speed control)");
} catch (HecttorInitializationException e) {
System.err.println("Initialization failed: " + e.getMessage());
System.exit(1);
} catch (HecttorProcessingException e) {
System.err.println("Processing failed: " + e.getMessage());
System.exit(1);
}
}
}#include <hecttor/human_speech_enhancer.hpp>
#include <iostream>
#include <vector>
int main() {
try {
hecttor::HumanSpeechEnhancerConfig config;
config.apiKey = "your_api_key_here";
config.chunkSizeMs = 20; // Required for speed control
config.sampleRate = 16000; // Supported: 4000, 8000, 16000, 24000, 32000, 44100, 48000
config.enableVoiceBoost = true;
config.noiseCancellationConfig = hecttor::NoiseCancellationConfig{
"your_model", // "auris-1.0" or "coda-1.0"
1.0f // enhancerWeight: 0.0 = original, 1.0 = fully enhanced
};
config.speedControlConfig = hecttor::SpeedControlConfig{
1.0f, // speedIntensity: 0.7-1.5
800.0f // slowdownCapacityMs: recommended 400-1000
};
hecttor::HumanSpeechEnhancer enhancer;
enhancer.initialize(config);
const size_t chunkSize = enhancer.getChunkSizeSamples();
std::cout << "Input chunk size: " << chunkSize << " samples\n";
std::vector<float> audioChunk(chunkSize, 0.0f); // ... fill with audio data ...
std::vector<float> enhanced = enhancer.processChunk(audioChunk);
std::cout << "Input: " << chunkSize << " -> Output: " << enhanced.size()
<< " samples (varies with speed control)\n";
} catch (const hecttor::InitializationException& e) {
std::cerr << "Initialization failed: " << e.what() << "\n";
return 1;
} catch (const hecttor::ProcessingException& e) {
std::cerr << "Processing failed: " << e.what() << "\n";
return 1;
}
return 0;
}using System;
using Hecttor.SDK;
class Program
{
static void Main()
{
try
{
var config = new HumanSpeechEnhancerConfig
{
ApiKey = "your_api_key_here",
ChunkSizeMs = 20, // Required for speed control
SampleRate = 16000, // Supported: 4000, 8000, 16000, 24000, 32000, 44100, 48000
EnableVoiceBoost = true,
NoiseCancellation = new NoiseCancellationConfig
{
ModelName = "your_model", // "auris-1.0" or "coda-1.0"
EnhancerWeight = 1.0f, // 0.0 = original, 1.0 = fully enhanced
},
SpeedControl = new SpeedControlConfig
{
SpeedIntensity = 1.0f, // 0.7-1.5
SlowdownCapacityMs = 800.0f, // recommended 400-1000
},
};
using var enhancer = new HumanSpeechEnhancer();
enhancer.Initialize(config);
int chunkSize = enhancer.ChunkSizeSamples;
Console.WriteLine($"Input chunk size: {chunkSize} samples");
float[] audioChunk = new float[chunkSize]; // ... fill with audio data ...
float[] enhanced = enhancer.ProcessChunk(audioChunk);
Console.WriteLine($"Input: {chunkSize} -> Output: {enhanced.Length} samples (varies with speed control)");
}
catch (HecttorInitializationException ex)
{
Console.WriteLine($"Initialization failed: {ex.Message}");
Environment.Exit(1);
}
catch (HecttorProcessingException ex)
{
Console.WriteLine($"Processing failed: {ex.Message}");
Environment.Exit(1);
}
}
}package main
import (
"fmt"
"log"
"os"
hecttor "hecttor.ai/sdk"
)
func main() {
enh, err := hecttor.NewHumanSpeechEnhancer()
if err != nil {
log.Fatal(err)
}
defer enh.Close()
nc := hecttor.NewNoiseCancellationConfig("your_model") // "auris-1.0" or "coda-1.0"
nc.EnhancerWeight = 1.0 // 0.0 = original, 1.0 = fully enhanced
if err := enh.Initialize(hecttor.HumanSpeechEnhancerConfig{
APIKey: os.Getenv("HECTTOR_API_KEY"),
ChunkSizeMs: 20, // Required for speed control
SampleRate: 16000, // Supported: 4000, 8000, 16000, 24000, 32000, 44100, 48000
EnableVoiceBoost: true,
NoiseCancellation: nc,
SpeedControl: &hecttor.SpeedControlConfig{
SpeedIntensity: 1.0, // 0.7-1.5
SlowdownCapacityMs: 800.0, // recommended 400-1000
},
}); err != nil {
log.Fatalf("Initialization failed: %v", err)
}
chunkSize, err := enh.ChunkSizeSamples()
if err != nil {
log.Fatal(err)
}
fmt.Printf("Input chunk size: %d samples\n", chunkSize)
audioChunk := make([]float32, chunkSize) // ... fill with audio data ...
enhanced, err := enh.ProcessChunk(audioChunk)
if err != nil {
log.Fatalf("Processing failed: %v", err)
}
fmt.Printf("Input: %d -> Output: %d samples (varies with speed control)\n",
chunkSize, len(enhanced))
}That's the full integration shape: initialize once, then call the per-chunk enhancement function repeatedly with audio buffers sized to Hermes's configured chunk length.
What to do next
- See Examples for common configurations (denoise only, voice boost only, full stack with speed control).
- Read the SDK Overview if you haven't already; it'll help you decide whether Hermes alone is enough, or whether you also need Orpheus for an ASR pipeline.