Real-time speech-to-speech translation SDK for Java applications, powered by Palabra AI's advanced translation API.
- Real-time Translation: Stream audio and receive translations with minimal latency
- Voice Cloning: Maintain speaker's voice characteristics across languages
- 25+ Languages: Support for major world languages and regional variants
- Multiple I/O Adapters: File, device (microphone/speaker), and buffer adapters
- WebSocket Streaming: Efficient bi-directional audio streaming
- Advanced Configuration: Fine-tune transcription, translation, and synthesis settings
- CLI Application: Command-line interface for quick testing and integration
- Java 17 or higher
- Palabra AI API credentials (Sign up)
<dependency>
<groupId>ai.palabra</groupId>
<artifactId>palabra-ai-java</artifactId>
<version>1.0.0</version>
</dependency>
dependencies {
implementation 'ai.palabra:palabra-ai-java:1.0.0'
}
git clone https://github.com/PalabraAI/palabra-ai-java.git
cd palabra-ai-java
./gradlew build
Set your API credentials as environment variables:
export PALABRA_CLIENT_ID="your-client-id"
export PALABRA_CLIENT_SECRET="your-client-secret"
import ai.palabra.*;
import ai.palabra.adapter.*;
public class TranslationExample {
public static void main(String[] args) {
// Initialize client with credentials
String clientId = System.getenv("PALABRA_CLIENT_ID");
String clientSecret = System.getenv("PALABRA_CLIENT_SECRET");
PalabraAI client = new PalabraAI(clientId, clientSecret);
// Configure translation
Config config = Config.builder()
.sourceLang(Language.EN_US)
.targetLang(Language.ES_MX)
.reader(new FileReader("input.wav"))
.writer(new FileWriter("output.wav"))
.build();
// Run translation
client.run(config);
}
}
Translate speech from microphone to speakers in real-time:
String clientId = System.getenv("PALABRA_CLIENT_ID");
String clientSecret = System.getenv("PALABRA_CLIENT_SECRET");
Config config = Config.builder()
.sourceLang(Language.EN_US)
.targetLang(Language.JA) // Japanese
.reader(new DeviceReader()) // Default microphone
.writer(new DeviceWriter()) // Default speakers
.build();
// Run for 30 seconds
PalabraAI client = new PalabraAI(clientId, clientSecret);
CompletableFuture<Void> future = client.runAsync(config);
Thread.sleep(30000); // Translate for 30 seconds
client.cancel(); // Cancel the translation
future.join();
Translate audio files between languages:
String clientId = System.getenv("PALABRA_CLIENT_ID");
String clientSecret = System.getenv("PALABRA_CLIENT_SECRET");
PalabraAI client = new PalabraAI(clientId, clientSecret);
Config config = Config.builder()
.sourceLang(Language.EN_US)
.targetLang(Language.FR) // French
.reader(new FileReader("english_audio.wav"))
.writer(new FileWriter("french_audio.wav"))
.build();
client.run(config);
Process audio from memory buffers:
String clientId = System.getenv("PALABRA_CLIENT_ID");
String clientSecret = System.getenv("PALABRA_CLIENT_SECRET");
// Create buffers
BufferReader reader = new BufferReader();
BufferWriter writer = new BufferWriter();
// Load audio data into reader
byte[] audioData = Files.readAllBytes(Paths.get("audio.wav"));
reader.addData(audioData);
Config config = Config.builder()
.sourceLang(Language.DE) // German
.targetLang(Language.EN_US)
.reader(reader)
.writer(writer)
.build();
// Process translation
PalabraAI client = new PalabraAI(clientId, clientSecret);
client.run(config);
// Get translated audio
byte[] translatedAudio = writer.getData();
Files.write(Paths.get("translated.wav"), translatedAudio);
Translate to multiple languages simultaneously:
String clientId = System.getenv("PALABRA_CLIENT_ID");
String clientSecret = System.getenv("PALABRA_CLIENT_SECRET");
Config config = Config.builder()
.advanced()
.source(Language.EN_US, new FileReader("input.wav"))
.addTarget(Language.ES_MX, new FileWriter("spanish.wav"))
.addTarget(Language.FR, new FileWriter("french.wav")) // French
.addTarget(Language.DE, new FileWriter("german.wav")) // German
.build();
PalabraAI client = new PalabraAI(clientId, clientSecret);
client.run(config);
Fine-tune translation parameters:
import ai.palabra.config.*;
String clientId = System.getenv("PALABRA_CLIENT_ID");
String clientSecret = System.getenv("PALABRA_CLIENT_SECRET");
PalabraAI client = new PalabraAI(clientId, clientSecret);
Config config = Config.builder()
.advanced()
.source(SourceLangConfig.builder()
.language(Language.EN_US)
.reader(new FileReader("input.wav"))
.transcription(TranscriptionConfig.builder()
.denoise("auto")
.segmentConfirmationSilenceThreshold(0.8f)
.build())
.build())
.addTarget(TargetLangConfig.builder()
.language(Language.ES_MX)
.writer(new FileWriter("output.wav"))
.translation(TranslationConfig.builder()
.translationModel("advanced")
.speechGeneration(SpeechGenerationConfig.builder()
.voiceId("default_low")
.build())
.build())
.build())
.inputStream(InputStreamConfig.builder()
.audioFormat(AudioFormat.builder()
.format("pcm_s16le")
.sampleRate(24000)
.channels(1)
.build())
.build())
.build();
client.run(config);
String clientId = System.getenv("PALABRA_CLIENT_ID");
String clientSecret = System.getenv("PALABRA_CLIENT_SECRET");
// Load from file
Config config = Config.fromFile(Paths.get("config.json"));
PalabraAI client = new PalabraAI(clientId, clientSecret);
client.run(config);
// Load from JSON string
String json = """
{
"source": {
"lang": "EN_US",
"transcription": {
"denoise": "auto"
}
},
"targets": [{
"lang": "ES_MX",
"translation": {
"speech_generation": {
"voice_id": "default_low"
}
}
}]
}
""";
Config config2 = Config.fromJson(json);
The SDK includes a command-line interface for quick testing and integration.
After building from source, run ./gradlew installDist
to create the CLI executable:
# Create the CLI installation
./gradlew installDist
# Add to PATH (optional)
export PATH=$PATH:$(pwd)/build/install/palabra-ai-java/bin
# Or use directly
./build/install/palabra-ai-java/bin/palabra-ai-java --help
Translate audio files:
# Basic translation
./gradlew run --args="file --input audio.wav --target ES_MX --output spanish.wav"
# With source language specification
./gradlew run --args="file -i recording.wav -s EN_US -t FR -o french.wav"
# Using configuration file
./gradlew run --args="file -i input.wav --config-file config.json -o output.wav"
Real-time microphone translation:
# List available audio devices
./gradlew run --args="device --list-devices"
# Translate for 30 seconds
./gradlew run --args="device -s EN_US -t ES_MX -d 30"
# With specific devices
./gradlew run --args="device --input-device 0 --output-device 1 -t JA -d 60"
Manage API credentials and configuration files:
# Set individual configuration values
./gradlew run --args="config set client.id YOUR_CLIENT_ID"
./gradlew run --args="config set client.secret YOUR_CLIENT_SECRET"
# Get a specific configuration value
./gradlew run --args="config get client.id"
# List all configuration values
./gradlew run --args="config list"
# Validate a JSON configuration file
./gradlew run --args="config validate config.json"
# Load and display a JSON configuration file
./gradlew run --args="config load config.json"
./gradlew run --args="config load config.json --pretty"
The SDK supports 25+ languages. See the Language enum for type-safe language selection:
Language.EN_US // English (United States)
Language.ES_MX // Spanish (Mexico)
Language.FR // French
Language.DE // German
Language.JA // Japanese
Language.KO // Korean
Language.ZH // Chinese
// ... etc
Run the test suite:
# All tests (requires API credentials for integration tests)
./gradlew test
# Unit tests only
./gradlew test --tests "*Test"
# Integration tests (requires credentials)
./gradlew test --tests "*IntegrationTest"
# Run specific test class
./gradlew test --tests "ai.palabra.PalabraAITest"
# Run with detailed output
./gradlew test --info
- Maven distribution
- Quick start examples
- π Documentation: https://docs.palabra.ai
- π Issues: GitHub Issues
- π§ Email: [email protected]
This project is licensed under the MIT License - see the LICENSE file for details.
Built with:
- OkHttp - HTTP & WebSocket client
- Jackson - JSON processing
- Picocli - CLI framework
- SLF4J - Logging facade
Β© Palabra.ai, 2025 | π Breaking down language barriers with AI π