Skip to content

Java SDK for Palabra AI's real-time speech-to-speech translation API. Break down language barriers and enable seamless communication across 25+ languages

License

Notifications You must be signed in to change notification settings

PalabraAI/palabra-ai-java

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

28 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Palabra AI Java SDK

Maven Central Java License Build Status

Real-time speech-to-speech translation SDK for Java applications, powered by Palabra AI's advanced translation API.

Features

  • 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

Requirements

  • Java 17 or higher
  • Palabra AI API credentials (Sign up)

Installation

Maven

<dependency>
    <groupId>ai.palabra</groupId>
    <artifactId>palabra-ai-java</artifactId>
    <version>1.0.0</version>
</dependency>

Gradle

dependencies {
    implementation 'ai.palabra:palabra-ai-java:1.0.0'
}

Building from Source

git clone https://github.com/PalabraAI/palabra-ai-java.git
cd palabra-ai-java
./gradlew build

Quick Start

Setting API Credentials

Set your API credentials as environment variables:

export PALABRA_CLIENT_ID="your-client-id"
export PALABRA_CLIENT_SECRET="your-client-secret"

Basic Usage

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);
    }
}

SDK Usage Examples

Real-time Microphone Translation

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();

File-to-File Translation

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);

Buffer-based Translation

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);

Multiple Target Languages

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);

Advanced Configuration

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);

Loading Configuration from JSON

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);

CLI Application

The SDK includes a command-line interface for quick testing and integration.

Installation

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

CLI Commands

File Translation

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"

Device Translation

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"

Configuration Management

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"

Supported Languages

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

Testing

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

Roadmap

  • Maven distribution
  • Quick start examples

Support

License

This project is licensed under the MIT License - see the LICENSE file for details.

Acknowledgments

Built with:


Β© Palabra.ai, 2025 | 🌍 Breaking down language barriers with AI πŸš€

About

Java SDK for Palabra AI's real-time speech-to-speech translation API. Break down language barriers and enable seamless communication across 25+ languages

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published