31 Commits
v25 ... v51

Author SHA1 Message Date
Andrew Stein
688b469f6b Implemented projects API requests / models / responses. 2023-11-15 15:32:15 -05:00
Andrew Stein
388d059af7 Updated requests / models with new voice parameters. Preparing for Projects integration 2023-11-15 14:34:49 -05:00
Andrew Stein
1f9c48eac6 Merge remote-tracking branch 'origin/main' 2023-09-03 13:55:48 -04:00
Andrew Stein
b3ea0e2a09 Updated POM.xml 2023-09-03 13:55:35 -04:00
Andrew Stein
75eb64a077 Update README.md 2023-09-03 13:55:18 -04:00
Andrew Stein
c5706317aa Updated build name. 2023-06-11 19:36:05 -04:00
Andrew Stein
0a2f6d1869 Reorganized files. 2023-06-11 19:35:13 -04:00
Andrew Stein
b753769a53 Updated POM version. 2023-06-11 19:33:09 -04:00
Andrew Stein
8162cada71 Reorganized directories 2023-06-11 19:32:49 -04:00
Andrew Stein
fdcc12ee41 Updated README 2023-06-11 19:07:28 -04:00
Andrew Stein
8c526a1539 Updated README and added new functions for parity. 2023-06-11 19:02:16 -04:00
Andrew Stein
95cf38c620 Updated action 2023-06-11 18:48:53 -04:00
Andrew Stein
6968219c55 Updated action 2023-06-11 18:28:05 -04:00
Andrew Stein
e6279b689f Updated action 2023-06-11 18:26:50 -04:00
Andrew Stein
3462385f3d Updated models to include static retrieval & action functions. 2023-06-11 18:19:25 -04:00
Andrew Stein
0bca63fd50 Updated POM. 2023-06-11 18:00:51 -04:00
Andrew Stein
f7998ee0f9 Merge branch 'main' of https://github.com/AndrewCPU/elevenlabs-api 2023-06-11 18:00:18 -04:00
Andrew Stein
22cdc7146c Updated POM version. 2023-06-11 17:59:56 -04:00
Andrew Stein
e746eeaea9 Update build.yml 2023-06-11 17:55:03 -04:00
Andrew Stein
36eac79a9c Merge pull request #6 from AndrewCPU/REWRITE
Rewrite
2023-06-11 17:50:37 -04:00
Andrew Stein
810c264ac6 Rewrite 2023-06-11 17:49:07 -04:00
Andrew Stein
6a2256d4ca Setup 2023-06-11 17:48:39 -04:00
Andrew Stein
a8e43af913 Streamed response support 2023-03-10 17:48:52 -05:00
Andrew Stein
b8d3ae7c90 Preliminary Streamed response test 2023-02-26 00:12:36 -05:00
Andrew Stein
4b740d8997 Updated README with Packages information 2023-02-25 20:57:59 -05:00
Andrew Stein
78dba6753d Added Maven deploy info to pom 2023-02-25 20:41:31 -05:00
Andrew Stein
49e2e716eb Updated exception handling, refactored classes to further reduce duplicate code. Adjusted endpoint handling. Removed logic from ElevenLabsAPI and moved it into components. 2023-02-25 20:36:59 -05:00
Andrew Stein
e99b3d24a3 Refactored error handling, abstracted request types to avoid needing to declare HTTPMethod for each request 2023-02-25 18:21:13 -05:00
Andrew Stein
ca3962dd05 Styling 2023-02-25 02:34:23 -05:00
Andrew Stein
f4e28baadd Styling 2023-02-25 02:32:09 -05:00
Andrew Stein
8bb441a097 Styling 2023-02-25 02:17:43 -05:00
142 changed files with 4404 additions and 2139 deletions

View File

@@ -1,4 +1,4 @@
name: Java CI with Maven
name: Build
on:
push:
@@ -17,11 +17,11 @@ jobs:
- name: Set up Java
uses: actions/setup-java@v2
with:
java-version: '17'
java-version: '11'
distribution: 'zulu'
- name: Build with Maven
run: mvn clean package
run: mvn clean package -Dmaven.test.skip
- name: Read version from POM file
id: version

226
README.md
View File

@@ -1,50 +1,86 @@
# elevenlabs-api ![example workflow](https://github.com/AndrewCPU/elevenlabs-api/actions/workflows/main.yml/badge.svg)
## An unofficial ElevenLabs AI Voice Generation Java API
*Disclaimer: I am not affiliated with ElevenLabs and am providing a programmatic way of accessing the public ElevenLabs Web API.*
# 🗣️🔊 elevenlabs-api ![Build](https://github.com/AndrewCPU/elevenlabs-api/actions/workflows/build.yml/badge.svg)
### An unofficial ElevenLabs AI Voice Generation Java API
## Getting Started
So you wanna make custom voices, huh? Well you've come to the right place.
### Note: This repo is undergoing an upgrade to v2.0
If any of the documentation is out of place or issues occur, please submit a PR or create an issue.
I downgraded the repo from JDK 17 to JDK 11 as well.
### Installation
**Maven**
To add `elevenlabs-api` to your Maven project, use:
```xml
<dependency>
<groupId>net.andrewcpu</groupId>
<artifactId>elevenlabs-api</artifactId>
<version>2.1</version>
</dependency>
```
The most up-to date package information can be found on the [Packages tab](https://github.com/AndrewCPU/elevenlabs-api/packages/)
**JAR**
Compiled JARs are available via the [Releases tab](https://github.com/AndrewCPU/elevenlabs-api/releases)
### Setting up your API Key
To access your ElevenLabs API key, head to the [official website](https://elevenlabs.io/), you can view your `xi-api-key` using the 'Profile' tab on the website.
To set up your ElevenLabs API key, you must register it with the ElevenLabsAPI Java API like below:
```java
ElevenLabs.setApiKey("YOUR_API_KEY_HERE");
```
*For any public repository security, you should store your API key in an environment variable, or external from your source code.*
- - -
<!-- TOC -->
### Table of Contents
* [Getting Started](#getting-started)
* [Installation](#installation)
* [Setting up your API Key](#setting-up-your-api-key)
* [Voices](#voices)
* [Accessing your List of Available Voices](#accessing-your-list-of-available-voices)
* [Accessing the Default Voice Settings](#accessing-the-default-voice-settings)
* [Getting a Voice by ID](#getting-a-voice-by-id)
* [Deleting a voice](#deleting-a-voice)
* [Retrieving an Updated VoiceSettings for a Voice](#retrieving-an-updated-voicesettings-for-a-voice)
* [Updating the VoiceSettings for a Voice](#updating-the-voicesettings-for-a-voice)
* [Editing a Voice](#editing-a-voice)
* [Creating a Voice](#creating-a-voice)
* [Generating Audio](#generating-audio)
* [Samples](#samples)
* [Accessing Voice Samples](#accessing-voice-samples)
* [Downloading a Sample](#downloading-a-sample)
* [Deleting a Sample](#deleting-a-sample)
* [History](#history)
* [Getting Generation History](#getting-generation-history)
* [Getting a History Item](#getting-a-history-item)
* [Downloading History](#downloading-history)
* [Deleting a HistoryItem](#deleting-a-historyitem)
* [Requesting the Voice for a HistoryItem](#requesting-the-voice-for-a-historyitem)
* [Downloading a HistoryItem Audio](#downloading-a-historyitem-audio)
* [User Management](#user-management)
* [Getting your Subscription](#getting-your-subscription)
* [Getting your User](#getting-your-user)
* [Exceptions](#exceptions)
* [*ElevenLabsAPINotInitiatedException*](#elevenlabsapinotinitiatedexception)
* [*ElevenLabsValidationException*](#elevenlabsvalidationexception)
* [Misc](#misc)
* [Links to ElevenLabs](#links-to-elevenlabs)
* [**ElevenLabs Website**: https://elevenlabs.io](#elevenlabs-website--httpselevenlabsio)
* [**ElevenLabs API Documentation**: https://api.elevenlabs.io/docs](#elevenlabs-api-documentation--httpsapielevenlabsiodocs)
<!-- TOC -->
## Links to ElevenLabs
### **ElevenLabs Website**: https://elevenlabs.io
### **ElevenLabs API Documentation**: https://api.elevenlabs.io/docs
- - -
## Getting Started
So you wanna make custom voices, huh? Well you've come to the right place.
### Installation
**Maven**
To install `elevenlabs-api` with Maven, use:
```xml
<dependencies>
...
<dependency>
<groupId>net.andrewcpu.elevenlabs</groupId>
<artifactId>elevenlabs-api</artifactId>
<version>CURRENT_VERSION</version>
</dependency>
...
</dependencies>
```
**JAR**
Compiled JARs are available via the [Releases tab](https://github.com/AndrewCPU/elevenlabs-api/releases)
**Gradle**
*Todo*
### Setting up your API Key
To access your ElevenLabs API key, head to the [official website](https://elevenlabs.io/), you can view your xi-api-key using the 'Profile' tab on the website.
To set up your ElevenLabs API key, you must register it with the ElevenLabsAPI Java API like below:
```java
ElevenLabsAPI.getInstance().setAPIKey("YOUR_API_KEY_HERE");
```
*For any public repository security, you should store your API key in an environment variable, or external from your source code.*
Once you've injected your API Key, you can safely assume that you will not receive a `ElevenLabsAPINotInitiatedException`.
- - -
## Voices
### Accessing your List of Available Voices
To retrieve your list of accessible Voices, you can statically utilize `Voice#getVoices()`. This will return both ElevenLab's pregenerated `Voice` models, as well as any personal `Voices` you have generated.
@@ -132,8 +168,15 @@ To generate an audio file with a given `Voice`, you can utilize the `Voice#gener
Depending on how you access your `Voice`, (with or without settings), will decide whether you can use the implicit `voiceSettings` or if you have to specify the `VoiceSettings` object to use. Unless explicitly requesting the `Voice` without settings, every `Voice` object SHOULD contain its default `VoiceSettings`.
```java
Voice voice;
File outputFile = voice.generate(String text, VoiceSettings voiceSettings, File output);
File outputFile = voice.generate(String text, File output); // Uses default voice settings
File file = voice.generate(String text);
File file = voice.generate(String text, VoiceSettings settings);
File file = voice.generate(String text, String model, VoiceSettings settings);
File file = voice.generate(String text, String model);
InputStream inputStream = voice.generateStream(String text);
InputStream inputStream = voice.generateStream(String text, VoiceSettings settings);
InputStream inputStream = voice.generateStream(String text, String model, VoiceSettings settings);
InputStream inputStream = voice.generateStream(String text, String model);
```
- - -
@@ -150,7 +193,7 @@ You can download a `Sample` via the `Sample#downloadAudio(File outputFile)` func
The `File` parameter of `downloadAudio()` is the location of where you want to locally download the sample.
```java
Voice voice;
File file = voice.getSamples().get(0).downloadAudio(File outputFile);
File file = voice.getSamples().get(0).downloadAudio();
```
### Deleting a Sample
@@ -178,11 +221,11 @@ HistoryItem item = history.getHistoryItem("itemId");
### Downloading History
The official API of ElevenLabs provides an endpoint for downloading multiple `HistoryItem`'s as a ZIP file. To download such items, you can pass a `String[]` containing the `HistoryItem` IDs, OR you can provide a `List<HistoryItem>` parameter.
The second parameter is the path in which you would like to save the ZIP file.
```java
History history;
File download = history.downloadHistory(new String[]{"item-id1", "item-id2"}, new File("outputFile.zip"));
File download = history.downloadHistory(List<HistoryItem> historyItems, File outputFile);
File download = history.downloadHistory(new String[]{"item-id1", "item-id2"});
File download = history.downloadHistory(List<HistoryItem> historyItems);
```
### Deleting a HistoryItem
@@ -200,10 +243,10 @@ Voice voice = item.getVoice();
```
### Downloading a HistoryItem Audio
A `HistoryItem` is a previous TTS generation. You can download the generation as an MP3 file by providing the `downloadAudio(File file)` function with the target location for the downloaded file. The return value is the same `File` provided as a parameter.
A `HistoryItem` is a previous TTS generation. You can download the generation as an MP3 file by executing the `downloadAudio()` function. The return value is the tmp `File` location of your download.
```java
HistoryItem item;
File file = item.downloadAudio(File outputFile);
File file = item.downloadAudio();
```
- - -
@@ -214,7 +257,6 @@ A `Subscription` contains all the relevant data to manage your API usage (charac
```java
Subscription subscription = Subscription.get();
```
- - -
### Getting your User
This endpoint will return the `User` associated with a given API key.
@@ -224,77 +266,8 @@ User user = User.get();
- - -
## Exceptions
You'll find most actions that make network requests also will throw `IOException`, `ElevenLabsAPINotInitiatedException`, and `ElevenLabsValidationException`.
*The only function that will make a network request **without throwing an exception is*** `HistoryItem#getVoice()`.
### *ElevenLabsAPINotInitiatedException*
This exception will be thrown if you attempt to use the library without setting an API key.
### *ElevenLabsValidationException*
This error indicates a malformed request to the ElevenLabs API. The exception should provide the location of any syntactically incorrect parameters within the request.
- - -
# Built in Types
There are a few objects and enums defined for this API.
## `Voice` Related Types
```java
Voice(String voiceId, String name, List<Sample> samples, String category,
Map<String, String> labels, String previewUrl, List<String> availableForTiers,
VoiceSettings settings)
```
```java
VoiceSettings(double stability, double similarityBoost)
```
```java
Sample(String sampleId, String fileName, String mimeType, long sizeBytes, String hash)
```
```java
History(List<HistoryItem> history)
```
```java
History.HistoryItem(String historyItemId, String voiceId, String voiceName, String text,
long dateUnix, int characterCountChangeFrom, int characterCountChangeTo,
String contentType, String state)
```
```java
public enum State {
CREATED,
DELETED,
PROCESSING;
}
```
- - -
## `User` Related Types
```java
User(Subscription subscription, boolean isNewUser, String xiApiKey)
```
```java
Subscription(String tier, int characterCount, int characterLimit, boolean canExtendCharacterLimit,
boolean allowedToExtendCharacterLimit, long nextCharacterCountResetUnix, int voiceLimit,
boolean canExtendVoiceLimit, boolean canUseInstantVoiceCloning, List<AvailableModel> availableModels,
String status, NextInvoice nextInvoice)
```
```java
AvailableModel(String modelId, String displayName, List<SupportedLanguage> supportedLanguages)
```
```java
SupportedLanguage(String isoCode, String displayName)
```
```java
NextInvoice(int amountDueCents, long nextPaymentAttemptUnix)
```
```java
public enum Status {
TRIALING,
ACTIVE,
INCOMPLETE,
INCOMPLETE_EXPIRED,
PAST_DUE,
CANCELED,
UNPAID,
FREE;
}
```
- - -
@@ -305,5 +278,16 @@ If you like what you see, give it a star! :)
- - -
## Special Thanks
A special thanks to ElevenLabs for making an awesome tool. Thanks folks 🥂
#### Unit Testing
Unit tests have been created, these endpoints are destructive and not included in the testing:
* deleteHistoryItem - WONT TEST
* deleteSample - WONT TEST
* deleteVoice - WONT TEST
* editVoiceSettings - WONT TEST
* createVoice - WONT TEST
* editVoice - WONT TEST
To run the unit tests yourself, you have to clone this repo and update the ElevenLabsTest.java file with your API key and your voice to test on.
Thanks to ElevenLabs for making an awesome tool 🥂

134
pom.xml
View File

@@ -6,6 +6,7 @@
<name>Unofficial Java ElevenLabs Voice API</name>
<description>An API level interaction between Java and the ElevenLabs Voice Generation Web API.</description>
<url>https://github.com/AndrewCPU/elevenlabs-api</url>
<developers>
<developer>
<id>Andrewcpu</id>
@@ -24,13 +25,46 @@
<tag>HEAD</tag>
</scm>
<profiles>
<profile>
<id>github</id>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
<distributionManagement>
<repository>
<id>github</id>
<name>GitHub AndrewCPU Apache Maven Packages</name>
<url>https://maven.pkg.github.com/AndrewCPU/elevenlabs-api</url>
</repository>
</distributionManagement>
</profile>
<profile>
<id>ossrh</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<distributionManagement>
<repository>
<id>ossrh</id>
<url>https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/</url>
</repository>
<snapshotRepository>
<id>ossrh</id>
<url>https://s01.oss.sonatype.org/content/repositories/projectSnapshots</url>
</snapshotRepository>
</distributionManagement>
</profile>
</profiles>
<groupId>net.andrewcpu</groupId>
<artifactId>elevenlabs-api</artifactId>
<version>1.0-SNAPSHOT</version>
<version>2.2</version>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
@@ -44,15 +78,62 @@
<dependencies>
<dependency>
<groupId>com.googlecode.json-simple</groupId>
<artifactId>json-simple</artifactId>
<version>1.1.1</version>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.4.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.13.4</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.13.4</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>2.0.7</version>
<type>pom</type>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-nop</artifactId>
<version>2.0.7</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents.client5</groupId>
<artifactId>httpclient5</artifactId>
<version>5.2.1</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>elevenlabs-api-${version}</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>1.6</version>
<executions>
<execution>
<id>sign-artifacts</id>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.3.0</version>
@@ -73,6 +154,47 @@
</execution>
</executions>
</plugin>
<!-- Generates JAR's source file -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.2.1</version>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.sonatype.plugins</groupId>
<artifactId>nexus-staging-maven-plugin</artifactId>
<version>1.6.13</version>
<extensions>true</extensions>
<configuration>
<serverId>ossrh</serverId>
<nexusUrl>https://s01.oss.sonatype.org/</nexusUrl>
<autoReleaseAfterClose>true</autoReleaseAfterClose>
</configuration>
</plugin>
<!-- Generates Javadoc JAR file -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.3.0</version>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

@@ -0,0 +1,142 @@
package net.andrewcpu.elevenlabs;
import net.andrewcpu.elevenlabs.enums.GeneratedAudioOutputFormat;
import net.andrewcpu.elevenlabs.enums.StreamLatencyOptimization;
import net.andrewcpu.elevenlabs.model.history.History;
import net.andrewcpu.elevenlabs.model.history.HistoryItem;
import net.andrewcpu.elevenlabs.model.projects.Project;
import net.andrewcpu.elevenlabs.model.request.TextToSpeechRequest;
import net.andrewcpu.elevenlabs.model.response.CreateVoiceResponse;
import net.andrewcpu.elevenlabs.model.response.GenerationTypeModel;
import net.andrewcpu.elevenlabs.model.response.ProjectsModelResponse;
import net.andrewcpu.elevenlabs.model.user.Subscription;
import net.andrewcpu.elevenlabs.model.user.User;
import net.andrewcpu.elevenlabs.model.voice.Voice;
import net.andrewcpu.elevenlabs.model.voice.VoiceSettings;
import net.andrewcpu.elevenlabs.requests.ElevenLabsRequest;
import net.andrewcpu.elevenlabs.requests.history.*;
import net.andrewcpu.elevenlabs.requests.models.GetModelsRequest;
import net.andrewcpu.elevenlabs.requests.projects.GetProjectsRequest;
import net.andrewcpu.elevenlabs.requests.samples.DeleteSampleRequest;
import net.andrewcpu.elevenlabs.requests.samples.GetSampleRequest;
import net.andrewcpu.elevenlabs.requests.tts.PostTextToSpeechRequest;
import net.andrewcpu.elevenlabs.requests.tts.PostTextToSpeechStreamedRequest;
import net.andrewcpu.elevenlabs.requests.user.GetSubscriptionRequest;
import net.andrewcpu.elevenlabs.requests.user.GetUserRequest;
import net.andrewcpu.elevenlabs.requests.voices.*;
import net.andrewcpu.elevenlabs.util.ElevenNetworkUtil;
import java.io.File;
import java.io.InputStream;
import java.util.List;
import java.util.Map;
public class ElevenLabs {
private static String API_KEY = null;
public static String getApiKey() {
return API_KEY;
}
public static void setApiKey(String apiKey) {
API_KEY = apiKey;
}
private static <T> T sendRequest(ElevenLabsRequest<T> request) {
return ElevenNetworkUtil.sendRequest(request.getType(),request.getEndpoint(), request.getPayload(),request.getResponseClass());
}
public static History getHistory() {
return sendRequest(new GetHistoryRequest());
}
public static User getUser() {
return sendRequest(new GetUserRequest());
}
public static Subscription getSubscription() {
return sendRequest(new GetSubscriptionRequest());
}
public static HistoryItem getHistoryItem(String historyItemId) {
return sendRequest(new GetHistoryItemByIdRequest(historyItemId));
}
public static String deleteHistoryItem(String historyItemId) {
return sendRequest(new DeleteHistoryItemRequest(historyItemId));
}
public static File getHistoryItemAudio(String historyItemId) {
return sendRequest(new GetHistoryItemAudioRequest(historyItemId));
}
public static File getHistoryItemAudio(String... historyItemIds) {
return sendRequest(new PostDownloadHistoryItemsRequest(historyItemIds));
}
public static String deleteSample(String voiceId, String sampleId) {
return sendRequest(new DeleteSampleRequest(voiceId, sampleId));
}
public static File getAudioSample(String voiceId, String sampleId) {
return sendRequest(new GetSampleRequest(voiceId, sampleId));
}
public static List<Voice> getVoices() {
return sendRequest(new GetVoicesRequest()).getVoices();
}
public static VoiceSettings getDefaultVoiceSettings() {
return sendRequest(new GetDefaultVoiceSettingsRequest());
}
public static VoiceSettings getVoiceSettings(String voiceId) {
return sendRequest(new GetVoiceSettingsRequest(voiceId));
}
public static Voice getVoice(String voiceId) {
return sendRequest(new GetVoiceRequest(voiceId));
}
public static Voice getVoice(String voiceId, boolean withSettings) {
return sendRequest(new GetVoiceRequest(voiceId, withSettings));
}
public static ProjectsModelResponse getProjects() {
return sendRequest(new GetProjectsRequest());
}
public static String deleteVoice(String voiceId) {
return sendRequest(new DeleteVoiceRequest(voiceId));
}
public static String editVoiceSettings(String voiceId, VoiceSettings settings) {
return sendRequest(new PostEditVoiceSettingsRequest(voiceId, settings));
}
public static CreateVoiceResponse createVoice(String name, File[] files, String description, Map<String, String> labels) {
return sendRequest(new PostAddVoiceRequest(name, files, description, labels));
}
public static String editVoice(String voiceId, String name, File[] files, String description, Map<String, String> labels) {
return sendRequest(new PostEditVoiceRequest(voiceId, name, files, description, labels));
}
public static GenerationTypeModel[] getAvailableModels() {
return sendRequest(new GetModelsRequest());
}
public static File generateTextToSpeech(String voiceId, String text, String modelId, VoiceSettings voiceSettings) {
return sendRequest(new PostTextToSpeechRequest(voiceId, new TextToSpeechRequest(text, modelId, voiceSettings)));
}
public static File generateTextToSpeech(String voiceId, String text, String modelId, GeneratedAudioOutputFormat outputFormat, StreamLatencyOptimization streamLatencyOptimization, VoiceSettings voiceSettings) {
return sendRequest(new PostTextToSpeechRequest(voiceId, new TextToSpeechRequest(text, modelId, voiceSettings), streamLatencyOptimization, outputFormat));
}
public static InputStream generateTextToSpeechStreamed(String voiceId, String text, String modelId, GeneratedAudioOutputFormat outputFormat, StreamLatencyOptimization streamLatencyOptimization, VoiceSettings voiceSettings) {
return sendRequest(new PostTextToSpeechStreamedRequest(voiceId, new TextToSpeechRequest(text, modelId, voiceSettings), streamLatencyOptimization, outputFormat));
}
public static InputStream generateTextToSpeechStreamed(String voiceId, String text, String modelId, VoiceSettings voiceSettings) {
return sendRequest(new PostTextToSpeechStreamedRequest(voiceId, new TextToSpeechRequest(text, modelId, voiceSettings)));
}
}

View File

@@ -1,257 +0,0 @@
package net.andrewcpu.elevenlabs;
import net.andrewcpu.elevenlabs.api.ElevenLabsRequest;
import net.andrewcpu.elevenlabs.api.ElevenLabsResponse;
import net.andrewcpu.elevenlabs.api.multipart.MultipartFile;
import net.andrewcpu.elevenlabs.api.multipart.MultipartFormContent;
import net.andrewcpu.elevenlabs.api.requests.history.DeleteHistoryItemRequest;
import net.andrewcpu.elevenlabs.api.requests.history.DownloadHistoryRequest;
import net.andrewcpu.elevenlabs.api.requests.history.GetHistoryAudioRequest;
import net.andrewcpu.elevenlabs.api.requests.history.GetHistoryRequest;
import net.andrewcpu.elevenlabs.api.requests.samples.DeleteSampleRequest;
import net.andrewcpu.elevenlabs.api.requests.samples.GetAudioSampleRequest;
import net.andrewcpu.elevenlabs.api.requests.user.GetSubscriptionInfoRequest;
import net.andrewcpu.elevenlabs.api.requests.user.GetUserRequest;
import net.andrewcpu.elevenlabs.api.requests.voices.*;
import net.andrewcpu.elevenlabs.elements.user.Subscription;
import net.andrewcpu.elevenlabs.elements.user.User;
import net.andrewcpu.elevenlabs.elements.voice.History;
import net.andrewcpu.elevenlabs.elements.voice.Sample;
import net.andrewcpu.elevenlabs.elements.voice.Voice;
import net.andrewcpu.elevenlabs.elements.voice.VoiceSettings;
import net.andrewcpu.elevenlabs.enums.ContentType;
import net.andrewcpu.elevenlabs.exceptions.ElevenLabsAPINotInitiatedException;
import net.andrewcpu.elevenlabs.exceptions.ElevenLabsValidationException;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.ProtocolException;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Map;
import static net.andrewcpu.elevenlabs.util.MultipartUtil.addFilePart;
import static net.andrewcpu.elevenlabs.util.MultipartUtil.addFormField;
@SuppressWarnings({"unchecked", "UnusedReturnValue"})
public class ElevenLabsAPI {
private static ElevenLabsAPI instance;
private static final String baseURL = "https://api.elevenlabs.io/";
private static boolean debugMode = false;
public static boolean isDebugMode() {
return debugMode;
}
public static void setDebugMode(boolean enabled){
debugMode = enabled;
}
public static ElevenLabsAPI getInstance() {
if (instance == null) {
instance = new ElevenLabsAPI();
}
return instance;
}
private boolean instantiated;
private String apiKey;
public ElevenLabsAPI() {
instantiated = false;
}
public void setAPIKey(String apiKey) {
instantiated = true;
this.apiKey = apiKey;
}
public Subscription getSubscription() throws IOException, ElevenLabsValidationException, ElevenLabsAPINotInitiatedException {
return (Subscription) getResult(new GetSubscriptionInfoRequest());
}
public User getUser() throws IOException, ElevenLabsValidationException, ElevenLabsAPINotInitiatedException {
return (User) getResult(new GetUserRequest());
}
public File getTextToSpeech(String text, Voice voice, VoiceSettings settings, File outputFile) throws IOException, ElevenLabsValidationException, ElevenLabsAPINotInitiatedException {
return (File)getResult(new GetTextToSpeechRequest(voice, settings, text, outputFile));
}
public List<Voice> getVoices() throws ElevenLabsValidationException, IOException, ElevenLabsAPINotInitiatedException {
return (List<Voice>) getResult(new GetVoicesRequest());
}
public Voice getVoice(String voiceId, boolean withSettings) throws ElevenLabsValidationException, IOException, ElevenLabsAPINotInitiatedException {
return (Voice)getResult(new GetVoiceRequest(voiceId, withSettings));
}
public Voice getVoice(String voiceId) throws ElevenLabsValidationException, IOException, ElevenLabsAPINotInitiatedException {
return getVoice(voiceId, true);
}
public VoiceSettings getVoiceSettings(String voiceId) throws IOException, ElevenLabsValidationException, ElevenLabsAPINotInitiatedException {
return (VoiceSettings) getResult(new GetVoiceSettingsRequest(voiceId));
}
public VoiceSettings getVoiceSettings(Voice voice) throws IOException, ElevenLabsValidationException, ElevenLabsAPINotInitiatedException {
return getVoiceSettings(voice.getVoiceId());
}
public String deleteVoice(Voice voice) throws IOException, ElevenLabsValidationException, ElevenLabsAPINotInitiatedException {
return deleteVoice(voice.getVoiceId());
}
public String deleteVoice(String voiceId) throws IOException, ElevenLabsValidationException, ElevenLabsAPINotInitiatedException {
return (String)getResult(new DeleteVoiceRequest(voiceId));
}
public String editVoice(Voice voice, VoiceSettings voiceSettings) throws IOException, ElevenLabsValidationException, ElevenLabsAPINotInitiatedException {
return editVoice(voice.getVoiceId(), voiceSettings);
}
public String editVoice(String voiceId, VoiceSettings settings) throws IOException, ElevenLabsValidationException, ElevenLabsAPINotInitiatedException {
return (String)getResult(new UpdateVoiceSettingsRequest(voiceId, settings));
}
public String deleteSample(String voiceId, String sampleId) throws IOException, ElevenLabsValidationException, ElevenLabsAPINotInitiatedException {
return (String)getResult(new DeleteSampleRequest(voiceId, sampleId));
}
public String deleteSample(Voice voice, String sampleId) throws IOException, ElevenLabsValidationException, ElevenLabsAPINotInitiatedException {
return deleteSample(voice.getVoiceId(), sampleId);
}
public String deleteSample(String voiceId, Sample sample) throws IOException, ElevenLabsValidationException, ElevenLabsAPINotInitiatedException {
return deleteSample(voiceId, sample.getSampleId());
}
public String deleteSample(Voice voice, Sample sample) throws IOException, ElevenLabsValidationException, ElevenLabsAPINotInitiatedException {
return deleteSample(voice.getVoiceId(), sample.getSampleId());
}
public File getSampleAudio(String voiceId, String sampleId, File file) throws IOException, ElevenLabsValidationException, ElevenLabsAPINotInitiatedException {
return (File)getResult(new GetAudioSampleRequest(voiceId, sampleId, file));
}
public File getSampleAudio(Voice voice, Sample sample, File file) throws IOException, ElevenLabsValidationException, ElevenLabsAPINotInitiatedException {
return getSampleAudio(voice.getVoiceId(), sample.getSampleId(), file);
}
public History getHistory() throws IOException, ElevenLabsValidationException, ElevenLabsAPINotInitiatedException {
return (History)getResult(new GetHistoryRequest());
}
public File downloadHistory(List<String> historyIds, File outputFile) throws IOException, ElevenLabsValidationException, ElevenLabsAPINotInitiatedException {
return (File)getResult(new DownloadHistoryRequest(historyIds, outputFile));
}
public File getHistoryItemAudio(History.HistoryItem historyItem, File outputFile) throws IOException, ElevenLabsValidationException, ElevenLabsAPINotInitiatedException {
return (File)getResult(new GetHistoryAudioRequest(historyItem.getHistoryItemId(), outputFile));
}
public String deleteHistoryItem(History.HistoryItem historyItem) throws IOException, ElevenLabsValidationException, ElevenLabsAPINotInitiatedException {
return (String)getResult(new DeleteHistoryItemRequest(historyItem.getHistoryItemId()));
}
public VoiceSettings getDefaultVoiceSettings() throws IOException, ElevenLabsValidationException, ElevenLabsAPINotInitiatedException {
return (VoiceSettings)getResult(new GetDefaultVoiceSettingsRequest());
}
public String createVoice(String name, Map<String, String> labels, List<File> files) throws ElevenLabsValidationException, IOException, ElevenLabsAPINotInitiatedException {
CreateVoiceRequest request = new CreateVoiceRequest(name, files, labels);
return (String)(getResult(request));
}
@SuppressWarnings("UnusedReturnValue")
public String editVoice(String voiceId, String name, Map<String, String> labels, List<File> files) throws ElevenLabsValidationException, IOException, ElevenLabsAPINotInitiatedException {
EditVoiceRequest editVoiceRequest = new EditVoiceRequest(voiceId,name,files,labels);
return (String)(getResult(editVoiceRequest));
}
private void checkOrThrow(ElevenLabsResponse<?> response) throws ElevenLabsValidationException {
if(response == null){
throw new ElevenLabsValidationException("An error has occurred.");
}
if(!response.isSuccessful()){
throw response.getException();
}
}
private Object getResult(ElevenLabsRequest<?> request) throws ElevenLabsValidationException, IOException, ElevenLabsAPINotInitiatedException {
ElevenLabsResponse<?> response = sendRequest(request);
checkOrThrow(response);
return response.getResult();
}
private ElevenLabsResponse<?> sendRequest(ElevenLabsRequest<?> request) throws IOException, ElevenLabsAPINotInitiatedException {
if(!instantiated){
throw new ElevenLabsAPINotInitiatedException();
}
String formattedEndpoint = request.getFormattedEndpoint();
String boundary = "---------------------------" + System.currentTimeMillis();
URL url = new URL(baseURL + formattedEndpoint);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
setupConnection(request, boundary, connection);
if(request.getContentType() == ContentType.JSON){
handleJSON(request, connection);
}
else if(request.getContentType() == ContentType.MULTIPART){
handleMultipart(request, connection, boundary);
}
int responseCode = 999;
try {
responseCode = connection.getResponseCode();
} catch (IOException e) {
e.printStackTrace();
}
InputStream successStream = null,
errorStream = null;
if (responseCode >= 200 && responseCode < 300) {
successStream = connection.getInputStream();
} else {
errorStream = connection.getErrorStream();
}
return new ElevenLabsResponse<>(responseCode, errorStream, successStream, request);
}
private void setupConnection(ElevenLabsRequest<?> request, String boundary, HttpURLConnection connection) throws ProtocolException {
connection.setConnectTimeout(60000);
connection.setReadTimeout(60000);
connection.setRequestMethod(request.getMethod().name());
String contType = request.getContentType().getType();
if(request.getContentType() == ContentType.MULTIPART){
contType += "; boundary=" + boundary;
}
connection.setRequestProperty("xi-api-key", apiKey);
connection.setRequestProperty("Content-Type", contType); // this can be done better.
connection.setDoOutput(true);
}
private static void handleJSON(ElevenLabsRequest<?> request, HttpURLConnection connection) throws IOException {
if (request.getBody() != null) {
connection.getOutputStream().write(request.getBody().toJSONString().getBytes(StandardCharsets.UTF_8));
}
}
private static void handleMultipart(ElevenLabsRequest<?> request, HttpURLConnection connection, String boundary) throws IOException {
for(MultipartFormContent item : request.getMultipartForm().getItems()){
if(item instanceof MultipartFile multipartFile){
addFilePart(multipartFile.getName(),multipartFile.getFilename(), multipartFile.getFile(), boundary, connection);
}
else{
addFormField(item.getName(), item.getValue(), boundary, connection);
}
}
String footer = "--" + boundary + "--\r\n";
connection.getOutputStream().write(footer.getBytes(StandardCharsets.UTF_8));
connection.getOutputStream().flush();
connection.getOutputStream().close();
}
}

View File

@@ -1,101 +0,0 @@
package net.andrewcpu.elevenlabs.api;
import net.andrewcpu.elevenlabs.api.multipart.MultipartForm;
import net.andrewcpu.elevenlabs.api.transformers.ResultTransformer;
import net.andrewcpu.elevenlabs.enums.ContentType;
import net.andrewcpu.elevenlabs.enums.HTTPMethod;
import net.andrewcpu.elevenlabs.enums.ResponseType;
import org.json.simple.JSONObject;
import java.io.File;
import java.util.List;
public abstract class ElevenLabsRequest<T> {
protected List<String> parameters;
protected final HTTPMethod method;
protected ResultTransformer<T> resultTransformer;
protected JSONObject body;
protected ResponseType responseType = ResponseType.JSON;
protected File outputFilePath;
protected ContentType contentType = ContentType.JSON;
protected MultipartForm multipartForm;
public ElevenLabsRequest(List<String> parameters, JSONObject body, HTTPMethod method, ResultTransformer<T> resultTransformer) {
this.method = method;
this.parameters = parameters;
this.body = body;
this.resultTransformer = resultTransformer;
}
public ElevenLabsRequest(JSONObject body, HTTPMethod method) {
this.body = body;
this.method = method;
}
public ElevenLabsRequest(List<String> parameters, HTTPMethod method) {
this.parameters = parameters;
this.method = method;
}
public ElevenLabsRequest(List<String> parameters, HTTPMethod method, ResultTransformer<T> resultTransformer) {
this.parameters = parameters;
this.method = method;
this.resultTransformer = resultTransformer;
}
public ElevenLabsRequest(HTTPMethod method) {
this.method = method;
}
public ElevenLabsRequest(HTTPMethod method, ResultTransformer<T> resultTransformer) {
this.method = method;
this.resultTransformer = resultTransformer;
}
public abstract String getEndpoint();
public MultipartForm getMultipartForm() {
return multipartForm;
}
public ContentType getContentType() {
return contentType;
}
public HTTPMethod getMethod() {
return method;
}
public File getOutputFilePath() {
return outputFilePath;
}
public ResultTransformer<T> getResultTransformer() {
return resultTransformer;
}
public String getFormattedEndpoint(){
String endpoint = getEndpoint();
if(endpoint.startsWith("/")){
endpoint = endpoint.substring(1);
}
if(parameters != null && parameters.size() > 0){
return endpoint.formatted(parameters.toArray());
}
return endpoint;
}
public JSONObject getBody() {
return body;
}
public ResponseType getResponseType() {
return responseType;
}
}

View File

@@ -1,89 +0,0 @@
package net.andrewcpu.elevenlabs.api;
import net.andrewcpu.elevenlabs.enums.ResponseType;
import net.andrewcpu.elevenlabs.exceptions.ElevenLabsExceptionBuilder;
import net.andrewcpu.elevenlabs.exceptions.ElevenLabsValidationException;
import net.andrewcpu.elevenlabs.util.DebugLogger;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.charset.StandardCharsets;
public class ElevenLabsResponse<T> {
private final int responseCode;
private final InputStream errorStream;
private final InputStream successStream;
private final ElevenLabsRequest<T> request;
private JSONObject successful;
private JSONObject error;
private T resultingObject;
public ElevenLabsResponse(int responseCode, InputStream errorStream, InputStream successStream, ElevenLabsRequest<T> request) {
this.responseCode = responseCode;
this.errorStream = errorStream;
this.successStream = successStream;
this.request = request;
try {
_buildObjects();
} catch (IOException | ParseException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
private void _buildObjects() throws IOException, ParseException {
if(isSuccessful()){
if(request.getResponseType() == ResponseType.JSON){
String responseBody = new String(successStream.readAllBytes(), StandardCharsets.UTF_8);
DebugLogger.log(getClass(), responseBody);
JSONObject object = ((JSONObject) new JSONParser().parse(responseBody));
this.successful = object;
resultingObject = request.getResultTransformer().transform(object);
}
else if(request.getResponseType() == ResponseType.FILE_STREAM){
try (InputStream inputStream = successStream) {
byte[] buffer = new byte[4096];
int bytesRead;
try (OutputStream outputStream = new FileOutputStream(request.getOutputFilePath())) {
while ((bytesRead = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
}
}
resultingObject = request.getResultTransformer().transform();
}
else if(request.getResponseType() == ResponseType.STRING){
String responseBody = new String(successStream.readAllBytes(), StandardCharsets.UTF_8);
DebugLogger.log(getClass(), responseBody);
resultingObject = request.getResultTransformer().transform(responseBody);
}
}
else{
String responseBody = new String(errorStream.readAllBytes(), StandardCharsets.UTF_8);
DebugLogger.log(getClass(), responseBody);
this.error = ((JSONObject) new JSONParser().parse(responseBody));
}
}
public ElevenLabsValidationException getException() {
return ElevenLabsExceptionBuilder.build(this.error);
}
public T getResult() {
return resultingObject;
}
public JSONObject getResultJSON() {
return successful;
}
public boolean isSuccessful() {
return responseCode >= 200 && responseCode < 300;
}
}

View File

@@ -1,15 +0,0 @@
package net.andrewcpu.elevenlabs.api.multipart;
import java.io.File;
public class MultipartFile extends MultipartFormContent {
private final File file;
public MultipartFile(String name, File file) {
super(name, file);
this.file = file;
}
public File getFile() {
return file;
}
}

View File

@@ -1,21 +0,0 @@
package net.andrewcpu.elevenlabs.api.multipart;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class MultipartForm {
private final List<MultipartFormContent> items;
public MultipartForm() {
items = new ArrayList<>();
}
public List<MultipartFormContent> getItems() {
return items;
}
public void push(MultipartFormContent... formContent) {
items.addAll(Arrays.asList(formContent));
}
}

View File

@@ -1,35 +0,0 @@
package net.andrewcpu.elevenlabs.api.multipart;
import java.io.File;
public class MultipartFormContent {
private final String name;
private final String filename;
private final String value;
public MultipartFormContent(String name, File file) {
this.name = name;
this.filename = file.getName();
this.value = null;
}
public MultipartFormContent(String name, String value) {
this.name = name;
this.value = value;
this.filename = null;
}
public String getName() {
return name;
}
public String getFilename() {
return filename;
}
public String getValue() {
return value;
}
}

View File

@@ -1,20 +0,0 @@
package net.andrewcpu.elevenlabs.api.requests.history;
import net.andrewcpu.elevenlabs.api.ElevenLabsRequest;
import net.andrewcpu.elevenlabs.api.transformers.StringPingPongTransformer;
import net.andrewcpu.elevenlabs.enums.HTTPMethod;
import net.andrewcpu.elevenlabs.enums.ResponseType;
import java.util.List;
public class DeleteHistoryItemRequest extends ElevenLabsRequest<String> {
public DeleteHistoryItemRequest(String historyId) {
super(List.of(historyId), null, HTTPMethod.DELETE, new StringPingPongTransformer());
responseType = (ResponseType.STRING);
}
@Override
public String getEndpoint() {
return "v1/history/%s";
}
}

View File

@@ -1,32 +0,0 @@
package net.andrewcpu.elevenlabs.api.requests.history;
import net.andrewcpu.elevenlabs.api.ElevenLabsRequest;
import net.andrewcpu.elevenlabs.api.transformers.FilePingPongTransformer;
import net.andrewcpu.elevenlabs.enums.HTTPMethod;
import net.andrewcpu.elevenlabs.enums.ResponseType;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import java.io.File;
import java.util.List;
@SuppressWarnings("unchecked")
public class DownloadHistoryRequest extends ElevenLabsRequest<File> {
private static JSONObject getBody(List<String> historyIds) {
JSONObject object = new JSONObject();
JSONArray array = new JSONArray();
array.addAll(historyIds);
object.put("history_item_ids", array);
return object;
}
public DownloadHistoryRequest(List<String> historyIds, File outputFile) {
super(null, getBody(historyIds), HTTPMethod.POST, new FilePingPongTransformer(outputFile));
responseType = (ResponseType.FILE_STREAM);
outputFilePath = (outputFile);
}
@Override
public String getEndpoint() {
return "v1/history/download";
}
}

View File

@@ -1,22 +0,0 @@
package net.andrewcpu.elevenlabs.api.requests.history;
import net.andrewcpu.elevenlabs.api.ElevenLabsRequest;
import net.andrewcpu.elevenlabs.api.transformers.FilePingPongTransformer;
import net.andrewcpu.elevenlabs.enums.HTTPMethod;
import net.andrewcpu.elevenlabs.enums.ResponseType;
import java.io.File;
import java.util.List;
public class GetHistoryAudioRequest extends ElevenLabsRequest<File> {
public GetHistoryAudioRequest(String historyId, File outputFile) {
super(List.of(historyId), null, HTTPMethod.GET, new FilePingPongTransformer(outputFile));
responseType = (ResponseType.FILE_STREAM);
outputFilePath = (outputFile);
}
@Override
public String getEndpoint() {
return "v1/history/%s/audio";
}
}

View File

@@ -1,17 +0,0 @@
package net.andrewcpu.elevenlabs.api.requests.history;
import net.andrewcpu.elevenlabs.api.ElevenLabsRequest;
import net.andrewcpu.elevenlabs.api.transformers.obj.HistoryTransformer;
import net.andrewcpu.elevenlabs.elements.voice.History;
import net.andrewcpu.elevenlabs.enums.HTTPMethod;
public class GetHistoryRequest extends ElevenLabsRequest<History> {
public GetHistoryRequest() {
super(HTTPMethod.GET, new HistoryTransformer());
}
@Override
public String getEndpoint() {
return "v1/history";
}
}

View File

@@ -1,20 +0,0 @@
package net.andrewcpu.elevenlabs.api.requests.samples;
import net.andrewcpu.elevenlabs.api.ElevenLabsRequest;
import net.andrewcpu.elevenlabs.api.transformers.StringPingPongTransformer;
import net.andrewcpu.elevenlabs.enums.HTTPMethod;
import net.andrewcpu.elevenlabs.enums.ResponseType;
import java.util.List;
public class DeleteSampleRequest extends ElevenLabsRequest<String> {
public DeleteSampleRequest(String voiceId, String sampleId) {
super(List.of(voiceId, sampleId), null, HTTPMethod.DELETE, new StringPingPongTransformer());
responseType = (ResponseType.STRING);
}
@Override
public String getEndpoint() {
return "v1/voices/%s/samples/%s";
}
}

View File

@@ -1,22 +0,0 @@
package net.andrewcpu.elevenlabs.api.requests.samples;
import net.andrewcpu.elevenlabs.api.ElevenLabsRequest;
import net.andrewcpu.elevenlabs.api.transformers.FilePingPongTransformer;
import net.andrewcpu.elevenlabs.enums.HTTPMethod;
import net.andrewcpu.elevenlabs.enums.ResponseType;
import java.io.File;
import java.util.List;
public class GetAudioSampleRequest extends ElevenLabsRequest<File> {
public GetAudioSampleRequest(String voiceId, String sampleId, File outputFile) {
super(List.of(voiceId, sampleId), null, HTTPMethod.GET, new FilePingPongTransformer(outputFile));
responseType = (ResponseType.FILE_STREAM);
outputFilePath = (outputFile);
}
@Override
public String getEndpoint() {
return "v1/voices/%s/samples/%s/audio";
}
}

View File

@@ -1,17 +0,0 @@
package net.andrewcpu.elevenlabs.api.requests.user;
import net.andrewcpu.elevenlabs.api.ElevenLabsRequest;
import net.andrewcpu.elevenlabs.api.transformers.obj.SubscriptionTransformer;
import net.andrewcpu.elevenlabs.elements.user.Subscription;
import net.andrewcpu.elevenlabs.enums.HTTPMethod;
public class GetSubscriptionInfoRequest extends ElevenLabsRequest<Subscription> {
public GetSubscriptionInfoRequest() {
super(HTTPMethod.GET, new SubscriptionTransformer());
}
@Override
public String getEndpoint() {
return "v1/user/subscription";
}
}

View File

@@ -1,17 +0,0 @@
package net.andrewcpu.elevenlabs.api.requests.user;
import net.andrewcpu.elevenlabs.api.ElevenLabsRequest;
import net.andrewcpu.elevenlabs.api.transformers.obj.UserTransformer;
import net.andrewcpu.elevenlabs.elements.user.User;
import net.andrewcpu.elevenlabs.enums.HTTPMethod;
public class GetUserRequest extends ElevenLabsRequest<User> {
public GetUserRequest() {
super(HTTPMethod.GET, new UserTransformer());
}
@Override
public String getEndpoint() {
return "v1/user";
}
}

View File

@@ -1,59 +0,0 @@
package net.andrewcpu.elevenlabs.api.requests.voices;
import net.andrewcpu.elevenlabs.api.ElevenLabsRequest;
import net.andrewcpu.elevenlabs.api.multipart.MultipartFile;
import net.andrewcpu.elevenlabs.api.multipart.MultipartForm;
import net.andrewcpu.elevenlabs.api.multipart.MultipartFormContent;
import net.andrewcpu.elevenlabs.api.transformers.ResultTransformer;
import net.andrewcpu.elevenlabs.api.transformers.ResultTransformerAdapter;
import net.andrewcpu.elevenlabs.enums.ContentType;
import net.andrewcpu.elevenlabs.enums.HTTPMethod;
import org.json.simple.JSONObject;
import java.io.File;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Map;
@SuppressWarnings("unchecked")
public class CreateVoiceRequest extends ElevenLabsRequest<String> {
private static final ResultTransformer<String> transformer = new ResultTransformerAdapter<>(){
@Override
public String transform(JSONObject object) {
return object.get("voice_id").toString();
}
};
public CreateVoiceRequest(String name, List<File> files, Map<String, String> labels) {
super(HTTPMethod.POST, transformer);
buildBody(name, files, labels);
}
public CreateVoiceRequest(List<String> parameters, String name, List<File> files, Map<String, String> labels) {
super(parameters, HTTPMethod.POST, transformer);
buildBody(name, files, labels);
}
private void buildBody(String name, List<File> files, Map<String, String> labels){
this.contentType = ContentType.MULTIPART;
this.multipartForm = new MultipartForm();
JSONObject val = new JSONObject();
if(labels != null && labels.size() != 0){
for(String key : labels.keySet()){
val.put(key, labels.get(key));
}
}
MultipartFormContent nameMultipart = new MultipartFormContent("name", URLEncoder.encode(name, StandardCharsets.UTF_8));
MultipartFormContent labelsMultipart = new MultipartFormContent("labels", val.toJSONString());
this.multipartForm.push(nameMultipart, labelsMultipart);
for(File file : files){
this.multipartForm.push(new MultipartFile("files", file));
}
}
@Override
public String getEndpoint() {
return "v1/voices/add";
}
}

View File

@@ -1,18 +0,0 @@
package net.andrewcpu.elevenlabs.api.requests.voices;
import net.andrewcpu.elevenlabs.api.ElevenLabsRequest;
import net.andrewcpu.elevenlabs.api.transformers.StringPingPongTransformer;
import net.andrewcpu.elevenlabs.enums.HTTPMethod;
import java.util.List;
public class DeleteVoiceRequest extends ElevenLabsRequest<String> {
public DeleteVoiceRequest(String voiceId) {
super(List.of(voiceId), HTTPMethod.DELETE, new StringPingPongTransformer());
}
@Override
public String getEndpoint() {
return "/v1/voices/%s";
}
}

View File

@@ -1,16 +0,0 @@
package net.andrewcpu.elevenlabs.api.requests.voices;
import java.io.File;
import java.util.List;
import java.util.Map;
public class EditVoiceRequest extends CreateVoiceRequest{
public EditVoiceRequest(String voiceId, String name, List<File> files, Map<String, String> labels) {
super(List.of(voiceId), name, files, labels);
}
@Override
public String getEndpoint() {
return "v1/voices/%s/edit";
}
}

View File

@@ -1,17 +0,0 @@
package net.andrewcpu.elevenlabs.api.requests.voices;
import net.andrewcpu.elevenlabs.api.ElevenLabsRequest;
import net.andrewcpu.elevenlabs.api.transformers.obj.VoiceSettingTransformer;
import net.andrewcpu.elevenlabs.elements.voice.VoiceSettings;
import net.andrewcpu.elevenlabs.enums.HTTPMethod;
public class GetDefaultVoiceSettingsRequest extends ElevenLabsRequest<VoiceSettings> {
public GetDefaultVoiceSettingsRequest() {
super(HTTPMethod.GET, new VoiceSettingTransformer());
}
@Override
public String getEndpoint() {
return "v1/voices/settings/default";
}
}

View File

@@ -1,33 +0,0 @@
package net.andrewcpu.elevenlabs.api.requests.voices;
import net.andrewcpu.elevenlabs.api.ElevenLabsRequest;
import net.andrewcpu.elevenlabs.api.transformers.FilePingPongTransformer;
import net.andrewcpu.elevenlabs.elements.voice.Voice;
import net.andrewcpu.elevenlabs.elements.voice.VoiceSettings;
import net.andrewcpu.elevenlabs.enums.HTTPMethod;
import net.andrewcpu.elevenlabs.enums.ResponseType;
import org.json.simple.JSONObject;
import java.io.File;
import java.util.List;
@SuppressWarnings("unchecked")
public class GetTextToSpeechRequest extends ElevenLabsRequest<File> {
private static JSONObject buildBody(VoiceSettings settings, String text){
JSONObject object = new JSONObject();
object.put("text", text);
object.put("voice_settings", settings.toJSON());
return object;
}
public GetTextToSpeechRequest(Voice voice, VoiceSettings settings, String text, File outputFile){
super(List.of(voice.getVoiceId()), buildBody(settings, text), HTTPMethod.POST, new FilePingPongTransformer(outputFile));
responseType = (ResponseType.FILE_STREAM);
outputFilePath = (outputFile);
}
@Override
public String getEndpoint() {
return "v1/text-to-speech/%s";
}
}

View File

@@ -1,19 +0,0 @@
package net.andrewcpu.elevenlabs.api.requests.voices;
import net.andrewcpu.elevenlabs.api.ElevenLabsRequest;
import net.andrewcpu.elevenlabs.api.transformers.obj.VoiceTransformer;
import net.andrewcpu.elevenlabs.elements.voice.Voice;
import net.andrewcpu.elevenlabs.enums.HTTPMethod;
import java.util.List;
public class GetVoiceRequest extends ElevenLabsRequest<Voice> {
public GetVoiceRequest(String voiceId, boolean withSettings) {
super(List.of(voiceId, String.valueOf(withSettings)), HTTPMethod.GET, new VoiceTransformer());
}
@Override
public String getEndpoint() {
return "v1/voices/%s?with_settings=%s";
}
}

View File

@@ -1,19 +0,0 @@
package net.andrewcpu.elevenlabs.api.requests.voices;
import net.andrewcpu.elevenlabs.api.ElevenLabsRequest;
import net.andrewcpu.elevenlabs.api.transformers.obj.VoiceSettingTransformer;
import net.andrewcpu.elevenlabs.elements.voice.VoiceSettings;
import net.andrewcpu.elevenlabs.enums.HTTPMethod;
import java.util.List;
public class GetVoiceSettingsRequest extends ElevenLabsRequest<VoiceSettings> {
public GetVoiceSettingsRequest(String voiceId) {
super(List.of(voiceId), HTTPMethod.GET, new VoiceSettingTransformer());
}
@Override
public String getEndpoint() {
return "v1/voices/%s/settings";
}
}

View File

@@ -1,19 +0,0 @@
package net.andrewcpu.elevenlabs.api.requests.voices;
import net.andrewcpu.elevenlabs.api.ElevenLabsRequest;
import net.andrewcpu.elevenlabs.api.transformers.obj.VoiceListTransformer;
import net.andrewcpu.elevenlabs.elements.voice.Voice;
import net.andrewcpu.elevenlabs.enums.HTTPMethod;
import java.util.List;
public class GetVoicesRequest extends ElevenLabsRequest<List<Voice>> {
public GetVoicesRequest() {
super(HTTPMethod.GET, new VoiceListTransformer());
}
@Override
public String getEndpoint() {
return "v1/voices";
}
}

View File

@@ -1,20 +0,0 @@
package net.andrewcpu.elevenlabs.api.requests.voices;
import net.andrewcpu.elevenlabs.api.transformers.StringPingPongTransformer;
import net.andrewcpu.elevenlabs.elements.voice.VoiceSettings;
import net.andrewcpu.elevenlabs.api.ElevenLabsRequest;
import net.andrewcpu.elevenlabs.enums.HTTPMethod;
import java.util.List;
public class UpdateVoiceSettingsRequest extends ElevenLabsRequest<String> {
public UpdateVoiceSettingsRequest(String voiceId, VoiceSettings settings){
super(List.of(voiceId), settings.toJSON(), HTTPMethod.POST, new StringPingPongTransformer());
}
@Override
public String getEndpoint() {
return "v1/voices/%s/settings/edit";
}
}

View File

@@ -1,19 +0,0 @@
package net.andrewcpu.elevenlabs.api.transformers;
import net.andrewcpu.elevenlabs.util.DebugLogger;
import java.io.File;
public class FilePingPongTransformer extends ResultTransformerAdapter<File> {
private final File file;
public FilePingPongTransformer(File file) {
this.file = file;
}
@Override
public File transform() {
DebugLogger.log(getClass(), file.getAbsolutePath());
return file;
}
}

View File

@@ -1,9 +0,0 @@
package net.andrewcpu.elevenlabs.api.transformers;
import org.json.simple.JSONObject;
public abstract class ResultTransformer<T> {
public abstract T transform(JSONObject object);
public abstract T transform(String object);
public abstract T transform();
}

View File

@@ -1,21 +0,0 @@
package net.andrewcpu.elevenlabs.api.transformers;
import org.json.simple.JSONObject;
public class ResultTransformerAdapter<T> extends ResultTransformer<T> {
@Override
public T transform(JSONObject object) {
throw new UnsupportedOperationException("transform(JSONObject object) is not defined.");
}
@Override
public T transform(String object) {
throw new UnsupportedOperationException("transform(String object) is not defined.");
}
@Override
public T transform() {
throw new UnsupportedOperationException("transform() is not defined.");
}
}

View File

@@ -1,11 +0,0 @@
package net.andrewcpu.elevenlabs.api.transformers;
import net.andrewcpu.elevenlabs.util.DebugLogger;
public class StringPingPongTransformer extends ResultTransformerAdapter<String> {
@Override
public String transform(String object) {
DebugLogger.log(getClass(),object);
return object;
}
}

View File

@@ -1,12 +0,0 @@
package net.andrewcpu.elevenlabs.api.transformers.obj;
import net.andrewcpu.elevenlabs.api.transformers.ResultTransformerAdapter;
import net.andrewcpu.elevenlabs.elements.voice.History;
import org.json.simple.JSONObject;
public class HistoryTransformer extends ResultTransformerAdapter<History> {
@Override
public History transform(JSONObject object) {
return History.fromJSON(object);
}
}

View File

@@ -1,12 +0,0 @@
package net.andrewcpu.elevenlabs.api.transformers.obj;
import net.andrewcpu.elevenlabs.api.transformers.ResultTransformerAdapter;
import net.andrewcpu.elevenlabs.elements.user.Subscription;
import org.json.simple.JSONObject;
public class SubscriptionTransformer extends ResultTransformerAdapter<Subscription> {
@Override
public Subscription transform(JSONObject object) {
return Subscription.fromJSON(object);
}
}

View File

@@ -1,12 +0,0 @@
package net.andrewcpu.elevenlabs.api.transformers.obj;
import net.andrewcpu.elevenlabs.api.transformers.ResultTransformerAdapter;
import net.andrewcpu.elevenlabs.elements.user.User;
import org.json.simple.JSONObject;
public class UserTransformer extends ResultTransformerAdapter<User> {
@Override
public User transform(JSONObject object) {
return User.fromJSON(object);
}
}

View File

@@ -1,24 +0,0 @@
package net.andrewcpu.elevenlabs.api.transformers.obj;
import net.andrewcpu.elevenlabs.api.transformers.ResultTransformerAdapter;
import net.andrewcpu.elevenlabs.elements.voice.Voice;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import java.util.ArrayList;
import java.util.List;
public class VoiceListTransformer extends ResultTransformerAdapter<List<Voice>> {
@Override
public List<Voice> transform(JSONObject object) {
JSONArray voiceArray = (JSONArray) object.get("voices");
List<Voice> voices = new ArrayList<>();
for (Object o : voiceArray) {
JSONObject voiceJson = (JSONObject) o;
voices.add(Voice.fromJSON(voiceJson));
}
return voices;
}
}

View File

@@ -1,12 +0,0 @@
package net.andrewcpu.elevenlabs.api.transformers.obj;
import net.andrewcpu.elevenlabs.api.transformers.ResultTransformerAdapter;
import net.andrewcpu.elevenlabs.elements.voice.VoiceSettings;
import org.json.simple.JSONObject;
public class VoiceSettingTransformer extends ResultTransformerAdapter<VoiceSettings> {
@Override
public VoiceSettings transform(JSONObject object) {
return VoiceSettings.fromJSON(object);
}
}

View File

@@ -1,12 +0,0 @@
package net.andrewcpu.elevenlabs.api.transformers.obj;
import net.andrewcpu.elevenlabs.api.transformers.ResultTransformerAdapter;
import net.andrewcpu.elevenlabs.elements.voice.Voice;
import org.json.simple.JSONObject;
public class VoiceTransformer extends ResultTransformerAdapter<Voice> {
@Override
public Voice transform(JSONObject object) {
return Voice.fromJSON(object);
}
}

View File

@@ -1,80 +0,0 @@
package net.andrewcpu.elevenlabs.elements;
import net.andrewcpu.elevenlabs.ElevenLabsAPI;
import net.andrewcpu.elevenlabs.elements.voice.Voice;
import net.andrewcpu.elevenlabs.exceptions.ElevenLabsAPINotInitiatedException;
import net.andrewcpu.elevenlabs.exceptions.ElevenLabsValidationException;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@SuppressWarnings("UnusedReturnValue")
public class VoiceBuilder {
private String name = null;
private final Map<String, String> labels;
private final List<File> files;
private String voiceId;
public static VoiceBuilder fromVoice(Voice voice){
VoiceBuilder voiceBuilder = new VoiceBuilder();
voiceBuilder.withName(voice.getName());
voiceBuilder.withVoiceID(voice.getVoiceId());
for(String key : voice.getLabels().keySet()){
voiceBuilder.withLabel(key, voice.getLabels().get(key));
}
return voiceBuilder;
}
public VoiceBuilder() {
labels = new HashMap<>();
files = new ArrayList<>();
voiceId = null;
}
public VoiceBuilder withName(String name){
this.name = name;
return this;
}
public VoiceBuilder withFile(File file){
files.add(file);
return this;
}
public VoiceBuilder withLabel(String key, String value){
labels.put(key, value);
return this;
}
public VoiceBuilder removeLabel(String key){
labels.remove(key);
return this;
}
public VoiceBuilder removeFile(File file){
files.remove(file);
return this;
}
public VoiceBuilder withVoiceID(String id){
this.voiceId = id;
return this;
}
public Voice edit() throws IOException, ElevenLabsValidationException, ElevenLabsAPINotInitiatedException {
ElevenLabsAPI.getInstance().editVoice(voiceId, name, labels, files);
return ElevenLabsAPI.getInstance().getVoice(voiceId, true);
}
public Voice create() throws IOException, ElevenLabsValidationException, ElevenLabsAPINotInitiatedException {
if(files.isEmpty()){
throw new ElevenLabsValidationException("Cannot build a voice without any files.");
}
String voiceId = ElevenLabsAPI.getInstance().createVoice(name, labels, files);
return ElevenLabsAPI.getInstance().getVoice(voiceId, true);
}
}

View File

@@ -1,191 +0,0 @@
package net.andrewcpu.elevenlabs.elements.user;
import net.andrewcpu.elevenlabs.ElevenLabsAPI;
import net.andrewcpu.elevenlabs.enums.Status;
import net.andrewcpu.elevenlabs.exceptions.ElevenLabsAPINotInitiatedException;
import net.andrewcpu.elevenlabs.exceptions.ElevenLabsValidationException;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class Subscription {
private final String tier;
private final int characterCount;
private final int characterLimit;
private final boolean canExtendCharacterLimit;
private final boolean allowedToExtendCharacterLimit;
private final long nextCharacterCountResetUnix;
private final int voiceLimit;
private final boolean canExtendVoiceLimit;
private final boolean canUseInstantVoiceCloning;
private final List<AvailableModel> availableModels;
private final Status status;
private final NextInvoice nextInvoice;
public static Subscription get() throws ElevenLabsValidationException, IOException, ElevenLabsAPINotInitiatedException {
return ElevenLabsAPI.getInstance().getSubscription();
}
public Subscription(String tier, int characterCount, int characterLimit, boolean canExtendCharacterLimit, boolean allowedToExtendCharacterLimit,
long nextCharacterCountResetUnix, int voiceLimit, boolean canExtendVoiceLimit, boolean canUseInstantVoiceCloning, List<AvailableModel> availableModels,
String status, NextInvoice nextInvoice) {
this.tier = tier;
this.characterCount = characterCount;
this.characterLimit = characterLimit;
this.canExtendCharacterLimit = canExtendCharacterLimit;
this.allowedToExtendCharacterLimit = allowedToExtendCharacterLimit;
this.nextCharacterCountResetUnix = nextCharacterCountResetUnix;
this.voiceLimit = voiceLimit;
this.canExtendVoiceLimit = canExtendVoiceLimit;
this.canUseInstantVoiceCloning = canUseInstantVoiceCloning;
this.availableModels = availableModels;
this.status = Status.valueOf(status.toUpperCase());
this.nextInvoice = nextInvoice;
}
public String getTier() {
return tier;
}
public int getCharacterCount() {
return characterCount;
}
public int getCharacterLimit() {
return characterLimit;
}
public boolean isCanExtendCharacterLimit() {
return canExtendCharacterLimit;
}
public boolean isAllowedToExtendCharacterLimit() {
return allowedToExtendCharacterLimit;
}
public long getNextCharacterCountResetUnix() {
return nextCharacterCountResetUnix;
}
public int getVoiceLimit() {
return voiceLimit;
}
public boolean isCanExtendVoiceLimit() {
return canExtendVoiceLimit;
}
public boolean isCanUseInstantVoiceCloning() {
return canUseInstantVoiceCloning;
}
public List<AvailableModel> getAvailableModels() {
return availableModels;
}
public Status getStatus() {
return status;
}
public NextInvoice getNextInvoice() {
return nextInvoice;
}
public static Subscription fromJSON(JSONObject object) {
String tier = (String) object.get("tier");
int characterCount = ((Long) object.get("character_count")).intValue();
int characterLimit = ((Long) object.get("character_limit")).intValue();
boolean canExtendCharacterLimit = (Boolean) object.get("can_extend_character_limit");
boolean allowedToExtendCharacterLimit = (Boolean) object.get("allowed_to_extend_character_limit");
long nextCharacterCountResetUnix = (Long) object.get("next_character_count_reset_unix");
int voiceLimit = ((Long) object.get("voice_limit")).intValue();
boolean canExtendVoiceLimit = (Boolean) object.get("can_extend_voice_limit");
boolean canUseInstantVoiceCloning = (Boolean) object.get("can_use_instant_voice_cloning");
List<AvailableModel> availableModels = new ArrayList<>();
JSONArray availableModelsJson = (JSONArray) object.get("available_models");
for (Object model : availableModelsJson) {
JSONObject modelJson = (JSONObject) model;
String modelId = (String) modelJson.get("model_id");
String displayName = (String) modelJson.get("display_name");
List<SupportedLanguage> supportedLanguages = new ArrayList<>();
JSONArray supportedLanguagesJson = (JSONArray) modelJson.get("supported_languages");
for (Object language : supportedLanguagesJson) {
JSONObject languageJson = (JSONObject) language;
String isoCode = (String) languageJson.get("iso_code");
String languageDisplayName = (String) languageJson.get("display_name");
supportedLanguages.add(new SupportedLanguage(isoCode, languageDisplayName));
}
availableModels.add(new AvailableModel(modelId, displayName, supportedLanguages));
}
String status = (String) object.get("status");
NextInvoice invoice = null;
if(object.containsKey("next_invoice")){
JSONObject nextInvoiceJson = (JSONObject) object.get("next_invoice");
invoice = new NextInvoice(
((Long) nextInvoiceJson.get("amount_due_cents")).intValue(),
(Long) nextInvoiceJson.get("next_payment_attempt_unix")
);
}
return new Subscription(tier, characterCount, characterLimit, canExtendCharacterLimit, allowedToExtendCharacterLimit, nextCharacterCountResetUnix, voiceLimit, canExtendVoiceLimit, canUseInstantVoiceCloning, availableModels, status, invoice);
}
@Override
public String toString() {
return "Subscription{" +
"tier='" + tier + '\'' +
", characterCount=" + characterCount +
", characterLimit=" + characterLimit +
", canExtendCharacterLimit=" + canExtendCharacterLimit +
", allowedToExtendCharacterLimit=" + allowedToExtendCharacterLimit +
", nextCharacterCountResetUnix=" + nextCharacterCountResetUnix +
", voiceLimit=" + voiceLimit +
", canExtendVoiceLimit=" + canExtendVoiceLimit +
", canUseInstantVoiceCloning=" + canUseInstantVoiceCloning +
", availableModels=" + availableModels +
", status='" + status + '\'' +
", nextInvoice=" + nextInvoice +
'}';
}
public record AvailableModel(String modelId, String displayName, List<SupportedLanguage> supportedLanguages) {
@Override
public String toString() {
return "AvailableModel{" +
"modelId='" + modelId + '\'' +
", displayName='" + displayName + '\'' +
", supportedLanguages=" + supportedLanguages +
'}';
}
}
public record SupportedLanguage(String isoCode, String displayName) {
@Override
public String toString() {
return "SupportedLanguage{" +
"isoCode='" + isoCode + '\'' +
", displayName='" + displayName + '\'' +
'}';
}
}
public record NextInvoice(int amountDueCents, long nextPaymentAttemptUnix) {
public Date getNextPaymentAttempt() {
return new Date(nextPaymentAttemptUnix);
}
@Override
public String toString() {
return "NextInvoice{" +
"amountDueCents=" + amountDueCents +
", nextPaymentAttemptUnix=" + nextPaymentAttemptUnix +
'}';
}
}
}

View File

@@ -1,57 +0,0 @@
package net.andrewcpu.elevenlabs.elements.user;
import net.andrewcpu.elevenlabs.ElevenLabsAPI;
import net.andrewcpu.elevenlabs.elements.voice.History;
import net.andrewcpu.elevenlabs.exceptions.ElevenLabsAPINotInitiatedException;
import net.andrewcpu.elevenlabs.exceptions.ElevenLabsValidationException;
import org.json.simple.JSONObject;
import java.io.IOException;
public class User {
private final Subscription subscription;
private final boolean isNewUser;
private final String apiKey;
public static User get() throws ElevenLabsValidationException, IOException, ElevenLabsAPINotInitiatedException {
return ElevenLabsAPI.getInstance().getUser();
}
public User(Subscription subscription, boolean isNewUser, String xiApiKey) {
this.subscription = subscription;
this.isNewUser = isNewUser;
this.apiKey = xiApiKey;
}
public Subscription getSubscription() {
return subscription;
}
public boolean isNewUser() {
return isNewUser;
}
public String getAPIKey() {
return apiKey;
}
public History getHistory() throws IOException, ElevenLabsValidationException, ElevenLabsAPINotInitiatedException {
return ElevenLabsAPI.getInstance().getHistory();
}
public static User fromJSON(JSONObject object) {
JSONObject subscriptionJson = (JSONObject) object.get("subscription");
Subscription subscription = Subscription.fromJSON(subscriptionJson);
boolean isNewUser = (boolean) object.get("is_new_user");
String xiApiKey = (String) object.get("xi_api_key");
return new User(subscription, isNewUser, xiApiKey);
}
@Override
public String toString() {
return "User{" +
"subscription=" + subscription +
", isNewUser=" + isNewUser +
", apiKey='" + apiKey + '\'' +
'}';
}
}

View File

@@ -1,174 +0,0 @@
package net.andrewcpu.elevenlabs.elements.voice;
import net.andrewcpu.elevenlabs.ElevenLabsAPI;
import net.andrewcpu.elevenlabs.enums.State;
import net.andrewcpu.elevenlabs.exceptions.ElevenLabsAPINotInitiatedException;
import net.andrewcpu.elevenlabs.exceptions.ElevenLabsValidationException;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
public record History(List<HistoryItem> history) {
public static History fromJSON(JSONObject object) {
List<HistoryItem> historyItems = new ArrayList<>();
JSONArray historyArray = (JSONArray) object.get("history");
History history = new History(new ArrayList<>());
for (Object item : historyArray) {
JSONObject itemJson = (JSONObject) item;
String historyItemId = (String) itemJson.get("history_item_id");
String voiceId = (String) itemJson.get("voice_id");
String voiceName = (String) itemJson.get("voice_name");
String text = (String) itemJson.get("text");
long dateUnix = (Long) itemJson.get("date_unix");
int characterCountChangeFrom = ((Long) itemJson.get("character_count_change_from")).intValue();
int characterCountChangeTo = ((Long) itemJson.get("character_count_change_to")).intValue();
String contentType = (String) itemJson.get("content_type");
String state = (String) itemJson.get("state");
HistoryItem historyItem = new HistoryItem(historyItemId, voiceId, voiceName, text, dateUnix, characterCountChangeFrom, characterCountChangeTo, contentType, state, history);
historyItems.add(historyItem);
}
history.history.addAll(historyItems);
return history;
}
public static History get() throws ElevenLabsValidationException, IOException, ElevenLabsAPINotInitiatedException {
return ElevenLabsAPI.getInstance().getHistory();
}
public HistoryItem getHistoryItem(String id) {
for (HistoryItem item : history) {
if (item.getHistoryItemId().equals(id)) {
return item;
}
}
return null;
}
public File downloadHistory(String[] ids, File file) throws IOException, ElevenLabsValidationException, ElevenLabsAPINotInitiatedException {
return ElevenLabsAPI.getInstance().downloadHistory(Arrays.stream(ids).toList(), file);
}
public File downloadHistory(List<HistoryItem> historyItems, File file) throws IOException, ElevenLabsValidationException, ElevenLabsAPINotInitiatedException {
return ElevenLabsAPI.getInstance().downloadHistory(historyItems.stream().map(HistoryItem::getHistoryItemId).collect(Collectors.toList()), file);
}
@Override
public String toString() {
return "History{" +
"history=" + history +
'}';
}
public static class HistoryItem {
private final String historyItemId;
private final String voiceId;
private final String voiceName;
private final String text;
private final long dateUnix;
private final int characterCountChangeFrom;
private final int characterCountChangeTo;
private final String contentType;
private final State state;
private Voice voice;
private final History history;
public HistoryItem(String historyItemId, String voiceId, String voiceName, String text, long dateUnix, int characterCountChangeFrom, int characterCountChangeTo, String contentType, String state, History history) {
this.historyItemId = historyItemId;
this.voiceId = voiceId;
this.voiceName = voiceName;
this.text = text;
this.dateUnix = dateUnix;
this.characterCountChangeFrom = characterCountChangeFrom;
this.characterCountChangeTo = characterCountChangeTo;
this.contentType = contentType;
this.state = State.valueOf(state.toUpperCase());
this.history = history;
this.voice = null;
}
public Voice getVoice() {
if (voice == null) {
try {
voice = ElevenLabsAPI.getInstance().getVoice(voiceId);
} catch (ElevenLabsValidationException | IOException | ElevenLabsAPINotInitiatedException e) {
throw new RuntimeException(e);
}
}
return voice;
}
public String getHistoryItemId() {
return historyItemId;
}
public String getVoiceId() {
return voiceId;
}
public String getVoiceName() {
return voiceName;
}
public String getText() {
return text;
}
public long getDateUnix() {
return dateUnix;
}
public Date getDate() {
return new Date(dateUnix);
}
public int getCharacterCountChangeFrom() {
return characterCountChangeFrom;
}
public int getCharacterCountChangeTo() {
return characterCountChangeTo;
}
public String getContentType() {
return contentType;
}
public State getState() {
return state;
}
public String delete() throws ElevenLabsValidationException, IOException, ElevenLabsAPINotInitiatedException {
String output = ElevenLabsAPI.getInstance().deleteHistoryItem(this);
history.history.remove(this);
return output;
}
public File downloadAudio(File outputFile) throws ElevenLabsValidationException, IOException, ElevenLabsAPINotInitiatedException {
return ElevenLabsAPI.getInstance().getHistoryItemAudio(this, outputFile);
}
@Override
public String toString() {
return "HistoryItem{" +
"historyItemId='" + historyItemId + '\'' +
", voiceId='" + voiceId + '\'' +
", voiceName='" + voiceName + '\'' +
", text='" + text + '\'' +
", dateUnix=" + dateUnix +
", characterCountChangeFrom=" + characterCountChangeFrom +
", characterCountChangeTo=" + characterCountChangeTo +
", contentType='" + contentType + '\'' +
", state='" + state + '\'' +
", voice=" + voice +
'}';
}
}
}

View File

@@ -1,86 +0,0 @@
package net.andrewcpu.elevenlabs.elements.voice;
import net.andrewcpu.elevenlabs.ElevenLabsAPI;
import net.andrewcpu.elevenlabs.exceptions.ElevenLabsAPINotInitiatedException;
import net.andrewcpu.elevenlabs.exceptions.ElevenLabsValidationException;
import org.json.simple.JSONObject;
import java.io.File;
import java.io.IOException;
public class Sample {
private final String sampleId;
private final String fileName;
private final String mimeType;
private final long sizeBytes;
private final String hash;
private Voice voice;
public static Sample fromJSON(JSONObject object) {
String sampleId = (String) object.get("sample_id");
String fileName = (String) object.get("file_name");
String mimeType = (String) object.get("mime_type");
int sizeBytes = ((Long) object.get("size_bytes")).intValue();
String hash = (String) object.get("hash");
return new Sample(sampleId, fileName, mimeType, sizeBytes, hash);
}
public Sample(String sampleId, String fileName, String mimeType, long sizeBytes, String hash) {
this.sampleId = sampleId;
this.fileName = fileName;
this.mimeType = mimeType;
this.sizeBytes = sizeBytes;
this.hash = hash;
}
public Voice getVoice() {
return voice;
}
public void setVoice(Voice voice) {
this.voice = voice;
}
public String getSampleId() {
return sampleId;
}
public String getFileName() {
return fileName;
}
public String getMimeType() {
return mimeType;
}
public long getSizeBytes() {
return sizeBytes;
}
public String getHash() {
return hash;
}
public String delete() throws IOException, ElevenLabsValidationException, ElevenLabsAPINotInitiatedException {
return ElevenLabsAPI.getInstance().deleteSample(voice,this);
}
public File downloadAudio(File outputFile) throws IOException, ElevenLabsValidationException, ElevenLabsAPINotInitiatedException {
return ElevenLabsAPI.getInstance().getSampleAudio(voice, this, outputFile);
}
@Override
public String toString() {
return "Sample{" +
"sampleId='" + sampleId + '\'' +
", fileName='" + fileName + '\'' +
", mimeType='" + mimeType + '\'' +
", sizeBytes=" + sizeBytes +
", hash='" + hash + '\'' +
", voice=" + voice +
'}';
}
}

View File

@@ -1,179 +0,0 @@
package net.andrewcpu.elevenlabs.elements.voice;
import net.andrewcpu.elevenlabs.ElevenLabsAPI;
import net.andrewcpu.elevenlabs.elements.VoiceBuilder;
import net.andrewcpu.elevenlabs.exceptions.ElevenLabsAPINotInitiatedException;
import net.andrewcpu.elevenlabs.exceptions.ElevenLabsValidationException;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Voice {
private final String voiceId;
private final String name;
private final List<Sample> samples;
private final String category;
private final Map<String, String> labels;
private final String previewUrl;
private final List<String> availableForTiers;
private VoiceSettings voiceSettings;
private boolean hasSettings;
public static Voice fromJSON(JSONObject object) {
String voiceId = (String) object.get("voice_id");
String name = (String) object.get("name");
List<Sample> samples = new ArrayList<>();
if(object.containsKey("samples") && object.get("samples") != null){
JSONArray samplesJson = (JSONArray) object.get("samples");
for (Object sampleObj : samplesJson) {
JSONObject sampleJson = (JSONObject) sampleObj;
samples.add(Sample.fromJSON(sampleJson));
}
}
String category = (String) object.get("category");
JSONObject labelsJson = (JSONObject) object.get("labels");
Map<String, String> labels = new HashMap<>();
for (Object key : labelsJson.keySet()) {
String labelName = (String) key;
String labelValue = (String) labelsJson.get(labelName);
labels.put(labelName, labelValue);
}
String previewUrl = (String) object.get("preview_url");
JSONArray availableForTiersJson = (JSONArray) object.get("available_for_tiers");
List<String> availableForTiers = new ArrayList<>();
for (Object tier : availableForTiersJson) {
availableForTiers.add((String) tier);
}
double stab = -1;
double sim = -1;
if(object.containsKey("settings") && object.get("settings") != null){
JSONObject settingsJson = (JSONObject) object.get("settings");
VoiceSettings settings = new VoiceSettings(((Double) settingsJson.get("stability")),
((Double) settingsJson.get("similarity_boost")));
stab = settings.getStability();
sim = settings.getSimilarityBoost();
}
Voice voice = new Voice(voiceId, name, samples, category, labels, previewUrl, availableForTiers, stab, sim);
voice.hasSettings = stab != -1;
voice.getSamples().forEach(s -> s.setVoice(voice));
return voice;
}
public static List<Voice> getVoices() throws IOException, ElevenLabsValidationException, ElevenLabsAPINotInitiatedException {
return ElevenLabsAPI.getInstance().getVoices();
}
public static Voice get(String voiceId) throws IOException, ElevenLabsValidationException, ElevenLabsAPINotInitiatedException {
Voice voice = ElevenLabsAPI.getInstance().getVoice(voiceId);
voice.hasSettings = true;
return voice;
}
public static Voice get(String voiceId, boolean withSettings) throws IOException, ElevenLabsValidationException, ElevenLabsAPINotInitiatedException {
Voice voice = ElevenLabsAPI.getInstance().getVoice(voiceId, withSettings);
voice.hasSettings = withSettings;
return voice;
}
private Voice(String voiceId, String name, List<Sample> samples, String category, Map<String, String> labels, String previewUrl, List<String> availableForTiers, double stability, double similarityBoost) {
this.voiceId = voiceId;
this.name = name;
this.samples = samples;
this.category = category;
this.labels = labels;
this.previewUrl = previewUrl;
this.availableForTiers = availableForTiers;
this.voiceSettings = new VoiceSettings(stability, similarityBoost);
}
public String getVoiceId() {
return voiceId;
}
public String getName() {
return name;
}
public List<Sample> getSamples() {
return samples;
}
public String getCategory() {
return category;
}
public Map<String, String> getLabels() {
return labels;
}
public String getPreviewUrl() {
return previewUrl;
}
public List<String> getAvailableForTiers() {
return availableForTiers;
}
public VoiceSettings getVoiceSettings() {
return voiceSettings;
}
public String delete() throws IOException, ElevenLabsValidationException, ElevenLabsAPINotInitiatedException {
return ElevenLabsAPI.getInstance().deleteVoice(getVoiceId());
}
public void fetchSettings() throws IOException, ElevenLabsValidationException, ElevenLabsAPINotInitiatedException {
this.voiceSettings = ElevenLabsAPI.getInstance().getVoiceSettings(getVoiceId());
hasSettings = true;
}
public VoiceBuilder builder() {
return VoiceBuilder.fromVoice(this);
}
public String updateVoiceSettings(VoiceSettings settings) throws IOException, ElevenLabsValidationException, ElevenLabsAPINotInitiatedException {
String response = ElevenLabsAPI.getInstance().editVoice(this, settings);
if(response != null){
this.voiceSettings = settings;
hasSettings = true;
return response;
}
return null;
}
public File generate(String text, VoiceSettings voiceSettings, File output) throws ElevenLabsValidationException, IOException, ElevenLabsAPINotInitiatedException {
return ElevenLabsAPI.getInstance().getTextToSpeech(text, this, voiceSettings,output);
}
public File generate(String text, File output) throws ElevenLabsValidationException, IOException, ElevenLabsAPINotInitiatedException {
if(!hasSettings){
throw new ElevenLabsValidationException("Cannot use default voice settings for " + voiceId + " because this object does not have VoiceSettings");
}
return generate(text, voiceSettings, output);
}
@Override
public String toString() {
return "Voice{" +
"voiceId='" + voiceId + '\'' +
", name='" + name + '\'' +
", samples=" + samples +
", category='" + category + '\'' +
", labels=" + labels +
", previewUrl='" + previewUrl + '\'' +
", availableForTiers=" + availableForTiers +
", voiceSettings=" + voiceSettings +
'}';
}
}

View File

@@ -1,58 +0,0 @@
package net.andrewcpu.elevenlabs.elements.voice;
import net.andrewcpu.elevenlabs.ElevenLabsAPI;
import net.andrewcpu.elevenlabs.exceptions.ElevenLabsAPINotInitiatedException;
import net.andrewcpu.elevenlabs.exceptions.ElevenLabsValidationException;
import org.json.simple.JSONObject;
import java.io.IOException;
@SuppressWarnings("unchecked")
public class VoiceSettings {
private double stability;
private double similarityBoost;
public static VoiceSettings fromJSON(JSONObject object){
return new VoiceSettings((double)object.get("stability"), (double)object.get("similarity"));
}
public static VoiceSettings getDefaultVoiceSettings() throws IOException, ElevenLabsValidationException, ElevenLabsAPINotInitiatedException {
return ElevenLabsAPI.getInstance().getDefaultVoiceSettings();
}
public VoiceSettings(double stability, double similarityBoost) {
this.stability = stability;
this.similarityBoost = similarityBoost;
}
public double getStability() {
return stability;
}
public void setStability(double stability) {
this.stability = stability;
}
public double getSimilarityBoost() {
return similarityBoost;
}
public void setSimilarityBoost(double similarityBoost) {
this.similarityBoost = similarityBoost;
}
public JSONObject toJSON() {
JSONObject object = new JSONObject();
object.put("stability", stability);
object.put("similarity_boost", similarityBoost);
return object;
}
@Override
public String toString() {
return "VoiceSettings{" +
"stability=" + stability +
", similarityBoost=" + similarityBoost +
'}';
}
}

View File

@@ -1,14 +0,0 @@
package net.andrewcpu.elevenlabs.enums;
public enum ContentType {
JSON("application/json"), MULTIPART("multipart/form-data");
private final String type;
ContentType(String type) {
this.type = type;
}
public String getType() {
return type;
}
}

View File

@@ -0,0 +1,19 @@
package net.andrewcpu.elevenlabs.enums;
public enum GeneratedAudioOutputFormat {
MP3_44100_64,
MP3_44100_96,
MP3_44100_128,
MP3_44100_192,
PCM_16000,
PCM_22050,
PCM_24000,
PCM_44100,
ULAW_8000;
// Method to get the default value
public static GeneratedAudioOutputFormat getDefault() {
return MP3_44100_128;
}
}

View File

@@ -1,8 +0,0 @@
package net.andrewcpu.elevenlabs.enums;
public enum HTTPMethod {
POST,
GET,
PUT,
DELETE
}

View File

@@ -0,0 +1,5 @@
package net.andrewcpu.elevenlabs.enums;
public enum HttpRequestType {
POST, GET, PUT, DELETE;
}

View File

@@ -0,0 +1,11 @@
package net.andrewcpu.elevenlabs.enums;
public enum ProjectOutputQuality {
STANDARD,
HIGH,
ULTRA;
public static ProjectOutputQuality getDefault() {
return STANDARD;
}
}

View File

@@ -1,7 +0,0 @@
package net.andrewcpu.elevenlabs.enums;
public enum ResponseType {
JSON,
FILE_STREAM,
STRING
}

View File

@@ -1,7 +0,0 @@
package net.andrewcpu.elevenlabs.enums;
public enum State {
CREATED,
DELETED,
PROCESSING
}

View File

@@ -1,12 +0,0 @@
package net.andrewcpu.elevenlabs.enums;
public enum Status {
TRIALING,
ACTIVE,
INCOMPLETE,
INCOMPLETE_EXPIRED,
PAST_DUE,
CANCELED,
UNPAID,
FREE
}

View File

@@ -0,0 +1,27 @@
package net.andrewcpu.elevenlabs.enums;
public enum StreamLatencyOptimization {
//0 - default mode (no latency optimizations)
NONE(0),
//1 - normal latency optimizations (about 50% of possible latency improvement of option 3)
NORMAL(1),
//2 - strong latency optimizations (about 75% of possible latency improvement of option 3)
STRONG(2),
// 3 - max latency optimizations
MAX_TEXT_NORMALIZATION(3),
// 3 - max latency optimizations with text normalizer turned off
MAX_NO_TEXT_NORMALIZATION(4);
private final int value;
StreamLatencyOptimization(int value) {
this.value = value;
}
public int getValue() {
return value;
}
public static StreamLatencyOptimization getDefault() {
return NONE;
}
}

View File

@@ -1,7 +0,0 @@
package net.andrewcpu.elevenlabs.exceptions;
public class ElevenLabsAPINotInitiatedException extends Exception{
public ElevenLabsAPINotInitiatedException() {
super("ElevenLabs API has not been initiated.");
}
}

View File

@@ -1,26 +0,0 @@
package net.andrewcpu.elevenlabs.exceptions;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
public class ElevenLabsExceptionBuilder {
public static ElevenLabsValidationException build(JSONObject errorResponse) {
StringBuilder message = new StringBuilder();
if(errorResponse.get("detail") instanceof JSONObject detail) {
message.append(detail.get("status")).append(" ").append(detail.get("message"));
}
else if(errorResponse.get("detail") instanceof JSONArray details){
for(Object detailObject : details){
JSONObject detail = (JSONObject)detailObject;
String locStr = ((JSONArray)detail.get("loc")).get(0).toString();
int locInt = (int)(((JSONArray)detail.get("loc")).get(1));
message.append(detail.get("type").toString())
.append(": ")
.append(detail.get("msg").toString()).append(" at ").append(locStr).append(":").append(locInt)
.append("\n");
}
}
return new ElevenLabsValidationException(message.toString().trim());
}
}

View File

@@ -1,7 +0,0 @@
package net.andrewcpu.elevenlabs.exceptions;
public class ElevenLabsValidationException extends Exception{
public ElevenLabsValidationException(String message) {
super(message);
}
}

View File

@@ -0,0 +1,7 @@
package net.andrewcpu.elevenlabs.exceptions;
public class RequestException extends Exception {
public RequestException(String message) {
super(message);
}
}

View File

@@ -0,0 +1,9 @@
package net.andrewcpu.elevenlabs.exceptions;
import net.andrewcpu.elevenlabs.model.error.ValidationError;
public class ValidationException extends RequestException{
public ValidationException(ValidationError validationError) {
super(validationError.toString());
}
}

View File

@@ -0,0 +1,8 @@
package net.andrewcpu.elevenlabs.model;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
@JsonIgnoreProperties(ignoreUnknown = true)
public class ElevenModel {
}

View File

@@ -0,0 +1,39 @@
package net.andrewcpu.elevenlabs.model;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
public class Language {
@JsonProperty("language_id")
private String languageId;
@JsonProperty("name")
private String name;
public Language(String languageId, String name) {
this.languageId = languageId;
this.name = name;
}
public Language() {
}
@JsonIgnore
public String getLanguageId() {
return languageId;
}
@JsonIgnore
public String getName() {
return name;
}
@Override
@JsonIgnore
public String toString() {
return "Language{" +
"languageId='" + languageId + '\'' +
", name='" + name + '\'' +
'}';
}
}

View File

@@ -0,0 +1,32 @@
package net.andrewcpu.elevenlabs.model.error;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import net.andrewcpu.elevenlabs.model.ElevenModel;
import java.util.List;
public class ValidationError extends ElevenModel {
@JsonProperty("detail")
private List<ValidationErrorDetail> details;
public ValidationError(List<ValidationErrorDetail> details) {
this.details = details;
}
public ValidationError() {
}
@JsonIgnore
public List<ValidationErrorDetail> getDetails() {
return details;
}
@Override
@JsonIgnore
public String toString() {
return "ValidationError{" +
"details=" + details +
'}';
}
}

View File

@@ -0,0 +1,52 @@
package net.andrewcpu.elevenlabs.model.error;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import net.andrewcpu.elevenlabs.model.ElevenModel;
import java.util.List;
public class ValidationErrorDetail extends ElevenModel {
@JsonProperty("loc")
private List locations;
@JsonProperty("msg")
private String message;
@JsonProperty("type")
private String type;
public ValidationErrorDetail(List locations, String message, String type) {
this.locations = locations;
this.message = message;
this.type = type;
}
public ValidationErrorDetail() {
}
@JsonIgnore
public List getLocations() {
return locations;
}
@JsonIgnore
public String getMessage() {
return message;
}
@JsonIgnore
public String getType() {
return type;
}
@JsonIgnore
@Override
public String toString() {
return "ValidationErrorDetail{" +
"locations=" + locations +
", message='" + message + '\'' +
", type='" + type + '\'' +
'}';
}
}

View File

@@ -0,0 +1,101 @@
package net.andrewcpu.elevenlabs.model.history;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import net.andrewcpu.elevenlabs.model.ElevenModel;
public class Feedback extends ElevenModel {
@JsonProperty("thumbs_up")
private boolean thumbsUp;
@JsonProperty("feedback")
private String feedback;
@JsonProperty("emotions")
private boolean emotions;
@JsonProperty("inaccurate_clone")
private boolean inaccurateClone;
@JsonProperty("glitches")
private boolean glitches;
@JsonProperty("audio_quality")
private boolean audioQuality;
@JsonProperty("other")
private boolean other;
@JsonProperty("review_status")
private String reviewStatus;
public Feedback(boolean thumbsUp, String feedback, boolean emotions, boolean inaccurateClone, boolean glitches, boolean audioQuality, boolean other, String reviewStatus) {
this.thumbsUp = thumbsUp;
this.feedback = feedback;
this.emotions = emotions;
this.inaccurateClone = inaccurateClone;
this.glitches = glitches;
this.audioQuality = audioQuality;
this.other = other;
this.reviewStatus = reviewStatus;
}
public Feedback() {
}
@JsonIgnore
public boolean isThumbsUp() {
return thumbsUp;
}
@JsonIgnore
public String getFeedback() {
return feedback;
}
@JsonIgnore
public boolean isEmotions() {
return emotions;
}
@JsonIgnore
public boolean isInaccurateClone() {
return inaccurateClone;
}
@JsonIgnore
public boolean isGlitches() {
return glitches;
}
@JsonIgnore
public boolean isAudioQuality() {
return audioQuality;
}
@JsonIgnore
public boolean isOther() {
return other;
}
@JsonIgnore
public String getReviewStatus() {
return reviewStatus;
}
@JsonIgnore
@Override
public String toString() {
return "Feedback{" +
"thumbsUp=" + thumbsUp +
", feedback='" + feedback + '\'' +
", emotions=" + emotions +
", inaccurateClone=" + inaccurateClone +
", glitches=" + glitches +
", audioQuality=" + audioQuality +
", other=" + other +
", reviewStatus='" + reviewStatus + '\'' +
'}';
}
}

View File

@@ -0,0 +1,76 @@
package net.andrewcpu.elevenlabs.model.history;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import net.andrewcpu.elevenlabs.ElevenLabs;
import net.andrewcpu.elevenlabs.model.ElevenModel;
import java.io.File;
import java.util.Arrays;
import java.util.List;
public class History extends ElevenModel {
public static History get() {
return ElevenLabs.getHistory();
}
@JsonProperty("history")
private List<HistoryItem> historyItems;
@JsonProperty("last_history_item_id")
private String lastHistoryItemId;
@JsonProperty("has_more")
private boolean hasMore;
public History(List<HistoryItem> historyItems) {
this.historyItems = historyItems;
}
public History() {
}
@JsonIgnore
public HistoryItem getHistoryItem(String id) {
for (HistoryItem item : historyItems) {
if (item.getHistoryItemId().equals(id)) {
return item;
}
}
return null;
}
@JsonIgnore
public List<HistoryItem> getHistoryItems() {
return historyItems;
}
@JsonIgnore
public String getLastHistoryItemId() {
return lastHistoryItemId;
}
@JsonIgnore
public boolean isHasMore() {
return hasMore;
}
public File downloadHistory(String... historyIds) {
return ElevenLabs.getHistoryItemAudio(historyIds);
}
public File downloadHistory(HistoryItem... items) {
return ElevenLabs.getHistoryItemAudio(Arrays.stream(items).map(HistoryItem::getHistoryItemId).toArray(String[]::new));
}
@JsonIgnore
@Override
public String toString() {
return "History{" +
"historyItems=" + historyItems +
", lastHistoryItemId='" + lastHistoryItemId + '\'' +
", hasMore=" + hasMore +
'}';
}
}

View File

@@ -0,0 +1,152 @@
package net.andrewcpu.elevenlabs.model.history;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import net.andrewcpu.elevenlabs.ElevenLabs;
import net.andrewcpu.elevenlabs.model.ElevenModel;
import java.io.File;
import java.util.Map;
public class HistoryItem extends ElevenModel {
@JsonProperty("history_item_id")
private String historyItemId;
@JsonProperty("request_id")
private String requestId;
@JsonProperty("voice_id")
private String voiceId;
@JsonProperty("voice_name")
private String voiceName;
@JsonProperty("text")
private String text;
@JsonProperty("date_unix")
private long dateUnix;
@JsonProperty("character_count_change_from")
private int characterCountChangeFrom;
@JsonProperty("character_count_change_to")
private int characterCountChangeTo;
@JsonProperty("content_type")
private String contentType;
@JsonProperty("state")
private String state;
@JsonProperty("settings")
private Map<String, Object> settings;
@JsonProperty("feedback")
private Feedback feedback;
public HistoryItem(String historyItemId, String requestId, String voiceId, String voiceName, String text, long dateUnix, int characterCountChangeFrom, int characterCountChangeTo, String contentType, String state, Map<String, Object> settings, Feedback feedback) {
this.historyItemId = historyItemId;
this.requestId = requestId;
this.voiceId = voiceId;
this.voiceName = voiceName;
this.text = text;
this.dateUnix = dateUnix;
this.characterCountChangeFrom = characterCountChangeFrom;
this.characterCountChangeTo = characterCountChangeTo;
this.contentType = contentType;
this.state = state;
this.settings = settings;
this.feedback = feedback;
}
public HistoryItem() {
}
@JsonIgnore
public String getHistoryItemId() {
return historyItemId;
}
@JsonIgnore
public String getRequestId() {
return requestId;
}
@JsonIgnore
public String getVoiceId() {
return voiceId;
}
@JsonIgnore
public String getVoiceName() {
return voiceName;
}
@JsonIgnore
public String getText() {
return text;
}
@JsonIgnore
public long getDateUnix() {
return dateUnix;
}
@JsonIgnore
public int getCharacterCountChangeFrom() {
return characterCountChangeFrom;
}
@JsonIgnore
public int getCharacterCountChangeTo() {
return characterCountChangeTo;
}
@JsonIgnore
public String getContentType() {
return contentType;
}
@JsonIgnore
public String getState() {
return state;
}
@JsonIgnore
public Map<String, Object> getSettings() {
return settings;
}
@JsonIgnore
public Feedback getFeedback() {
return feedback;
}
public String delete() {
return ElevenLabs.deleteHistoryItem(historyItemId);
}
public File downloadAudio() {
return ElevenLabs.getHistoryItemAudio(historyItemId);
}
@JsonIgnore
@Override
public String toString() {
return "HistoryItem{" +
"historyItemId='" + historyItemId + '\'' +
", requestId='" + requestId + '\'' +
", voiceId='" + voiceId + '\'' +
", voiceName='" + voiceName + '\'' +
", text='" + text + '\'' +
", dateUnix=" + dateUnix +
", characterCountChangeFrom=" + characterCountChangeFrom +
", characterCountChangeTo=" + characterCountChangeTo +
", contentType='" + contentType + '\'' +
", state='" + state + '\'' +
", settings=" + settings +
", feedback=" + feedback +
'}';
}
}

View File

@@ -0,0 +1,32 @@
package net.andrewcpu.elevenlabs.model.history;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import net.andrewcpu.elevenlabs.model.ElevenModel;
import java.util.List;
public class HistoryItemList extends ElevenModel {
@JsonProperty("history_item_ids")
private List<String> historyIds;
public HistoryItemList(List<String> historyIds) {
this.historyIds = historyIds;
}
public HistoryItemList() {
}
@JsonIgnore
public List<String> getHistoryIds() {
return historyIds;
}
@JsonIgnore
@Override
public String toString() {
return "HistoryItemList{" +
"historyIds=" + historyIds +
'}';
}
}

View File

@@ -0,0 +1,27 @@
package net.andrewcpu.elevenlabs.model.projects;
import com.fasterxml.jackson.annotation.JsonProperty;
import net.andrewcpu.elevenlabs.model.ElevenModel;
public class Chapter extends ElevenModel {
@JsonProperty("chapter_id")
private String chapterId;
@JsonProperty("name")
private String name;
@JsonProperty("last_conversion_date_unix")
private long lastConversionDateUnix;
@JsonProperty("conversion_progress")
private double conversionProgress;
@JsonProperty("can_be_downloaded")
private boolean canBeDownloaded;
@JsonProperty("state")
private String state;
@JsonProperty("statistics")
private Statistics statistics;
}

View File

@@ -0,0 +1,69 @@
package net.andrewcpu.elevenlabs.model.projects;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import net.andrewcpu.elevenlabs.model.ElevenModel;
public class ChapterSnapshot extends ElevenModel {
public ChapterSnapshot() {
}
public ChapterSnapshot(String chapterSnapshotId, String projectId, String chapterId, long createdAtUnix, String name) {
this.chapterSnapshotId = chapterSnapshotId;
this.projectId = projectId;
this.chapterId = chapterId;
this.createdAtUnix = createdAtUnix;
this.name = name;
}
@JsonProperty("chapter_snapshot_id")
private String chapterSnapshotId;
@JsonProperty("project_id")
private String projectId;
@JsonProperty("chapter_id")
private String chapterId;
@JsonProperty("created_at_unix")
private long createdAtUnix;
@JsonProperty("name")
private String name;
@JsonIgnore
public String getChapterSnapshotId() {
return chapterSnapshotId;
}
@JsonIgnore
public String getChapterId() {
return chapterId;
}
@JsonIgnore
public String getProjectId() {
return projectId;
}
@JsonIgnore
public long getCreatedAtUnix() {
return createdAtUnix;
}
@JsonIgnore
public String getName() {
return name;
}
@Override
@JsonIgnore
public String toString() {
return "ChapterSnapshot{" +
"chapterSnapshotId='" + chapterSnapshotId + '\'' +
", projectId='" + projectId + '\'' +
", chapterId='" + chapterId + '\'' +
", createdAtUnix=" + createdAtUnix +
", name='" + name + '\'' +
'}';
}
}

View File

@@ -0,0 +1,113 @@
package net.andrewcpu.elevenlabs.model.projects;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import net.andrewcpu.elevenlabs.ElevenLabs;
import net.andrewcpu.elevenlabs.model.ElevenModel;
import java.util.List;
public class Project extends ElevenModel {
public static List<Project> getProjects() {
return ElevenLabs.getProjects().getProjects();
}
@JsonProperty("project_id")
private String projectId;
@JsonProperty("name")
private String name;
@JsonProperty("create_date_unix")
private long unixCreateDate;
@JsonProperty("default_title_voice_id")
private String defaultTitleVoiceId;
@JsonProperty("default_paragraph_voice_id")
private String defaultParagraphVoiceId;
@JsonProperty("default_model_id")
private String defaultModelId;
@JsonProperty("last_conversion_date_unix")
private long lastConversionDateUnix;
@JsonProperty("can_be_downloaded")
private boolean canBeDownloaded;
@JsonProperty("state")
private String state;
@JsonProperty("chapters")
private List<Chapter> chapters;
@JsonIgnore
public String getProjectId() {
return projectId;
}
@JsonIgnore
public String getName() {
return name;
}
@JsonIgnore
public long getUnixCreateDate() {
return unixCreateDate;
}
@JsonIgnore
public String getDefaultTitleVoiceId() {
return defaultTitleVoiceId;
}
@JsonIgnore
public String getDefaultParagraphVoiceId() {
return defaultParagraphVoiceId;
}
@JsonIgnore
public String getDefaultModelId() {
return defaultModelId;
}
@JsonIgnore
public long getLastConversionDateUnix() {
return lastConversionDateUnix;
}
@JsonIgnore
public boolean isCanBeDownloaded() {
return canBeDownloaded;
}
@JsonIgnore
public String getState() {
return state;
}
@JsonIgnore
public List<Chapter> getChapters() {
return chapters;
}
@Override
@JsonIgnore
public String toString() {
return "Project{" +
"projectId='" + projectId + '\'' +
", name='" + name + '\'' +
", unixCreateDate=" + unixCreateDate +
", defaultTitleVoiceId='" + defaultTitleVoiceId + '\'' +
", defaultParagraphVoiceId='" + defaultParagraphVoiceId + '\'' +
", defaultModelId='" + defaultModelId + '\'' +
", lastConversionDateUnix=" + lastConversionDateUnix +
", canBeDownloaded=" + canBeDownloaded +
", state='" + state + '\'' +
", chapters=" + chapters +
'}';
}
}

View File

@@ -0,0 +1,60 @@
package net.andrewcpu.elevenlabs.model.projects;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import net.andrewcpu.elevenlabs.model.ElevenModel;
public class ProjectSnapshot extends ElevenModel {
public ProjectSnapshot() {
}
public ProjectSnapshot(String projectSnapshotId, String projectId, long createdAtUnix, String name) {
this.projectSnapshotId = projectSnapshotId;
this.projectId = projectId;
this.createdAtUnix = createdAtUnix;
this.name = name;
}
@JsonProperty("project_snapshot_id")
private String projectSnapshotId;
@JsonProperty("project_id")
private String projectId;
@JsonProperty("created_at_unix")
private long createdAtUnix;
@JsonProperty("name")
private String name;
@JsonIgnore
public String getProjectSnapshotId() {
return projectSnapshotId;
}
@JsonIgnore
public String getProjectId() {
return projectId;
}
@JsonIgnore
public long getCreatedAtUnix() {
return createdAtUnix;
}
@JsonIgnore
public String getName() {
return name;
}
@Override
@JsonIgnore
public String toString() {
return "Snapshot{" +
"projectSnapshotId='" + projectSnapshotId + '\'' +
", projectId='" + projectId + '\'' +
", createdAtUnix=" + createdAtUnix +
", name='" + name + '\'' +
'}';
}
}

View File

@@ -0,0 +1,62 @@
package net.andrewcpu.elevenlabs.model.projects;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import net.andrewcpu.elevenlabs.model.ElevenModel;
public class Statistics extends ElevenModel {
@JsonProperty("characters_unconverted")
private int charactersUnconverted;
@JsonProperty("characters_converted")
private int charactersConverted;
@JsonProperty("paragraphs_converted")
private int paragraphsConverted;
@JsonProperty("paragraphs_unconverted")
private int paragraphsUnconverted;
public Statistics(int charactersUnconverted, int charactersConverted, int paragraphsConverted, int paragraphsUnconverted) {
this.charactersUnconverted = charactersUnconverted;
this.charactersConverted = charactersConverted;
this.paragraphsConverted = paragraphsConverted;
this.paragraphsUnconverted = paragraphsUnconverted;
}
public Statistics() {
}
@JsonIgnore
public int getCharactersUnconverted() {
return charactersUnconverted;
}
@JsonIgnore
public int getCharactersConverted() {
return charactersConverted;
}
@JsonIgnore
public int getParagraphsConverted() {
return paragraphsConverted;
}
@JsonIgnore
public int getParagraphsUnconverted() {
return paragraphsUnconverted;
}
@Override
@JsonIgnore
public String toString() {
return "Statistics{" +
"charactersUnconverted=" + charactersUnconverted +
", charactersConverted=" + charactersConverted +
", paragraphsConverted=" + paragraphsConverted +
", paragraphsUnconverted=" + paragraphsUnconverted +
'}';
}
}

View File

@@ -0,0 +1,119 @@
package net.andrewcpu.elevenlabs.model.request;
import net.andrewcpu.elevenlabs.enums.ProjectOutputQuality;
import java.io.File;
import java.lang.invoke.StringConcatFactory;
public class AddProjectRequest {
private String name;
private String fromUrl;
private File fromDocument;
private String defaultTitleVoiceId;
private String defaultParagraphVoiceId;
private String defaultModelId;
private ProjectOutputQuality projectOutputQuality;
private String title;
private String author;
private String isbnNumber;
private boolean acxVolumeNormalization;
public String getName() {
return name;
}
public AddProjectRequest setName(String name) {
this.name = name;
return this;
}
public String getFromUrl() {
return fromUrl;
}
public AddProjectRequest setFromUrl(String fromUrl) {
this.fromUrl = fromUrl;
return this;
}
public File getFromDocument() {
return fromDocument;
}
public AddProjectRequest setFromDocument(File fromDocument) {
this.fromDocument = fromDocument;
return this;
}
public String getDefaultTitleVoiceId() {
return defaultTitleVoiceId;
}
public AddProjectRequest setDefaultTitleVoiceId(String defaultTitleVoiceId) {
this.defaultTitleVoiceId = defaultTitleVoiceId;
return this;
}
public String getDefaultParagraphVoiceId() {
return defaultParagraphVoiceId;
}
public AddProjectRequest setDefaultParagraphVoiceId(String defaultParagraphVoiceId) {
this.defaultParagraphVoiceId = defaultParagraphVoiceId;
return this;
}
public String getDefaultModelId() {
return defaultModelId;
}
public AddProjectRequest setDefaultModelId(String defaultModelId) {
this.defaultModelId = defaultModelId;
return this;
}
public ProjectOutputQuality getProjectOutputQuality() {
return projectOutputQuality;
}
public AddProjectRequest setProjectOutputQuality(ProjectOutputQuality projectOutputQuality) {
this.projectOutputQuality = projectOutputQuality;
return this;
}
public String getTitle() {
return title;
}
public AddProjectRequest setTitle(String title) {
this.title = title;
return this;
}
public String getAuthor() {
return author;
}
public AddProjectRequest setAuthor(String author) {
this.author = author;
return this;
}
public String getIsbnNumber() {
return isbnNumber;
}
public AddProjectRequest setIsbnNumber(String isbnNumber) {
this.isbnNumber = isbnNumber;
return this;
}
public boolean isAcxVolumeNormalization() {
return acxVolumeNormalization;
}
public AddProjectRequest setAcxVolumeNormalization(boolean acxVolumeNormalization) {
this.acxVolumeNormalization = acxVolumeNormalization;
return this;
}
}

View File

@@ -0,0 +1,119 @@
package net.andrewcpu.elevenlabs.model.request;
import net.andrewcpu.elevenlabs.model.ElevenModel;
import javax.management.loading.PrivateClassLoader;
import java.io.File;
public class CreateAudioNativeProjectRequest extends ElevenModel {
private String name;
private String image;
private String author;
private boolean small;
private String textColor;
private String backgroundColor;
private Integer sessionization;
private String voiceId;
private String modelId;
private File file;
private boolean autoConvert;
public String getName() {
return name;
}
public CreateAudioNativeProjectRequest setName(String name) {
this.name = name;
return this;
}
public String getImage() {
return image;
}
public CreateAudioNativeProjectRequest setImage(String image) {
this.image = image;
return this;
}
public String getAuthor() {
return author;
}
public CreateAudioNativeProjectRequest setAuthor(String author) {
this.author = author;
return this;
}
public boolean isSmall() {
return small;
}
public CreateAudioNativeProjectRequest setSmall(boolean small) {
this.small = small;
return this;
}
public String getTextColor() {
return textColor;
}
public CreateAudioNativeProjectRequest setTextColor(String textColor) {
this.textColor = textColor;
return this;
}
public String getBackgroundColor() {
return backgroundColor;
}
public CreateAudioNativeProjectRequest setBackgroundColor(String backgroundColor) {
this.backgroundColor = backgroundColor;
return this;
}
public Integer getSessionization() {
return sessionization;
}
public CreateAudioNativeProjectRequest setSessionization(Integer sessionization) {
this.sessionization = sessionization;
return this;
}
public String getVoiceId() {
return voiceId;
}
public CreateAudioNativeProjectRequest setVoiceId(String voiceId) {
this.voiceId = voiceId;
return this;
}
public String getModelId() {
return modelId;
}
public CreateAudioNativeProjectRequest setModelId(String modelId) {
this.modelId = modelId;
return this;
}
public File getFile() {
return file;
}
public CreateAudioNativeProjectRequest setFile(File file) {
this.file = file;
return this;
}
public boolean isAutoConvert() {
return autoConvert;
}
public CreateAudioNativeProjectRequest setAutoConvert(boolean autoConvert) {
this.autoConvert = autoConvert;
return this;
}
}

View File

@@ -0,0 +1,51 @@
package net.andrewcpu.elevenlabs.model.request;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import net.andrewcpu.elevenlabs.model.ElevenModel;
import net.andrewcpu.elevenlabs.model.voice.VoiceSettings;
public class TextToSpeechRequest extends ElevenModel {
@JsonProperty("text")
private String text;
@JsonProperty("model_id")
private String modelId;
@JsonProperty("voice_settings")
private VoiceSettings voiceSettings;
public TextToSpeechRequest(String text, String modelId, VoiceSettings voiceSettings) {
this.text = text;
this.modelId = modelId;
this.voiceSettings = voiceSettings;
}
public TextToSpeechRequest() {
}
@JsonIgnore
public String getText() {
return text;
}
@JsonIgnore
public String getModelId() {
return modelId;
}
@JsonIgnore
public VoiceSettings getVoiceSettings() {
return voiceSettings;
}
@JsonIgnore
@Override
public String toString() {
return "TextToSpeechRequest{" +
"text='" + text + '\'' +
", modelId='" + modelId + '\'' +
", voiceSettings=" + voiceSettings +
'}';
}
}

View File

@@ -0,0 +1,35 @@
package net.andrewcpu.elevenlabs.model.response;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import net.andrewcpu.elevenlabs.model.ElevenModel;
import net.andrewcpu.elevenlabs.model.projects.ChapterSnapshot;
import java.util.List;
public class ChapterSnapshotsModelResponse extends ElevenModel {
public ChapterSnapshotsModelResponse(List<ChapterSnapshot> snapshots) {
this.snapshots = snapshots;
}
public ChapterSnapshotsModelResponse() {
}
@JsonProperty("snapshots")
private List<ChapterSnapshot> snapshots;
@JsonIgnore
public List<ChapterSnapshot> getSnapshots() {
return snapshots;
}
@Override
@JsonIgnore
public String toString() {
return "ChapterSnapshotsModelResponse{" +
"snapshots=" + snapshots +
'}';
}
}

View File

@@ -0,0 +1,33 @@
package net.andrewcpu.elevenlabs.model.response;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import net.andrewcpu.elevenlabs.model.ElevenModel;
import net.andrewcpu.elevenlabs.model.projects.Chapter;
import java.util.List;
public class ChaptersModelResponse extends ElevenModel {
@JsonProperty("chapters")
private List<Chapter> chapters;
public ChaptersModelResponse(List<Chapter> chapters) {
this.chapters = chapters;
}
public ChaptersModelResponse() {
}
@JsonIgnore
public List<Chapter> getChapters() {
return chapters;
}
@Override
@JsonIgnore
public String toString() {
return "ChaptersModelResponse{" +
"chapters=" + chapters +
'}';
}
}

View File

@@ -0,0 +1,50 @@
package net.andrewcpu.elevenlabs.model.response;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import net.andrewcpu.elevenlabs.model.ElevenModel;
public class CreateAudioEnabledProjectModelResponse extends ElevenModel {
@JsonProperty("project_id")
private String projectId;
@JsonProperty("converting")
private boolean converting;
@JsonProperty("html_snippet")
private String htmlSnippet;
public CreateAudioEnabledProjectModelResponse(String projectId, boolean converting, String htmlSnippet) {
this.projectId = projectId;
this.converting = converting;
this.htmlSnippet = htmlSnippet;
}
public CreateAudioEnabledProjectModelResponse() {
}
@JsonIgnore
public String getProjectId() {
return projectId;
}
@JsonIgnore
public boolean isConverting() {
return converting;
}
@JsonIgnore
public String getHtmlSnippet() {
return htmlSnippet;
}
@Override
@JsonIgnore
public String toString() {
return "CreateAudioEnabledProjectModelResponse{" +
"projectId='" + projectId + '\'' +
", converting=" + converting +
", htmlSnippet='" + htmlSnippet + '\'' +
'}';
}
}

View File

@@ -0,0 +1,30 @@
package net.andrewcpu.elevenlabs.model.response;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import net.andrewcpu.elevenlabs.model.ElevenModel;
public class CreateVoiceResponse extends ElevenModel {
@JsonProperty("voice_id")
private String voiceId;
public CreateVoiceResponse(String voiceId) {
this.voiceId = voiceId;
}
public CreateVoiceResponse() {
}
@JsonIgnore
public String getVoiceId() {
return voiceId;
}
@JsonIgnore
@Override
public String toString() {
return "CreateVoiceResponse{" +
"voiceId='" + voiceId + '\'' +
'}';
}
}

View File

@@ -0,0 +1,164 @@
package net.andrewcpu.elevenlabs.model.response;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import net.andrewcpu.elevenlabs.model.ElevenModel;
import net.andrewcpu.elevenlabs.model.Language;
import java.util.List;
public class GenerationTypeModel extends ElevenModel {
@JsonProperty("model_id")
private String modelId;
@JsonProperty("name")
private String name;
@JsonProperty("can_be_finetuned")
private boolean canBeFinetuned;
@JsonProperty("can_do_text_to_speech")
private boolean canDoTextToSpeech;
@JsonProperty("can_do_voice_conversion")
private boolean canDoVoiceConversion;
@JsonProperty("can_use_style")
private boolean canUseStyle;
@JsonProperty("can_use_speaker_boost")
private boolean canUseSpeakerBoost;
@JsonProperty("serves_pro_voices")
private boolean servesProVoices;
@JsonProperty("token_cost_factor")
private int tokenCostFactor;
@JsonProperty("description")
private String description;
@JsonProperty("requires_alpha_access")
private boolean requiresAlphaAccess;
@JsonProperty("max_characters_request_free_user")
private int maxCharactersRequestFreeUser;
@JsonProperty("max_characters_request_subscribed_user")
private int maxCharactersRequestSubscribedUser;
@JsonProperty("languages")
private List<Language> languages;
public GenerationTypeModel(String modelId, String name, boolean canBeFinetuned, boolean canDoTextToSpeech, boolean canDoVoiceConversion, boolean canUseStyle, boolean canUseSpeakerBoost, boolean servesProVoices, int tokenCostFactor, String description, boolean requiresAlphaAccess, int maxCharactersRequestFreeUser, int maxCharactersRequestSubscribedUser, List<Language> languages) {
this.modelId = modelId;
this.name = name;
this.canBeFinetuned = canBeFinetuned;
this.canDoTextToSpeech = canDoTextToSpeech;
this.canDoVoiceConversion = canDoVoiceConversion;
this.canUseStyle = canUseStyle;
this.canUseSpeakerBoost = canUseSpeakerBoost;
this.servesProVoices = servesProVoices;
this.tokenCostFactor = tokenCostFactor;
this.description = description;
this.requiresAlphaAccess = requiresAlphaAccess;
this.maxCharactersRequestFreeUser = maxCharactersRequestFreeUser;
this.maxCharactersRequestSubscribedUser = maxCharactersRequestSubscribedUser;
this.languages = languages;
}
public GenerationTypeModel() {
}
@JsonIgnore
public String getModelId() {
return modelId;
}
@JsonIgnore
public String getName() {
return name;
}
@JsonIgnore
public boolean isCanBeFinetuned() {
return canBeFinetuned;
}
@JsonIgnore
public boolean isCanDoTextToSpeech() {
return canDoTextToSpeech;
}
@JsonIgnore
public boolean isCanDoVoiceConversion() {
return canDoVoiceConversion;
}
@JsonIgnore
public int getTokenCostFactor() {
return tokenCostFactor;
}
@JsonIgnore
public String getDescription() {
return description;
}
@JsonIgnore
public List<Language> getLanguages() {
return languages;
}
@JsonIgnore
public boolean isCanUseStyle() {
return canUseStyle;
}
@JsonIgnore
public boolean isCanUseSpeakerBoost() {
return canUseSpeakerBoost;
}
@JsonIgnore
public boolean isServesProVoices() {
return servesProVoices;
}
@JsonIgnore
public boolean isRequiresAlphaAccess() {
return requiresAlphaAccess;
}
@JsonIgnore
public int getMaxCharactersRequestFreeUser() {
return maxCharactersRequestFreeUser;
}
@JsonIgnore
public int getMaxCharactersRequestSubscribedUser() {
return maxCharactersRequestSubscribedUser;
}
@Override
@JsonIgnore
public String toString() {
return "GenerationTypeModel{" +
"modelId='" + modelId + '\'' +
", name='" + name + '\'' +
", canBeFinetuned=" + canBeFinetuned +
", canDoTextToSpeech=" + canDoTextToSpeech +
", canDoVoiceConversion=" + canDoVoiceConversion +
", canUseStyle=" + canUseStyle +
", canUseSpeakerBoost=" + canUseSpeakerBoost +
", servesProVoices=" + servesProVoices +
", tokenCostFactor=" + tokenCostFactor +
", description='" + description + '\'' +
", requiresAlphaAccess=" + requiresAlphaAccess +
", maxCharactersRequestFreeUser=" + maxCharactersRequestFreeUser +
", maxCharactersRequestSubscribedUser=" + maxCharactersRequestSubscribedUser +
", languages=" + languages +
'}';
}
}

View File

@@ -0,0 +1,31 @@
package net.andrewcpu.elevenlabs.model.response;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import net.andrewcpu.elevenlabs.model.ElevenModel;
import net.andrewcpu.elevenlabs.model.projects.Project;
public class ProjectModelResponse extends ElevenModel {
@JsonProperty("project")
private Project project;
public ProjectModelResponse(Project project) {
this.project = project;
}
public ProjectModelResponse() {
}
@JsonIgnore
public Project getProject() {
return project;
}
@Override
@JsonIgnore
public String toString() {
return "ProjectModelResponse{" +
"project=" + project +
'}';
}
}

View File

@@ -0,0 +1,34 @@
package net.andrewcpu.elevenlabs.model.response;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import net.andrewcpu.elevenlabs.model.ElevenModel;
import net.andrewcpu.elevenlabs.model.projects.ProjectSnapshot;
import java.util.List;
public class ProjectSnapshotsModelResponse extends ElevenModel {
@JsonProperty("snapshots")
private List<ProjectSnapshot> projectSnapshots;
public ProjectSnapshotsModelResponse(List<ProjectSnapshot> projectSnapshots) {
this.projectSnapshots = projectSnapshots;
}
public ProjectSnapshotsModelResponse() {
}
@JsonIgnore
public List<ProjectSnapshot> getSnapshots() {
return projectSnapshots;
}
@Override
@JsonIgnore
public String toString() {
return "ProjectSnapshotsModelResponse{" +
"snapshots=" + projectSnapshots +
'}';
}
}

View File

@@ -0,0 +1,33 @@
package net.andrewcpu.elevenlabs.model.response;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import net.andrewcpu.elevenlabs.model.ElevenModel;
import net.andrewcpu.elevenlabs.model.projects.Project;
import java.util.List;
public class ProjectsModelResponse extends ElevenModel {
@JsonProperty("projects")
private List<Project> projects;
public ProjectsModelResponse(List<Project> projects) {
this.projects = projects;
}
public ProjectsModelResponse() {
}
@JsonIgnore
public List<Project> getProjects() {
return projects;
}
@Override
@JsonIgnore
public String toString() {
return "ProjectsModelResponse{" +
"projects=" + projects +
'}';
}
}

View File

@@ -0,0 +1,33 @@
package net.andrewcpu.elevenlabs.model.response;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import net.andrewcpu.elevenlabs.model.ElevenModel;
import net.andrewcpu.elevenlabs.model.voice.Voice;
import java.util.List;
public class VoiceModelResponse extends ElevenModel {
@JsonProperty("voices")
private List<Voice> voices;
public VoiceModelResponse(List<Voice> voices) {
this.voices = voices;
}
public VoiceModelResponse() {
}
@JsonIgnore
public List<Voice> getVoices() {
return voices;
}
@JsonIgnore
@Override
public String toString() {
return "VoiceModelResponse{" +
"voices=" + voices +
'}';
}
}

View File

@@ -0,0 +1,113 @@
package net.andrewcpu.elevenlabs.model.tuning;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import net.andrewcpu.elevenlabs.model.ElevenModel;
import java.util.List;
public class FineTuning extends ElevenModel {
@JsonProperty("model_id")
private String modelId;
@JsonProperty("language")
private String language;
@JsonProperty("is_allowed_to_fine_tune")
private boolean isAllowedToFineTune;
@JsonProperty("fine_tuning_requested")
private boolean fineTuningRequested;
@JsonProperty("finetuning_state")
private String finetuningState;
@JsonProperty("verification_attempts")
private List<VerificationAttempt> verificationAttempts;
@JsonProperty("verification_failures")
private List<String> verificationFailures;
@JsonProperty("verification_attempts_count")
private int verificationAttemptsCount;
@JsonProperty("slice_ids")
private List<String> sliceIds;
public FineTuning(String modelId, String language, boolean isAllowedToFineTune, boolean fineTuningRequested, String finetuningState, List<VerificationAttempt> verificationAttempts, List<String> verificationFailures, int verificationAttemptsCount, List<String> sliceIds) {
this.modelId = modelId;
this.language = language;
this.isAllowedToFineTune = isAllowedToFineTune;
this.fineTuningRequested = fineTuningRequested;
this.finetuningState = finetuningState;
this.verificationAttempts = verificationAttempts;
this.verificationFailures = verificationFailures;
this.verificationAttemptsCount = verificationAttemptsCount;
this.sliceIds = sliceIds;
}
public FineTuning() {
}
@JsonIgnore
public String getModelId() {
return modelId;
}
@JsonIgnore
public String getLanguage() {
return language;
}
@JsonIgnore
public boolean isAllowedToFineTune() {
return isAllowedToFineTune;
}
@JsonIgnore
public boolean isFineTuningRequested() {
return fineTuningRequested;
}
@JsonIgnore
public String getFinetuningState() {
return finetuningState;
}
@JsonIgnore
public List<VerificationAttempt> getVerificationAttempts() {
return verificationAttempts;
}
@JsonIgnore
public List<String> getVerificationFailures() {
return verificationFailures;
}
@JsonIgnore
public int getVerificationAttemptsCount() {
return verificationAttemptsCount;
}
@JsonIgnore
public List<String> getSliceIds() {
return sliceIds;
}
@Override
@JsonIgnore
public String toString() {
return "FineTuning{" +
"modelId='" + modelId + '\'' +
", language='" + language + '\'' +
", isAllowedToFineTune=" + isAllowedToFineTune +
", fineTuningRequested=" + fineTuningRequested +
", finetuningState='" + finetuningState + '\'' +
", verificationAttempts=" + verificationAttempts +
", verificationFailures=" + verificationFailures +
", verificationAttemptsCount=" + verificationAttemptsCount +
", sliceIds=" + sliceIds +
'}';
}
}

View File

@@ -0,0 +1,70 @@
package net.andrewcpu.elevenlabs.model.tuning;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import net.andrewcpu.elevenlabs.model.ElevenModel;
public class Recording extends ElevenModel {
@JsonProperty("recording_id")
private String recordingId;
@JsonProperty("mime_type")
private String mimeType;
@JsonProperty("size_bytes")
private long sizeBytes;
@JsonProperty("upload_date_unix")
private long uploadDateUnix;
@JsonProperty("transcription")
private String transcription;
public Recording(String recordingId, String mimeType, long sizeBytes, long uploadDateUnix, String transcription) {
this.recordingId = recordingId;
this.mimeType = mimeType;
this.sizeBytes = sizeBytes;
this.uploadDateUnix = uploadDateUnix;
this.transcription = transcription;
}
public Recording() {
}
@JsonIgnore
public String getRecordingId() {
return recordingId;
}
@JsonIgnore
public String getMimeType() {
return mimeType;
}
@JsonIgnore
public long getSizeBytes() {
return sizeBytes;
}
@JsonIgnore
public long getUploadDateUnix() {
return uploadDateUnix;
}
@JsonIgnore
public String getTranscription() {
return transcription;
}
@JsonIgnore
@Override
public String toString() {
return "Recording{" +
"recordingId='" + recordingId + '\'' +
", mimeType='" + mimeType + '\'' +
", sizeBytes=" + sizeBytes +
", uploadDateUnix=" + uploadDateUnix +
", transcription='" + transcription + '\'' +
'}';
}
}

View File

@@ -0,0 +1,80 @@
package net.andrewcpu.elevenlabs.model.tuning;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import net.andrewcpu.elevenlabs.model.ElevenModel;
public class VerificationAttempt extends ElevenModel {
@JsonProperty("text")
private String text;
@JsonProperty("date_unix")
private long dateUnix;
@JsonProperty("accepted")
private boolean accepted;
@JsonProperty("similarity")
private double similarity;
@JsonProperty("levenshtein_distance")
private double levenshteinDistance;
@JsonProperty("recording")
private Recording recording;
public VerificationAttempt(String text, long dateUnix, boolean accepted, double similarity, double levenshteinDistance, Recording recording) {
this.text = text;
this.dateUnix = dateUnix;
this.accepted = accepted;
this.similarity = similarity;
this.levenshteinDistance = levenshteinDistance;
this.recording = recording;
}
public VerificationAttempt() {
}
@JsonIgnore
public String getText() {
return text;
}
@JsonIgnore
public long getDateUnix() {
return dateUnix;
}
@JsonIgnore
public boolean isAccepted() {
return accepted;
}
@JsonIgnore
public double getSimilarity() {
return similarity;
}
@JsonIgnore
public double getLevenshteinDistance() {
return levenshteinDistance;
}
@JsonIgnore
public Recording getRecording() {
return recording;
}
@JsonIgnore
@Override
public String toString() {
return "VerificationAttempt{" +
"text='" + text + '\'' +
", dateUnix=" + dateUnix +
", accepted=" + accepted +
", similarity=" + similarity +
", levenshteinDistance=" + levenshteinDistance +
", recording=" + recording +
'}';
}
}

View File

@@ -0,0 +1,156 @@
package net.andrewcpu.elevenlabs.model.user;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import net.andrewcpu.elevenlabs.ElevenLabs;
import net.andrewcpu.elevenlabs.model.ElevenModel;
public class Subscription extends ElevenModel {
@JsonIgnore
public static Subscription get() {
return ElevenLabs.getSubscription();
}
@JsonProperty("tier")
private String tier;
@JsonProperty("character_count")
private int characterCount;
@JsonProperty("character_limit")
private int characterLimit;
@JsonProperty("can_extend_character_limit")
private boolean canExtendCharacterLimit;
@JsonProperty("allowed_to_extend_character_limit")
private boolean allowedToExtendCharacterLimit;
@JsonProperty("next_character_count_reset_unix")
private long nextCharacterCountResetUnix;
@JsonProperty("voice_limit")
private int voiceLimit;
@JsonProperty("professional_voice_limit")
private int professionalVoiceLimit;
@JsonProperty("can_extend_voice_limit")
private boolean canExtendVoiceLimit;
@JsonProperty("can_use_instant_voice_cloning")
private boolean canUseInstantVoiceCloning;
@JsonProperty("can_use_professional_voice_cloning")
private boolean canUseProfessionalVoiceCloning;
@JsonProperty("currency")
private String currency;
@JsonProperty("status")
private String status;
public Subscription(String tier, int characterCount, int characterLimit, boolean canExtendCharacterLimit, boolean allowedToExtendCharacterLimit, long nextCharacterCountResetUnix, int voiceLimit, int professionalVoiceLimit, boolean canExtendVoiceLimit, boolean canUseInstantVoiceCloning, boolean canUseProfessionalVoiceCloning, String currency, String status) {
this.tier = tier;
this.characterCount = characterCount;
this.characterLimit = characterLimit;
this.canExtendCharacterLimit = canExtendCharacterLimit;
this.allowedToExtendCharacterLimit = allowedToExtendCharacterLimit;
this.nextCharacterCountResetUnix = nextCharacterCountResetUnix;
this.voiceLimit = voiceLimit;
this.professionalVoiceLimit = professionalVoiceLimit;
this.canExtendVoiceLimit = canExtendVoiceLimit;
this.canUseInstantVoiceCloning = canUseInstantVoiceCloning;
this.canUseProfessionalVoiceCloning = canUseProfessionalVoiceCloning;
this.currency = currency;
this.status = status;
}
public Subscription() {
}
@JsonIgnore
public String getTier() {
return tier;
}
@JsonIgnore
public int getCharacterCount() {
return characterCount;
}
@JsonIgnore
public int getCharacterLimit() {
return characterLimit;
}
@JsonIgnore
public boolean isCanExtendCharacterLimit() {
return canExtendCharacterLimit;
}
@JsonIgnore
public boolean isAllowedToExtendCharacterLimit() {
return allowedToExtendCharacterLimit;
}
@JsonIgnore
public long getNextCharacterCountResetUnix() {
return nextCharacterCountResetUnix;
}
@JsonIgnore
public int getVoiceLimit() {
return voiceLimit;
}
@JsonIgnore
public int getProfessionalVoiceLimit() {
return professionalVoiceLimit;
}
@JsonIgnore
public boolean isCanExtendVoiceLimit() {
return canExtendVoiceLimit;
}
@JsonIgnore
public boolean isCanUseInstantVoiceCloning() {
return canUseInstantVoiceCloning;
}
@JsonIgnore
public boolean isCanUseProfessionalVoiceCloning() {
return canUseProfessionalVoiceCloning;
}
@JsonIgnore
public String getCurrency() {
return currency;
}
@JsonIgnore
public String getStatus() {
return status;
}
@JsonIgnore
@Override
public String toString() {
return "Subscription{" +
"tier='" + tier + '\'' +
", characterCount=" + characterCount +
", characterLimit=" + characterLimit +
", canExtendCharacterLimit=" + canExtendCharacterLimit +
", allowedToExtendCharacterLimit=" + allowedToExtendCharacterLimit +
", nextCharacterCountResetUnix=" + nextCharacterCountResetUnix +
", voiceLimit=" + voiceLimit +
", professionalVoiceLimit=" + professionalVoiceLimit +
", canExtendVoiceLimit=" + canExtendVoiceLimit +
", canUseInstantVoiceCloning=" + canUseInstantVoiceCloning +
", canUseProfessionalVoiceCloning=" + canUseProfessionalVoiceCloning +
", currency='" + currency + '\'' +
", status='" + status + '\'' +
'}';
}
}

View File

@@ -0,0 +1,66 @@
package net.andrewcpu.elevenlabs.model.user;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import net.andrewcpu.elevenlabs.ElevenLabs;
import net.andrewcpu.elevenlabs.model.ElevenModel;
public class User extends ElevenModel {
public static User get() {
return ElevenLabs.getUser();
}
@JsonProperty("subscription")
private Subscription subscription;
@JsonProperty("is_new_user")
private boolean isNewUser;
@JsonProperty("xi_api_key")
private String xiApiKey;
@JsonProperty("can_use_delayed_payment_methods")
private boolean canUseDelayedPaymentMethods;
public User(Subscription subscription, boolean isNewUser, String xiApiKey, boolean canUseDelayedPaymentMethods) {
this.subscription = subscription;
this.isNewUser = isNewUser;
this.xiApiKey = xiApiKey;
this.canUseDelayedPaymentMethods = canUseDelayedPaymentMethods;
}
public User() {
}
@JsonIgnore
public Subscription getSubscription() {
return subscription;
}
@JsonIgnore
public boolean isNewUser() {
return isNewUser;
}
@JsonIgnore
public String getXiApiKey() {
return xiApiKey;
}
@JsonIgnore
public boolean isCanUseDelayedPaymentMethods() {
return canUseDelayedPaymentMethods;
}
@JsonIgnore
@Override
public String toString() {
return "User{" +
"subscription=" + subscription +
", isNewUser=" + isNewUser +
", xiApiKey='" + xiApiKey + '\'' +
", canUseDelayedPaymentMethods=" + canUseDelayedPaymentMethods +
'}';
}
}

View File

@@ -0,0 +1,87 @@
package net.andrewcpu.elevenlabs.model.voice;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import net.andrewcpu.elevenlabs.ElevenLabs;
import net.andrewcpu.elevenlabs.model.ElevenModel;
import java.io.File;
public class Sample extends ElevenModel {
@JsonProperty("sample_id")
private String sampleId;
@JsonProperty("file_name")
private String fileName;
@JsonProperty("mime_type")
private String mimeType;
@JsonProperty("size_bytes")
private long sizeBytes;
@JsonProperty("hash")
private String hash;
@JsonIgnore
public Voice voice;
public Sample(String sampleId, String fileName, String mimeType, long sizeBytes, String hash) {
this.sampleId = sampleId;
this.fileName = fileName;
this.mimeType = mimeType;
this.sizeBytes = sizeBytes;
this.hash = hash;
}
public Sample() {
}
@JsonIgnore
public String getSampleId() {
return sampleId;
}
@JsonIgnore
public String getFileName() {
return fileName;
}
@JsonIgnore
public String getMimeType() {
return mimeType;
}
@JsonIgnore
public long getSizeBytes() {
return sizeBytes;
}
@JsonIgnore
public String getHash() {
return hash;
}
public File downloadAudio() {
return ElevenLabs.getAudioSample(voice.getVoiceId(), sampleId);
}
/**
* Warning! This will delete the sample.
*/
public String delete() {
return ElevenLabs.deleteSample(voice.getVoiceId(), sampleId);
}
@Override
@JsonIgnore
public String toString() {
return "Sample{" +
"sampleId='" + sampleId + '\'' +
", fileName='" + fileName + '\'' +
", mimeType='" + mimeType + '\'' +
", sizeBytes=" + sizeBytes +
", hash='" + hash + '\'' +
'}';
}
}

View File

@@ -0,0 +1,80 @@
package net.andrewcpu.elevenlabs.model.voice;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import net.andrewcpu.elevenlabs.model.ElevenModel;
public class Sharing extends ElevenModel {
@JsonProperty("status")
private String status;
@JsonProperty("history_item_sample_id")
private String historyItemSampleId;
@JsonProperty("original_voice_id")
private String originalVoiceId;
@JsonProperty("public_owner_id")
private String publicOwnerId;
@JsonProperty("liked_by_count")
private int likedByCount;
@JsonProperty("cloned_by_count")
private int clonedByCount;
public Sharing(String status, String historyItemSampleId, String originalVoiceId, String publicOwnerId, int likedByCount, int clonedByCount) {
this.status = status;
this.historyItemSampleId = historyItemSampleId;
this.originalVoiceId = originalVoiceId;
this.publicOwnerId = publicOwnerId;
this.likedByCount = likedByCount;
this.clonedByCount = clonedByCount;
}
public Sharing() {
}
@JsonIgnore
public String getStatus() {
return status;
}
@JsonIgnore
public String getHistoryItemSampleId() {
return historyItemSampleId;
}
@JsonIgnore
public String getOriginalVoiceId() {
return originalVoiceId;
}
@JsonIgnore
public String getPublicOwnerId() {
return publicOwnerId;
}
@JsonIgnore
public int getLikedByCount() {
return likedByCount;
}
@JsonIgnore
public int getClonedByCount() {
return clonedByCount;
}
@Override
@JsonIgnore
public String toString() {
return "Sharing{" +
"status='" + status + '\'' +
", historyItemSampleId='" + historyItemSampleId + '\'' +
", originalVoiceId='" + originalVoiceId + '\'' +
", publicOwnerId='" + publicOwnerId + '\'' +
", likedByCount=" + likedByCount +
", clonedByCount=" + clonedByCount +
'}';
}
}

View File

@@ -0,0 +1,267 @@
package net.andrewcpu.elevenlabs.model.voice;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import net.andrewcpu.elevenlabs.ElevenLabs;
import net.andrewcpu.elevenlabs.enums.GeneratedAudioOutputFormat;
import net.andrewcpu.elevenlabs.enums.StreamLatencyOptimization;
import net.andrewcpu.elevenlabs.model.ElevenModel;
import net.andrewcpu.elevenlabs.model.tuning.FineTuning;
import java.io.File;
import java.io.InputStream;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class Voice extends ElevenModel {
public static List<Voice> getVoices() {
return ElevenLabs.getVoices();
}
public static Voice getVoice(String voiceId) {
return ElevenLabs.getVoice(voiceId);
}
public static Voice getVoice(String voiceId, boolean withSettings) {
return ElevenLabs.getVoice(voiceId, withSettings);
}
@JsonProperty("voice_id")
private String voiceId;
@JsonProperty("name")
private String name;
@JsonProperty("samples")
private List<Sample> samples;
@JsonProperty("category")
private String category;
@JsonProperty("fine_tuning")
private FineTuning fineTuning;
@JsonProperty("labels")
private Map<String, String> labels;
@JsonProperty("description")
private String description;
@JsonProperty("preview_url")
private String previewUrl;
@JsonProperty("available_for_tiers")
private List<String> availableForTiers;
@JsonProperty("settings")
private VoiceSettings settings;
@JsonProperty("sharing")
private Sharing sharing;
@JsonProperty("high_quality_base_model_ids")
private List<String> highQualityBaseModelIds;
@JsonIgnore
public String getVoiceId() {
return voiceId;
}
@JsonIgnore
public String getName() {
return name;
}
@JsonIgnore
public List<Sample> getSamples() {
return samples.stream().peek(s -> s.voice = this).collect(Collectors.toList());
}
@JsonIgnore
public String getCategory() {
return category;
}
@JsonIgnore
public FineTuning getFineTuning() {
return fineTuning;
}
@JsonIgnore
public Map<String, String> getLabels() {
return labels;
}
@JsonIgnore
public String getDescription() {
return description;
}
@JsonIgnore
public String getPreviewUrl() {
return previewUrl;
}
@JsonIgnore
public List<String> getAvailableForTiers() {
return availableForTiers;
}
@JsonIgnore
public VoiceSettings getSettings() {
return settings;
}
@JsonIgnore
public Sharing getSharing() {
return sharing;
}
/**
* Warning! This will delete the voice.
*/
public String delete() {
return ElevenLabs.deleteVoice(voiceId);
}
public VoiceSettings fetchSettings() {
this.settings = ElevenLabs.getVoiceSettings(voiceId);
return settings;
}
public VoiceSettings updateVoiceSettings(VoiceSettings voiceSettings) {
ElevenLabs.editVoiceSettings(voiceId, voiceSettings);
this.settings = voiceSettings;
return settings;
}
public Voice refresh() {
Voice refreshedData = Voice.getVoice(voiceId, true);
this.name = refreshedData.name;
this.settings = refreshedData.settings;
this.voiceId = refreshedData.voiceId;
this.labels = refreshedData.labels;
this.description = refreshedData.description;
this.samples = refreshedData.samples;
this.fineTuning = refreshedData.fineTuning;
this.availableForTiers = refreshedData.availableForTiers;
this.sharing = refreshedData.sharing;
this.previewUrl = refreshedData.previewUrl;
this.category = refreshedData.category;
this.highQualityBaseModelIds = refreshedData.highQualityBaseModelIds;
return this;
}
public File generate(String text, String model) {
return ElevenLabs.generateTextToSpeech(voiceId, text, model, settings);
}
public File generate(String text, String model, VoiceSettings settings) {
return ElevenLabs.generateTextToSpeech(voiceId, text, model, settings);
}
public File generate(String text, String model, VoiceSettings settings, GeneratedAudioOutputFormat outputFormat, StreamLatencyOptimization streamLatencyOptimization) {
return ElevenLabs.generateTextToSpeech(voiceId,text, model, outputFormat,streamLatencyOptimization, settings);
}
public File generate(String text, String model, VoiceSettings settings, GeneratedAudioOutputFormat outputFormat) {
return ElevenLabs.generateTextToSpeech(voiceId,text, model, outputFormat,StreamLatencyOptimization.getDefault(), settings);
}
public File generate(String text, VoiceSettings settings, GeneratedAudioOutputFormat outputFormat) {
return ElevenLabs.generateTextToSpeech(voiceId, text, "eleven_monolingual_v1", outputFormat,StreamLatencyOptimization.getDefault(), settings);
}
public File generate(String text, VoiceSettings settings, StreamLatencyOptimization streamLatencyOptimization) {
return ElevenLabs.generateTextToSpeech(voiceId, text, "eleven_monolingual_v1", GeneratedAudioOutputFormat.getDefault(),streamLatencyOptimization, settings);
}
public File generate(String text, VoiceSettings settings, GeneratedAudioOutputFormat outputFormat, StreamLatencyOptimization streamLatencyOptimization) {
return ElevenLabs.generateTextToSpeech(voiceId, text, "eleven_monolingual_v1", outputFormat,streamLatencyOptimization, settings);
}
public File generate(String text, GeneratedAudioOutputFormat outputFormat, StreamLatencyOptimization streamLatencyOptimization) {
return ElevenLabs.generateTextToSpeech(voiceId, text, "eleven_monolingual_v1", outputFormat,streamLatencyOptimization, settings);
}
public File generate(String text, StreamLatencyOptimization streamLatencyOptimization) {
return ElevenLabs.generateTextToSpeech(voiceId, text, "eleven_monolingual_v1", GeneratedAudioOutputFormat.getDefault(), streamLatencyOptimization, settings);
}
public File generate(String text, VoiceSettings settings) {
return ElevenLabs.generateTextToSpeech(voiceId, text, "eleven_monolingual_v1", settings);
}
public File generate(String text) {
return ElevenLabs.generateTextToSpeech(voiceId, text, "eleven_monolingual_v1", settings);
}
public InputStream generateStream(String text, String model) {
return ElevenLabs.generateTextToSpeechStreamed(voiceId, text, model, settings);
}
public InputStream generateStream(String text, String model, VoiceSettings settings) {
return ElevenLabs.generateTextToSpeechStreamed(voiceId, text, model, settings);
}
public InputStream generateStream(String text, VoiceSettings settings) {
return ElevenLabs.generateTextToSpeechStreamed(voiceId, text, "eleven_monolingual_v1", settings);
}
public InputStream generateStream(String text) {
return ElevenLabs.generateTextToSpeechStreamed(voiceId, text, "eleven_monolingual_v1", settings);
}
public InputStream generateStream(String text, String model, GeneratedAudioOutputFormat generatedAudioOutputFormat, StreamLatencyOptimization streamLatencyOptimization) {
return ElevenLabs.generateTextToSpeechStreamed(voiceId, text, model, generatedAudioOutputFormat, streamLatencyOptimization, settings);
}
public InputStream generateStream(String text, String model, GeneratedAudioOutputFormat generatedAudioOutputFormat, StreamLatencyOptimization streamLatencyOptimization, VoiceSettings settings) {
return ElevenLabs.generateTextToSpeechStreamed(voiceId, text, model, generatedAudioOutputFormat, streamLatencyOptimization, settings);
}
public InputStream generateStream(String text, VoiceSettings settings, GeneratedAudioOutputFormat generatedAudioOutputFormat, StreamLatencyOptimization streamLatencyOptimization) {
return ElevenLabs.generateTextToSpeechStreamed(voiceId, text, "eleven_monolingual_v1", generatedAudioOutputFormat, streamLatencyOptimization, settings);
}
public InputStream generateStream(String text, GeneratedAudioOutputFormat generatedAudioOutputFormat, StreamLatencyOptimization streamLatencyOptimization) {
return ElevenLabs.generateTextToSpeechStreamed(voiceId, text, "eleven_monolingual_v1", generatedAudioOutputFormat, streamLatencyOptimization, settings);
}
public InputStream generateStream(String text, String model, StreamLatencyOptimization streamLatencyOptimization) {
return ElevenLabs.generateTextToSpeechStreamed(voiceId, text, model, GeneratedAudioOutputFormat.getDefault(), streamLatencyOptimization, settings);
}
public InputStream generateStream(String text, String model, StreamLatencyOptimization streamLatencyOptimization, VoiceSettings settings) {
return ElevenLabs.generateTextToSpeechStreamed(voiceId, text, model, GeneratedAudioOutputFormat.getDefault(), streamLatencyOptimization, settings);
}
public InputStream generateStream(String text, VoiceSettings settings, StreamLatencyOptimization streamLatencyOptimization) {
return ElevenLabs.generateTextToSpeechStreamed(voiceId, text, "eleven_monolingual_v1", GeneratedAudioOutputFormat.getDefault(), streamLatencyOptimization, settings);
}
public InputStream generateStream(String text, StreamLatencyOptimization streamLatencyOptimization) {
return ElevenLabs.generateTextToSpeechStreamed(voiceId, text, "eleven_monolingual_v1", GeneratedAudioOutputFormat.getDefault(), streamLatencyOptimization, settings);
}
@Override
@JsonIgnore
public String toString() {
return "Voice{" +
"voiceId='" + voiceId + '\'' +
", name='" + name + '\'' +
", samples=" + samples +
", category='" + category + '\'' +
", fineTuning=" + fineTuning +
", labels=" + labels +
", description='" + description + '\'' +
", previewUrl='" + previewUrl + '\'' +
", availableForTiers=" + availableForTiers +
", settings=" + settings +
", sharing=" + sharing +
", highQualityBaseModelIds=" + highQualityBaseModelIds +
'}';
}
}

View File

@@ -0,0 +1,93 @@
package net.andrewcpu.elevenlabs.model.voice;
import net.andrewcpu.elevenlabs.ElevenLabs;
import net.andrewcpu.elevenlabs.model.response.CreateVoiceResponse;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class VoiceBuilder {
public static VoiceBuilder fromVoice(Voice voice) {
VoiceBuilder voiceBuilder = new VoiceBuilder(voice);
return voiceBuilder;
}
private Voice voice;
private String name;
private String description;
private Map<String, String> labels;
private List<File> files;
public VoiceBuilder() {
this.labels = new HashMap<>();
this.files = new ArrayList<>();
}
public VoiceBuilder(Voice voice) {
this();
this.voice = voice;
this.name = voice.getName();
this.description = voice.getDescription();
this.labels = voice.getLabels();
}
public String getName() {
return name;
}
public VoiceBuilder withName(String name) {
this.name = name;
return this;
}
public String getDescription() {
return description;
}
public VoiceBuilder withDescription(String description) {
this.description = description;
return this;
}
public Map<String, String> getLabels() {
return labels;
}
public VoiceBuilder withLabels(Map<String, String> labels) {
this.labels = labels;
return this;
}
public VoiceBuilder withLabel(String key, String value) {
this.labels.put(key, value);
return this;
}
public List<File> getFiles() {
return files;
}
public VoiceBuilder withFile(File file) {
this.files.add(file);
return this;
}
public VoiceBuilder withFiles(List<File> files) {
this.files = files;
return this;
}
public Voice create() {
CreateVoiceResponse createVoiceResponse = ElevenLabs.createVoice(name, files.toArray(File[]::new), description, labels);
return Voice.getVoice(createVoiceResponse.getVoiceId(), true);
}
public Voice edit() {
ElevenLabs.editVoice(voice.getVoiceId(), name, files.toArray(File[]::new), description, labels);
voice = voice.refresh();
return voice;
}
}

View File

@@ -0,0 +1,71 @@
package net.andrewcpu.elevenlabs.model.voice;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import net.andrewcpu.elevenlabs.ElevenLabs;
import net.andrewcpu.elevenlabs.model.ElevenModel;
public class VoiceSettings extends ElevenModel {
public static VoiceSettings getDefaultVoiceSettings() {
return ElevenLabs.getDefaultVoiceSettings();
}
@JsonProperty("stability")
private double stability;
@JsonProperty("similarity_boost")
private double similarityBoost;
@JsonProperty("style")
private double style;
@JsonProperty("use_speaker_boost")
private boolean useSpeakerBoost;
public VoiceSettings(double stability, double similarityBoost, double style, boolean useSpeakerBoost) {
this.stability = stability;
this.similarityBoost = similarityBoost;
this.style = style;
this.useSpeakerBoost = useSpeakerBoost;
}
public VoiceSettings(double stability, double similarityBoost) {
this.stability = stability;
this.similarityBoost = similarityBoost;
this.style = 0;
this.useSpeakerBoost = true;
}
public VoiceSettings() {
}
@JsonIgnore
public double getStability() {
return stability;
}
@JsonIgnore
public double getSimilarityBoost() {
return similarityBoost;
}
@JsonIgnore
public double getStyle() {
return style;
}
@JsonIgnore
public boolean isUseSpeakerBoost() {
return useSpeakerBoost;
}
@Override
@JsonIgnore
public String toString() {
return "VoiceSettings{" +
"stability=" + stability +
", similarityBoost=" + similarityBoost +
", style=" + style +
", useSpeakerBoost=" + useSpeakerBoost +
'}';
}
}

View File

@@ -0,0 +1,9 @@
package net.andrewcpu.elevenlabs.requests;
import net.andrewcpu.elevenlabs.enums.HttpRequestType;
public abstract class DeleteRequest<T> extends ElevenLabsRequest<T> {
public DeleteRequest(String endpoint, Class<T> clazz) {
super(HttpRequestType.DELETE, endpoint, clazz);
}
}

View File

@@ -0,0 +1,40 @@
package net.andrewcpu.elevenlabs.requests;
import net.andrewcpu.elevenlabs.enums.HttpRequestType;
import java.util.HashMap;
import java.util.Map;
import static net.andrewcpu.elevenlabs.util.ElevenNetworkUtil.buildQueryParameters;
public abstract class ElevenLabsRequest<T> {
private HttpRequestType type;
private String endpoint;
private Class<T> responseClass;
public ElevenLabsRequest(HttpRequestType type, String endpoint, Class<T> clazz) {
this.type = type;
this.endpoint = endpoint;
this.responseClass = clazz;
}
public HttpRequestType getType() {
return type;
}
public String getEndpoint() {
return endpoint + "?" + buildQueryParameters(getQueryParameters());
}
public Map<String, String> getQueryParameters() {
return new HashMap<>();
}
public Class<T> getResponseClass() {
return responseClass;
}
public abstract Object getPayload();
}

View File

@@ -0,0 +1,9 @@
package net.andrewcpu.elevenlabs.requests;
import net.andrewcpu.elevenlabs.enums.HttpRequestType;
public abstract class GetRequest<T> extends ElevenLabsRequest<T> {
public GetRequest(String endpoint, Class<T> clazz) {
super(HttpRequestType.GET, endpoint, clazz);
}
}

View File

@@ -0,0 +1,9 @@
package net.andrewcpu.elevenlabs.requests;
import net.andrewcpu.elevenlabs.enums.HttpRequestType;
public abstract class PostRequest<T> extends ElevenLabsRequest<T> {
public PostRequest(String endpoint, Class<T> clazz) {
super(HttpRequestType.POST, endpoint, clazz);
}
}

View File

@@ -0,0 +1,9 @@
package net.andrewcpu.elevenlabs.requests;
import net.andrewcpu.elevenlabs.enums.HttpRequestType;
public abstract class PutRequest<T> extends ElevenLabsRequest<T> {
public PutRequest(String endpoint, Class<T> clazz) {
super(HttpRequestType.PUT, endpoint, clazz);
}
}

View File

@@ -0,0 +1,33 @@
package net.andrewcpu.elevenlabs.requests.audionative;
import net.andrewcpu.elevenlabs.model.request.CreateAudioNativeProjectRequest;
import net.andrewcpu.elevenlabs.model.response.CreateAudioEnabledProjectModelResponse;
import net.andrewcpu.elevenlabs.requests.PostRequest;
import java.util.HashMap;
import java.util.Map;
public class PostCreateAudioNativeProjectRequest extends PostRequest<CreateAudioEnabledProjectModelResponse> {
private CreateAudioNativeProjectRequest request;
public PostCreateAudioNativeProjectRequest(CreateAudioNativeProjectRequest request) {
super("v1/audio-native", CreateAudioEnabledProjectModelResponse.class);
this.request = request;
}
@Override
public Object getPayload() {
Map<String, Object> payload = new HashMap<>();
payload.put("name", request.getName());
payload.put("image", request.getImage());
payload.put("author", request.getAuthor());
payload.put("small", request.isSmall());
payload.put("text_color", request.getTextColor());
payload.put("background_color", request.getBackgroundColor());
payload.put("sessionization", request.getSessionization());
payload.put("voice_id", request.getVoiceId());
payload.put("model_id", request.getModelId());
payload.put("file", request.getFile());
payload.put("auto_convert", request.isAutoConvert());
return payload;
}
}

View File

@@ -0,0 +1,14 @@
package net.andrewcpu.elevenlabs.requests.history;
import net.andrewcpu.elevenlabs.requests.DeleteRequest;
public class DeleteHistoryItemRequest extends DeleteRequest<String> {
public DeleteHistoryItemRequest(String historyItemId) {
super("v1/history/" + historyItemId, String.class);
}
@Override
public Object getPayload() {
return null;
}
}

Some files were not shown because too many files have changed in this diff Show More