46 Commits
v37 ... main

Author SHA1 Message Date
Andrewcpu
fa4c8bf5db Removed speceh to speech documentation until ElevenLabs publishes official API 2023-12-25 01:04:30 -05:00
Andrew Stein
96fc45920d Merge remote-tracking branch 'origin/main'
# Conflicts:
#	README.md
2023-11-29 14:03:15 -05:00
Andrew Stein
b9c74c1bd7 Updated README, added new builders for generations. 2023-11-29 14:01:41 -05:00
Andrew Stein
f2f3915c6c Added enum of available voice models (that I know of) with their display name and value. 2023-11-29 13:40:00 -05:00
Andrew Stein
79e570f989 Added support for paginated HistoryItems. 2023-11-29 13:39:37 -05:00
Andrew Stein
0a4a221b5c Added support for paginated HistoryItems. 2023-11-29 13:39:34 -05:00
Andrew Stein
cc360a258e Merge pull request #12 from Andrewcpu/Andrewcpu-patch-1
Update README.md
2023-11-24 20:18:01 -05:00
Andrew Stein
9c7fffbb9a Update README.md
PSA About speech to speech and version update
2023-11-24 20:17:42 -05:00
Andrew Stein
4cfd14fb95 Updated POM 2023-11-24 14:45:31 -05:00
Andrew Stein
a8630ceeb0 Simplified some code 2023-11-24 14:45:02 -05:00
andrewstein
7593f3a3f1 Added getDownloadUrl() support for HistoryItem's. 2023-11-24 14:40:30 -05:00
Andrew Stein
5288fde44e Fixed bug in speech to speech code. 2023-11-16 17:44:39 -05:00
Andrew Stein
ce86914f71 Reduced needless code in post requests. 2023-11-16 17:42:38 -05:00
Andrew Stein
4a212c7721 Updated POM 2023-11-15 18:56:14 -05:00
Andrew Stein
f46bb6878e Abstracted multipart payloads a bit. 2023-11-15 18:50:56 -05:00
Andrew Stein
81cdf05152 Reduced unneeded code bloat 2023-11-15 18:28:08 -05:00
Andrew Stein
6e5ae633a6 Updated POM version. 2023-11-15 18:09:57 -05:00
Andrew Stein
a6163fd67f Improved getEndpoint() changes of query parameter handling. 2023-11-15 18:09:41 -05:00
Andrew Stein
26a4ab1fa4 Removed former query parameter implementation in ElevenNetworkUtil class. (It has since been replaced by ElevenLabsRequest changes) 2023-11-15 18:09:25 -05:00
Andrew Stein
72f35c14b7 Fixed inconsistency with new getQueryParameters() inherited function. 2023-11-15 18:08:01 -05:00
Andrew Stein
90a092aa81 Fixed bug in output format. (Should've been lower case) 2023-11-15 18:07:34 -05:00
Andrew Stein
02d7ec0685 Added default model setting in ElevenLabs 2023-11-15 18:07:16 -05:00
Andrew Stein
75f1c40f59 Updating Jackson version to remove vulnerability warnings. 2023-11-15 17:49:49 -05:00
Andrew Stein
3ac42a330b Updated pom to stable 2023-11-15 17:42:12 -05:00
Andrew Stein
f4fe38166b Updated latest version. 2023-11-15 17:41:29 -05:00
Andrew Stein
3e2458b482 Readme updated & some polymorphic changes to Snapshots. 2023-11-15 17:40:52 -05:00
Andrew Stein
334a903c83 Pushing new POM version to fix action. 2023-11-15 16:57:34 -05:00
Andrew Stein
d7a710e197 Connected APIs with new models. 2023-11-15 16:52:22 -05:00
Andrew Stein
15db53e81e Connected APIs with new models. 2023-11-15 16:52:03 -05:00
Andrew Stein
bc6ee1306f Optimized imports. 2023-11-15 16:44:17 -05:00
Andrew Stein
8199e766ef API migration, STS / project changes. 2023-11-15 16:40:15 -05:00
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
110 changed files with 3185 additions and 539 deletions

View File

@@ -1,4 +1,4 @@
name: Dev Build
name: Build
on:
push:

464
README.md
View File

@@ -3,6 +3,9 @@
## Getting Started
So you wanna make custom voices, huh? Well you've come to the right place.
This library should cover all the ElevenLabs API endpoints as of 11/15/23.
**Update**
It seems I jumped the gun (or happened to bump into an accidental push of the speech to speech API docs), but the original documentation that my implementation was based on has now been removed or hidden. It may reappear as is, or will require changes.
### Installation
**Maven**
@@ -10,14 +13,11 @@ So you wanna make custom voices, huh? Well you've come to the right place.
To add `elevenlabs-api` to your Maven project, use:
```xml
<dependency>
<groupId>net.andrewcpu.elevenlabs</groupId>
<groupId>net.andrewcpu</groupId>
<artifactId>elevenlabs-api</artifactId>
<version>1.0-SNAPSHOT</version>
<version>2.7.8</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)
@@ -27,60 +27,107 @@ Compiled JARs are available via the [Releases tab](https://github.com/AndrewCPU/
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");
ElevenLabs.setApiKey("YOUR_API_KEY_HERE");
ElevenLabs.setDefaultModel("eleven_monolingual_v1"); // Optional, defaults to: "eleven_monolingual_v1"
```
*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`.
- - -
<!-- 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)
* [Built in Types](#built-in-types)
* [`Voice` Related Types](#voice-related-types)
* [`User` Related Types](#user-related-types)
* [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
- - -
## Simplified Generation Handling with Builders
### v2.7.8 now includes SpeechGenerationBuilder.java
[//]: # (### Speech to Speech)
[//]: # (```java)
[//]: # (//File output)
[//]: # (SpeechGenerationBuilder.speechToSpeech&#40;&#41;)
[//]: # ( .file&#40;&#41; // output type of file &#40;or use .streamed&#40;&#41; for an InputStream&#41;)
[//]: # ( .setInputFile&#40;File&#41;)
[//]: # ( .setGeneratedAudioOutputFormat&#40;GeneratedAudioOutputFormat.MP3_44100_128&#41;)
[//]: # ( .setVoiceId&#40;"voiceIdString"&#41;)
[//]: # ( .setVoiceSettings&#40;VoiceSettings&#41;)
[//]: # ( .setVoice&#40;Voice&#41; // or use a voice object, which will pull settings / ID out of the Voice)
[//]: # ( .setModelId&#40;"modelIdString"&#41;)
[//]: # ( .setModel&#40;ElevenLabsVoiceModel.ELEVEN_ENGLISH_STS_V2&#41;)
[//]: # ( .setLatencyOptimization&#40;StreamLatencyOptimization.NONE&#41;)
[//]: # ( .build&#40;&#41;;)
[//]: # (//Streamed output)
[//]: # (SpeechGenerationBuilder.speechToSpeech&#40;&#41;)
[//]: # ( .streamed&#40;&#41;)
[//]: # ( .setInputFile&#40;File&#41;)
[//]: # ( .setGeneratedAudioOutputFormat&#40;GeneratedAudioOutputFormat.MP3_44100_128&#41;)
[//]: # ( .setVoiceId&#40;"voiceIdString"&#41;)
[//]: # ( .setVoiceSettings&#40;VoiceSettings&#41;)
[//]: # ( .setVoice&#40;Voice&#41; // or use a voice object, which will pull settings / ID out of the Voice)
[//]: # ( .setModelId&#40;"modelIdString"&#41;)
[//]: # ( .setModel&#40;ElevenLabsVoiceModel.ELEVEN_ENGLISH_STS_V2&#41;)
[//]: # ( .setLatencyOptimization&#40;StreamLatencyOptimization.NONE&#41;)
[//]: # ( .build&#40;&#41;;)
[//]: # (```)
### Text to Speech
```java
//File output
SpeechGenerationBuilder.textToSpeech()
.file() // output type of file (or use .streamed() for an InputStream)
.setText(String text)
.setGeneratedAudioOutputFormat(GeneratedAudioOutputFormat.MP3_44100_128)
.setVoiceId("voiceIdString")
.setVoiceSettings(VoiceSettings)
.setVoice(Voice) // or use a voice object, which will pull settings / ID out of the Voice
.setModelId("modelIdString")
.setModel(ElevenLabsVoiceModel.ELEVEN_ENGLISH_STS_V2)
.setLatencyOptimization(StreamLatencyOptimization.NONE)
.build();
//Streamed output
SpeechGenerationBuilder.textToSpeech()
.streamed()
.setText(String text)
.setGeneratedAudioOutputFormat(GeneratedAudioOutputFormat.MP3_44100_128)
.setVoiceId("voiceIdString")
.setVoiceSettings(VoiceSettings)
.setVoice(Voice) // or use a voice object, which will pull settings / ID out of the Voice
.setModelId("modelIdString")
.setModel(ElevenLabsVoiceModel.ELEVEN_ENGLISH_STS_V2)
.setLatencyOptimization(StreamLatencyOptimization.NONE)
.build();
```
- - -
## 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.
@@ -163,16 +210,208 @@ builder.withLabel("accent", "American");
voice = builder.create();
```
### Generating Audio
### Generating Audio (TTS + STS)
To generate an audio file with a given `Voice`, you can utilize the `Voice#generate(...)` functions.
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
```
- - -
Voice voice;
File file = voice.generate("Hello world!", "my_favorite_model");
...
//Available Functions:
public File generate(String text, String model);
public File generate(String text, String model, VoiceSettings settings);
public File generate(String text, String model, VoiceSettings settings, GeneratedAudioOutputFormat outputFormat, StreamLatencyOptimization streamLatencyOptimization);
public File generate(String text, String model, VoiceSettings settings, GeneratedAudioOutputFormat outputFormat);
public File generate(String text, VoiceSettings settings, GeneratedAudioOutputFormat outputFormat);
public File generate(String text, VoiceSettings settings, StreamLatencyOptimization streamLatencyOptimization);
public File generate(String text, VoiceSettings settings, GeneratedAudioOutputFormat outputFormat, StreamLatencyOptimization streamLatencyOptimization);
public File generate(String text, GeneratedAudioOutputFormat outputFormat, StreamLatencyOptimization streamLatencyOptimization);
public File generate(String text, StreamLatencyOptimization streamLatencyOptimization);
public File generate(String text, VoiceSettings settings);
public File generate(String text);
public InputStream generateStream(String text, String model);
public InputStream generateStream(String text, String model, VoiceSettings settings);
public InputStream generateStream(String text, VoiceSettings settings);
public InputStream generateStream(String text);
public InputStream generateStream(String text, String model, GeneratedAudioOutputFormat generatedAudioOutputFormat, StreamLatencyOptimization streamLatencyOptimization);
public InputStream generateStream(String text, String model, GeneratedAudioOutputFormat generatedAudioOutputFormat, StreamLatencyOptimization streamLatencyOptimization, VoiceSettings settings);
public InputStream generateStream(String text, VoiceSettings settings, GeneratedAudioOutputFormat generatedAudioOutputFormat, StreamLatencyOptimization streamLatencyOptimization);
public InputStream generateStream(String text, GeneratedAudioOutputFormat generatedAudioOutputFormat, StreamLatencyOptimization streamLatencyOptimization);
public InputStream generateStream(String text, String model, StreamLatencyOptimization streamLatencyOptimization);
public InputStream generateStream(String text, String model, StreamLatencyOptimization streamLatencyOptimization, VoiceSettings settings);
public InputStream generateStream(String text, VoiceSettings settings, StreamLatencyOptimization streamLatencyOptimization);
public InputStream generateStream(String text, StreamLatencyOptimization streamLatencyOptimization);
```
[//]: # (public File speechToSpeech&#40;File audioFile, StreamLatencyOptimization latencyOptimization, String modelId, VoiceSettings voiceSettings&#41;;)
[//]: # ()
[//]: # (public File speechToSpeech&#40;File audioFile, StreamLatencyOptimization latencyOptimization, String modelId&#41;;)
[//]: # ()
[//]: # (public File speechToSpeech&#40;File audioFile, String modelId&#41;;)
[//]: # ()
[//]: # (public InputStream speechToSpeechStream&#40;File audioFile, StreamLatencyOptimization latencyOptimization, String modelId, VoiceSettings voiceSettings&#41;;)
[//]: # ()
[//]: # (public InputStream speechToSpeechStream&#40;File audioFile, StreamLatencyOptimization latencyOptimization, String modelId&#41;;)
[//]: # ()
[//]: # (public InputStream speechToSpeechStream&#40;File audioFile, String modelId&#41;;)
- - -
## Audio Native Projects
### Creating an Audio Native Project
You can create audio native projects using the AudioNative API.
```java
CreateAudioEnabledProjectRequest request = new CreateAudioEnabledProjectRequest()
.setName("Project name")
.setImage("https://...com/img.png")
.setAuthor("Andrew")
.setSmall(true)
.setTextColor("red")
.setBackgroundColor("black")
.setSessionization(3)
.setVoiceId("aso23809")
.setModelId("my_favorite_model")
.setFile(new File("input.dat"))
.setAutoConvert(true);
CreateAudioEnabledProjectModelResponse response = ElevenLabs.getAudioNativeAPI()
.createAudioEnabledProject(request);
```
- - -
## Projects
## Create a project
You can create a new project using the AddProjectRequest builder.
```java
AddProjectRequest request = new AddProjectRequest()
.setName("name")
.setFromUrl("...")
.setFromDocument(new File("file.dat"))
.setDefaultTitleVoiceId("voiceA")
.setDefaultParagraphVoiceId("voiceB")
.setDefaultModelId("the_default_model_of_your_dreams")
.setProjectOutputQuality(ProjectOutputQuality.STANDARD)
.setTitle("Big Title")
.setAuthor("Best Author")
.setIsbnNumber("THE. ISBN.")
.setAcxVolumeNormalization(true);
Project project = Project.addProject(request);
```
## Get a Project
Get a project by it's specific project ID.
```java
Project project = Project.getProjectById(projectId);
```
## Get all Projects
Get all of the projects associated with your account.
```java
List<Project> projects = Project.getProjects();
```
## Interacting with Projects
```java
Project project;
// Delete a project
String deleteResult = project.delete();
// Convert a project
String conversionResult = project.convertProject();
//Get the project's snapshots.
List<ProjectSnapshot> snapshots = project.getSnapshots();
// Access your chapters from memory
List<Chapter> chapters = project.getChapters();
// Refresh your local Project's chapters from the API
chapters = project.fetchUpdatedChapters(); // This will update the existing project object and return the list of new chapters
// Get a chapter by ID
Chapter chapter = project.getChapterById(chapterId);
// Delete a chapter
String result = project.deleteChapter(chapter);
// Convert a chapter
String result = project.convertChapter(chapter);
// Get chapter snapshots
List<ChapterSnapshot> snapshots = project.getChapterSnapshots(chapter);
```
## Interacting with Chapters
```java
Project project;
Chapter chapter = project.getChapterById("chapter_id");
// Delete a chapter
chapter.deleteChapter(project.getProjectId());
// Convert a chapter
chapter.convertChapter(project.getProjectId());
// Get a chapter's snapshots
List<ChapterSnapshot> snapshots = chapter.getChapterSnapshots(project.getProjectId());
//
```
## Accessing Snapshot Audio
Accessing a ProjectSnapshot audio stream:
```java
Project project;
List<ProjectSnapshot> projectSnapshots = project.getSnapshots();
ProjectSnapshot first = projectSnapshots.get(0);
InputStream audio = first.getAudioStream();
```
Accessing a ChapterSnapshot audio stream:
```java
Project project;
Chapter chapter;
List<ChapterSnapshot> chapterSnapshots = project.getChapterSnapshots(chapter);
ChapterSnapshot first = chapterSnapshots.get(0);
InputStream audio = first.getAudioStream();
```
Both ProjectSnapshot and ChapterSnapshot are of type Snapshot.
- - -
## Samples
A `Sample` is used as the training data for a given `Voice` model.
### Accessing Voice Samples
@@ -186,7 +425,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
@@ -205,6 +444,19 @@ To get your ElevenLabs generation `History`, you can utilize `History#get()`. (Y
History history = History.get();
```
### Getting all History Items
The History endpoint accepts page size parameters and a start-after-history-id parameter. We can use this to fetch all of our HistoryItems.
```java
History history = History.get(); // the latest history object
Optional<History> hist = Optional.of(history);
List<HistoryItem> items = new ArrayList();
do {
items.addAll(hist.get().getHistoryItems());
hist = hist.get().next();
} while(hist.isPresent() && hist.hasMore());
```
### Getting a History Item
To retrieve a `HistoryItem` from your `History`, you can use `History#getHistoryItem(String itemId)`.
```java
@@ -214,11 +466,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
@@ -236,11 +488,15 @@ 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();
```
- - -
### Projects
The `Projects`
- - -
## User Management
@@ -259,77 +515,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, GenerationState state)
```
```java
public enum GenerationState {
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,
AccountStatus 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 AccountStatus {
TRIALING,
ACTIVE,
INCOMPLETE,
INCOMPLETE_EXPIRED,
PAST_DUE,
CANCELED,
UNPAID,
FREE;
}
```
- - -
@@ -340,8 +527,21 @@ If you like what you see, give it a star! :)
- - -
## Todo
I will probably rework the 2 new builders I added when I added projects support. Their usage should be more clear, though the documentation covers their use cases I believe.
- - -
#### Unit Testing
*Todo*
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 🥂

100
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,17 +25,42 @@
<tag>HEAD</tag>
</scm>
<distributionManagement>
<repository>
<profiles>
<profile>
<id>github</id>
<name>GitHub AndrewCPU Apache Maven Packages</name>
<url>https://maven.pkg.github.com/AndrewCPU/elevenlabs-api</url>
</repository>
</distributionManagement>
<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>2.0-SNAPSHOT</version>
<version>2.7.8</version>
<properties>
<maven.compiler.source>11</maven.compiler.source>
@@ -54,17 +80,17 @@
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.4.1</version>
<version>2.15.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.13.4</version>
<version>2.15.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.13.4</version>
<version>2.15.3</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
@@ -94,6 +120,20 @@
<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>
@@ -114,6 +154,46 @@
</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

@@ -1,126 +1,83 @@
package net.andrewcpu.elevenlabs;
import net.andrewcpu.elevenlabs.model.history.History;
import net.andrewcpu.elevenlabs.model.history.HistoryItem;
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.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.net.ElevenRequest;
import net.andrewcpu.elevenlabs.net.history.*;
import net.andrewcpu.elevenlabs.net.models.GetModelsRequest;
import net.andrewcpu.elevenlabs.net.samples.DeleteSampleRequest;
import net.andrewcpu.elevenlabs.net.samples.GetSampleRequest;
import net.andrewcpu.elevenlabs.net.tts.PostTextToSpeechRequest;
import net.andrewcpu.elevenlabs.net.tts.PostTextToSpeechStreamedRequest;
import net.andrewcpu.elevenlabs.net.user.GetSubscriptionRequest;
import net.andrewcpu.elevenlabs.net.user.GetUserRequest;
import net.andrewcpu.elevenlabs.net.voices.*;
import net.andrewcpu.elevenlabs.util.ElevenNetworkUtil;
import java.io.File;
import java.io.InputStream;
import java.util.List;
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonIgnore;
import net.andrewcpu.elevenlabs.api.impl.*;
public class ElevenLabs {
private static String API_KEY = null;
private static HistoryAPI historyAPI;
private static ModelsAPI modelsAPI;
private static ProjectsAPI projectsAPI;
private static SampleAPI sampleAPI;
private static SpeechToSpeechAPI speechToSpeechAPI;
private static TextToSpeechAPI textToSpeechAPI;
private static UserAPI userAPI;
private static VoiceAPI voiceAPI;
private static AudioNativeAPI audioNativeAPI;
public static String getApiKey() {
return API_KEY;
}
private static String defaultModel = "eleven_monolingual_v1";
public static String getDefaultModel() {
return defaultModel;
}
public static void setDefaultModel(String defaultModel) {
ElevenLabs.defaultModel = defaultModel;
}
public static void setApiKey(String apiKey) {
API_KEY = apiKey;
initializeSubclasses();
}
private static <T> T sendRequest(ElevenRequest<T> request) {
return ElevenNetworkUtil.sendRequest(request.getType(),request.getEndpoint(), request.getPayload(),request.getResponseClass());
private static void initializeSubclasses() {
ElevenLabs.historyAPI = new HistoryAPI();
ElevenLabs.modelsAPI = new ModelsAPI();
ElevenLabs.projectsAPI = new ProjectsAPI();
ElevenLabs.sampleAPI = new SampleAPI();
ElevenLabs.speechToSpeechAPI = new SpeechToSpeechAPI();
ElevenLabs.textToSpeechAPI = new TextToSpeechAPI();
ElevenLabs.userAPI = new UserAPI();
ElevenLabs.voiceAPI = new VoiceAPI();
ElevenLabs.audioNativeAPI = new AudioNativeAPI();
}
public static History getHistory() {
return sendRequest(new GetHistoryRequest());
public static AudioNativeAPI getAudioNativeAPI() {
return audioNativeAPI;
}
public static User getUser() {
return sendRequest(new GetUserRequest());
public static HistoryAPI getHistoryAPI() {
return historyAPI;
}
public static Subscription getSubscription() {
return sendRequest(new GetSubscriptionRequest());
public static ModelsAPI getModelsAPI() {
return modelsAPI;
}
public static HistoryItem getHistoryItem(String historyItemId) {
return sendRequest(new GetHistoryItemByIdRequest(historyItemId));
public static ProjectsAPI getProjectsAPI() {
return projectsAPI;
}
public static String deleteHistoryItem(String historyItemId) {
return sendRequest(new DeleteHistoryItemRequest(historyItemId));
public static SampleAPI getSampleAPI() {
return sampleAPI;
}
public static File getHistoryItemAudio(String historyItemId) {
return sendRequest(new GetHistoryItemAudioRequest(historyItemId));
public static SpeechToSpeechAPI getSpeechToSpeechAPI() {
return speechToSpeechAPI;
}
public static File getHistoryItemAudio(String... historyItemIds) {
return sendRequest(new PostDownloadHistoryItemsRequest(historyItemIds));
public static TextToSpeechAPI getTextToSpeechAPI() {
return textToSpeechAPI;
}
public static String deleteSample(String voiceId, String sampleId) {
return sendRequest(new DeleteSampleRequest(voiceId, sampleId));
public static UserAPI getUserAPI() {
return userAPI;
}
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 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 InputStream generateTextToSpeechStreamed(String voiceId, String text, String modelId, VoiceSettings voiceSettings) {
return sendRequest(new PostTextToSpeechStreamedRequest(voiceId, new TextToSpeechRequest(text, modelId, voiceSettings)));
public static VoiceAPI getVoiceAPI() {
return voiceAPI;
}
}

View File

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

View File

@@ -0,0 +1,13 @@
package net.andrewcpu.elevenlabs.api;
import net.andrewcpu.elevenlabs.requests.ElevenLabsRequest;
import net.andrewcpu.elevenlabs.util.ElevenNetworkUtil;
public abstract class ElevenLabsAPI {
public ElevenLabsAPI() {
}
protected <T> T sendRequest(ElevenLabsRequest<T> request) {
return ElevenNetworkUtil.sendRequest(request.getType(),request.getEndpoint(), request.getPayload(),request.getResponseClass());
}
}

View File

@@ -0,0 +1,12 @@
package net.andrewcpu.elevenlabs.api.impl;
import net.andrewcpu.elevenlabs.api.ElevenLabsAPI;
import net.andrewcpu.elevenlabs.model.request.CreateAudioNativeProjectRequest;
import net.andrewcpu.elevenlabs.model.response.CreateAudioEnabledProjectModelResponse;
import net.andrewcpu.elevenlabs.requests.audionative.PostCreateAudioNativeProjectRequest;
public class AudioNativeAPI extends ElevenLabsAPI {
public CreateAudioEnabledProjectModelResponse createAudioEnabledProject(CreateAudioNativeProjectRequest request) {
return sendRequest(new PostCreateAudioNativeProjectRequest(request));
}
}

View File

@@ -0,0 +1,39 @@
package net.andrewcpu.elevenlabs.api.impl;
import net.andrewcpu.elevenlabs.api.ElevenLabsAPI;
import net.andrewcpu.elevenlabs.model.history.History;
import net.andrewcpu.elevenlabs.model.history.HistoryItem;
import net.andrewcpu.elevenlabs.requests.history.*;
import java.io.File;
public class HistoryAPI extends ElevenLabsAPI {
public History getHistory() {
return sendRequest(new GetHistoryRequest());
}
public History getHistory(int pageSize, String afterHistoryId) {
return sendRequest(new GetHistoryRequest(pageSize, afterHistoryId));
}
public History getHistory(String afterHistoryId) {
return sendRequest(new GetHistoryRequest(afterHistoryId));
}
public HistoryItem getHistoryItem(String historyItemId) {
return sendRequest(new GetHistoryItemByIdRequest(historyItemId));
}
public String deleteHistoryItem(String historyItemId) {
return sendRequest(new DeleteHistoryItemRequest(historyItemId));
}
public File getHistoryItemAudio(String historyItemId) {
return sendRequest(new GetHistoryItemAudioRequest(historyItemId));
}
public File getHistoryItemAudio(String... historyItemIds) {
return sendRequest(new PostDownloadHistoryItemsRequest(historyItemIds));
}
}

View File

@@ -0,0 +1,12 @@
package net.andrewcpu.elevenlabs.api.impl;
import net.andrewcpu.elevenlabs.api.ElevenLabsAPI;
import net.andrewcpu.elevenlabs.model.response.GenerationTypeModel;
import net.andrewcpu.elevenlabs.requests.models.GetModelsRequest;
public class ModelsAPI extends ElevenLabsAPI {
public GenerationTypeModel[] getAvailableModels() {
return sendRequest(new GetModelsRequest());
}
}

View File

@@ -0,0 +1,67 @@
package net.andrewcpu.elevenlabs.api.impl;
import net.andrewcpu.elevenlabs.api.ElevenLabsAPI;
import net.andrewcpu.elevenlabs.model.projects.Chapter;
import net.andrewcpu.elevenlabs.model.projects.ChapterSnapshot;
import net.andrewcpu.elevenlabs.model.projects.Project;
import net.andrewcpu.elevenlabs.model.projects.ProjectSnapshot;
import net.andrewcpu.elevenlabs.model.request.AddProjectRequest;
import net.andrewcpu.elevenlabs.requests.projects.*;
import java.io.InputStream;
import java.util.List;
public class ProjectsAPI extends ElevenLabsAPI {
public List<Project> getProjects() {
return sendRequest(new GetProjectsRequest()).getProjects();
}
public Project addProject(AddProjectRequest addProjectRequest) {
return sendRequest(new PostAddProjectRequest(addProjectRequest)).getProject();
}
public Project getProject(String id) {
return sendRequest(new GetProjectByIdRequest(id));
}
public String deleteProject(String projectId) {
return sendRequest(new DeleteProjectByIdRequest(projectId));
}
public String convertProject(String projectId) {
return sendRequest(new PostConvertProjectRequest(projectId));
}
public List<ProjectSnapshot> getProjectSnapshots(String projectId) {
return sendRequest(new GetProjectSnapshotsRequest(projectId)).getSnapshots();
}
public InputStream getProjectSnapshotAudioStream(String projectId, String projectSnapshotId) {
return sendRequest(new PostStreamProjectSnapshotAudioRequest(projectId, projectSnapshotId));
}
public List<Chapter> getChapters(String projectId) {
return sendRequest(new GetProjectChaptersRequest(projectId)).getChapters();
}
public Chapter getChapterById(String projectId, String chapterId) {
return sendRequest(new GetChapterByIdRequest(projectId, chapterId));
}
public String deleteChapter(String projectId, String chapterId) {
return sendRequest(new DeleteChapterByIdRequest(projectId, chapterId));
}
public String convertChapter(String projectId, String chapterId) {
return sendRequest(new PostConvertChapterRequest(projectId, chapterId));
}
public List<ChapterSnapshot> getChapterSnapshots(String projectId, String chapterId) {
return sendRequest(new GetChapterSnapshotsRequest(projectId, chapterId)).getSnapshots();
}
public InputStream getChapterSnapshotAudioStream(String projectId, String chapterId, String chapterSnapshotId) {
return sendRequest(new PostStreamChapterSnapshotAudioRequest(projectId, chapterId, chapterSnapshotId));
}
}

View File

@@ -0,0 +1,18 @@
package net.andrewcpu.elevenlabs.api.impl;
import net.andrewcpu.elevenlabs.api.ElevenLabsAPI;
import net.andrewcpu.elevenlabs.requests.samples.DeleteSampleRequest;
import net.andrewcpu.elevenlabs.requests.samples.GetSampleRequest;
import java.io.File;
public class SampleAPI extends ElevenLabsAPI {
public String deleteSample(String voiceId, String sampleId) {
return sendRequest(new DeleteSampleRequest(voiceId, sampleId));
}
public File getAudioSample(String voiceId, String sampleId) {
return sendRequest(new GetSampleRequest(voiceId, sampleId));
}
}

View File

@@ -0,0 +1,47 @@
package net.andrewcpu.elevenlabs.api.impl;
import net.andrewcpu.elevenlabs.api.ElevenLabsAPI;
import net.andrewcpu.elevenlabs.enums.ElevenLabsVoiceModel;
import net.andrewcpu.elevenlabs.enums.StreamLatencyOptimization;
import net.andrewcpu.elevenlabs.model.voice.VoiceSettings;
import net.andrewcpu.elevenlabs.requests.sts.PostSpeechToSpeechRequest;
import net.andrewcpu.elevenlabs.requests.sts.PostSpeechToSpeechStreamedRequest;
import java.io.File;
import java.io.InputStream;
public class SpeechToSpeechAPI extends ElevenLabsAPI {
public File generateSpeechToSpeech(String voiceId, VoiceSettings voiceSettings, String modelId, File audio) {
return generateSpeechToSpeech(voiceId, voiceSettings, modelId, audio, StreamLatencyOptimization.getDefault());
}
public File generateSpeechToSpeech(String voiceId, VoiceSettings voiceSettings, String modelId, File audio, StreamLatencyOptimization latencyOptimization) {
return sendRequest(new PostSpeechToSpeechRequest(voiceId, voiceSettings,audio, modelId, latencyOptimization));
}
public InputStream generateSpeechToSpeechStream(String voiceId, VoiceSettings voiceSettings, String modelId, File audio, StreamLatencyOptimization streamLatencyOptimization) {
return sendRequest(new PostSpeechToSpeechStreamedRequest(voiceId, voiceSettings, audio, modelId, streamLatencyOptimization));
}
public InputStream generateSpeechToSpeechStream(String voiceId, VoiceSettings voiceSettings, String modelId, File audio) {
return generateSpeechToSpeechStream(voiceId, voiceSettings, modelId, audio, StreamLatencyOptimization.getDefault());
}
public File generateSpeechToSpeech(String voiceId, VoiceSettings voiceSettings, ElevenLabsVoiceModel model, File audio) {
return generateSpeechToSpeech(voiceId, voiceSettings, model.getModelId(), audio, StreamLatencyOptimization.getDefault());
}
public File generateSpeechToSpeech(String voiceId, VoiceSettings voiceSettings, ElevenLabsVoiceModel model, File audio, StreamLatencyOptimization latencyOptimization) {
return sendRequest(new PostSpeechToSpeechRequest(voiceId, voiceSettings,audio, model.getModelId(), latencyOptimization));
}
public InputStream generateSpeechToSpeechStream(String voiceId, VoiceSettings voiceSettings, ElevenLabsVoiceModel model, File audio, StreamLatencyOptimization streamLatencyOptimization) {
return sendRequest(new PostSpeechToSpeechStreamedRequest(voiceId, voiceSettings, audio, model.getModelId(), streamLatencyOptimization));
}
public InputStream generateSpeechToSpeechStream(String voiceId, VoiceSettings voiceSettings, ElevenLabsVoiceModel model, File audio) {
return generateSpeechToSpeechStream(voiceId, voiceSettings, model.getModelId(), audio, StreamLatencyOptimization.getDefault());
}
}

View File

@@ -0,0 +1,31 @@
package net.andrewcpu.elevenlabs.api.impl;
import net.andrewcpu.elevenlabs.api.ElevenLabsAPI;
import net.andrewcpu.elevenlabs.enums.GeneratedAudioOutputFormat;
import net.andrewcpu.elevenlabs.enums.StreamLatencyOptimization;
import net.andrewcpu.elevenlabs.model.request.TextToSpeechRequest;
import net.andrewcpu.elevenlabs.model.voice.VoiceSettings;
import net.andrewcpu.elevenlabs.requests.tts.PostTextToSpeechRequest;
import net.andrewcpu.elevenlabs.requests.tts.PostTextToSpeechStreamedRequest;
import java.io.File;
import java.io.InputStream;
public class TextToSpeechAPI extends ElevenLabsAPI {
public File generateTextToSpeech(String voiceId, String text, String modelId, VoiceSettings voiceSettings) {
return sendRequest(new PostTextToSpeechRequest(voiceId, new TextToSpeechRequest(text, modelId, voiceSettings)));
}
public 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 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 InputStream generateTextToSpeechStreamed(String voiceId, String text, String modelId, VoiceSettings voiceSettings) {
return sendRequest(new PostTextToSpeechStreamedRequest(voiceId, new TextToSpeechRequest(text, modelId, voiceSettings)));
}
}

View File

@@ -0,0 +1,19 @@
package net.andrewcpu.elevenlabs.api.impl;
import net.andrewcpu.elevenlabs.api.ElevenLabsAPI;
import net.andrewcpu.elevenlabs.model.user.Subscription;
import net.andrewcpu.elevenlabs.model.user.User;
import net.andrewcpu.elevenlabs.requests.user.GetSubscriptionRequest;
import net.andrewcpu.elevenlabs.requests.user.GetUserRequest;
public class UserAPI extends ElevenLabsAPI {
public User getUser() {
return sendRequest(new GetUserRequest());
}
public Subscription getSubscription() {
return sendRequest(new GetSubscriptionRequest());
}
}

View File

@@ -0,0 +1,55 @@
package net.andrewcpu.elevenlabs.api.impl;
import net.andrewcpu.elevenlabs.api.ElevenLabsAPI;
import net.andrewcpu.elevenlabs.model.response.CreateVoiceResponse;
import net.andrewcpu.elevenlabs.model.response.ProjectsModelResponse;
import net.andrewcpu.elevenlabs.model.voice.Voice;
import net.andrewcpu.elevenlabs.model.voice.VoiceSettings;
import net.andrewcpu.elevenlabs.requests.projects.GetProjectsRequest;
import net.andrewcpu.elevenlabs.requests.voices.*;
import java.io.File;
import java.util.List;
import java.util.Map;
public class VoiceAPI extends ElevenLabsAPI {
public List<Voice> getVoices() {
return sendRequest(new GetVoicesRequest()).getVoices();
}
public VoiceSettings getDefaultVoiceSettings() {
return sendRequest(new GetDefaultVoiceSettingsRequest());
}
public VoiceSettings getVoiceSettings(String voiceId) {
return sendRequest(new GetVoiceSettingsRequest(voiceId));
}
public Voice getVoice(String voiceId) {
return sendRequest(new GetVoiceRequest(voiceId));
}
public Voice getVoice(String voiceId, boolean withSettings) {
return sendRequest(new GetVoiceRequest(voiceId, withSettings));
}
public ProjectsModelResponse getProjects() {
return sendRequest(new GetProjectsRequest());
}
public String deleteVoice(String voiceId) {
return sendRequest(new DeleteVoiceRequest(voiceId));
}
public String editVoiceSettings(String voiceId, VoiceSettings settings) {
return sendRequest(new PostEditVoiceSettingsRequest(voiceId, settings));
}
public CreateVoiceResponse createVoice(String name, File[] files, String description, Map<String, String> labels) {
return sendRequest(new PostAddVoiceRequest(name, files, description, labels));
}
public String editVoice(String voiceId, String name, File[] files, String description, Map<String, String> labels) {
return sendRequest(new PostEditVoiceRequest(voiceId, name, files, description, labels));
}
}

View File

@@ -0,0 +1,11 @@
package net.andrewcpu.elevenlabs.builders;
public class SpeechGenerationBuilder {
public static SpeechToSpeechBuilder speechToSpeech() {
return new SpeechToSpeechBuilder();
}
public static TextToSpeechBuilder textToSpeech() {
return new TextToSpeechBuilder();
}
}

View File

@@ -0,0 +1,15 @@
package net.andrewcpu.elevenlabs.builders;
import net.andrewcpu.elevenlabs.builders.impl.s2s.SpeechToSpeechFileBuilder;
import net.andrewcpu.elevenlabs.builders.impl.s2s.SpeechToSpeechStreamedBuilder;
public class SpeechToSpeechBuilder {
public SpeechToSpeechStreamedBuilder streamed() {
return new SpeechToSpeechStreamedBuilder();
}
public SpeechToSpeechFileBuilder file() {
return new SpeechToSpeechFileBuilder();
}
}

View File

@@ -0,0 +1,15 @@
package net.andrewcpu.elevenlabs.builders;
import net.andrewcpu.elevenlabs.builders.impl.tts.TextToSpeechFileBuilder;
import net.andrewcpu.elevenlabs.builders.impl.tts.TextToSpeechStreamedBuilder;
public class TextToSpeechBuilder {
public TextToSpeechStreamedBuilder streamed() {
return new TextToSpeechStreamedBuilder();
}
public TextToSpeechFileBuilder file() {
return new TextToSpeechFileBuilder();
}
}

View File

@@ -0,0 +1,79 @@
package net.andrewcpu.elevenlabs.builders.abstracts;
import net.andrewcpu.elevenlabs.ElevenLabs;
import net.andrewcpu.elevenlabs.builders.SpeechToSpeechBuilder;
import net.andrewcpu.elevenlabs.builders.TextToSpeechBuilder;
import net.andrewcpu.elevenlabs.enums.ElevenLabsVoiceModel;
import net.andrewcpu.elevenlabs.enums.GeneratedAudioOutputFormat;
import net.andrewcpu.elevenlabs.enums.StreamLatencyOptimization;
import net.andrewcpu.elevenlabs.model.voice.Voice;
import net.andrewcpu.elevenlabs.model.voice.VoiceSettings;
public abstract class AbstractSpeechGenerationBuilder<T, F> {
private String voiceId;
private VoiceSettings voiceSettings;
private String modelId = ElevenLabs.getDefaultModel();
private StreamLatencyOptimization latencyOptimization = StreamLatencyOptimization.getDefault();
private GeneratedAudioOutputFormat generatedAudioOutputFormat = GeneratedAudioOutputFormat.getDefault();
public abstract T self();
public abstract F build();
public GeneratedAudioOutputFormat getGeneratedAudioOutputFormat() {
return generatedAudioOutputFormat;
}
public T setGeneratedAudioOutputFormat(GeneratedAudioOutputFormat generatedAudioOutputFormat) {
this.generatedAudioOutputFormat = generatedAudioOutputFormat;
return self();
}
public String getVoiceId() {
return voiceId;
}
public T setVoiceId(String voiceId) {
this.voiceId = voiceId;
return self();
}
public VoiceSettings getVoiceSettings() {
return voiceSettings;
}
public T setVoiceSettings(VoiceSettings voiceSettings) {
this.voiceSettings = voiceSettings;
return self();
}
public String getModelId() {
return modelId;
}
public T setModelId(String modelId) {
this.modelId = modelId;
return self();
}
public StreamLatencyOptimization getLatencyOptimization() {
return latencyOptimization;
}
public T setLatencyOptimization(StreamLatencyOptimization latencyOptimization) {
this.latencyOptimization = latencyOptimization;
return self();
}
public T setVoice(Voice voice) {
this.voiceId = voice.getVoiceId();
if(voice.getSettings() == null) voice.fetchSettings();
this.voiceSettings = voice.getSettings();
return self();
}
public T setModel(ElevenLabsVoiceModel voiceModel) {
this.modelId = voiceModel.getModelId();
return self();
}
}

View File

@@ -0,0 +1,32 @@
package net.andrewcpu.elevenlabs.builders.impl.s2s;
import net.andrewcpu.elevenlabs.ElevenLabs;
import net.andrewcpu.elevenlabs.builders.abstracts.AbstractSpeechGenerationBuilder;
import java.io.File;
public class SpeechToSpeechFileBuilder extends AbstractSpeechGenerationBuilder<SpeechToSpeechFileBuilder, File> {
private File inputFile;
public File getInputFile() {
return inputFile;
}
public SpeechToSpeechFileBuilder setInputFile(File inputFile) {
this.inputFile = inputFile;
return this;
}
@Override
public SpeechToSpeechFileBuilder self() {
return this;
}
@Override
public File build() {
return ElevenLabs
.getSpeechToSpeechAPI()
.generateSpeechToSpeech(getVoiceId(), getVoiceSettings(),getModelId(),getInputFile(),getLatencyOptimization());
}
}

View File

@@ -0,0 +1,32 @@
package net.andrewcpu.elevenlabs.builders.impl.s2s;
import net.andrewcpu.elevenlabs.ElevenLabs;
import net.andrewcpu.elevenlabs.builders.abstracts.AbstractSpeechGenerationBuilder;
import java.io.File;
import java.io.InputStream;
public class SpeechToSpeechStreamedBuilder extends AbstractSpeechGenerationBuilder<SpeechToSpeechStreamedBuilder, InputStream> {
private File inputFile;
public File getInputFile() {
return inputFile;
}
public SpeechToSpeechStreamedBuilder setInputFile(File inputFile) {
this.inputFile = inputFile;
return this;
}
@Override
public SpeechToSpeechStreamedBuilder self() {
return this;
}
@Override
public InputStream build() {
return ElevenLabs
.getSpeechToSpeechAPI()
.generateSpeechToSpeechStream(getVoiceId(), getVoiceSettings(),getModelId(),getInputFile(),getLatencyOptimization());
}
}

View File

@@ -0,0 +1,31 @@
package net.andrewcpu.elevenlabs.builders.impl.tts;
import net.andrewcpu.elevenlabs.ElevenLabs;
import net.andrewcpu.elevenlabs.builders.abstracts.AbstractSpeechGenerationBuilder;
import java.io.File;
public class TextToSpeechFileBuilder extends AbstractSpeechGenerationBuilder<TextToSpeechFileBuilder, File> {
private String text;
public String getText() {
return text;
}
public TextToSpeechFileBuilder setText(String text) {
this.text = text;
return this;
}
@Override
public TextToSpeechFileBuilder self() {
return this;
}
@Override
public File build() {
return ElevenLabs
.getTextToSpeechAPI()
.generateTextToSpeech(getVoiceId(), getText(),getModelId(), getGeneratedAudioOutputFormat(),getLatencyOptimization(), getVoiceSettings());
}
}

View File

@@ -0,0 +1,31 @@
package net.andrewcpu.elevenlabs.builders.impl.tts;
import net.andrewcpu.elevenlabs.ElevenLabs;
import net.andrewcpu.elevenlabs.builders.abstracts.AbstractSpeechGenerationBuilder;
import java.io.InputStream;
public class TextToSpeechStreamedBuilder extends AbstractSpeechGenerationBuilder<TextToSpeechStreamedBuilder, InputStream> {
private String text;
public String getText() {
return text;
}
public TextToSpeechStreamedBuilder setText(String text) {
this.text = text;
return this;
}
@Override
public TextToSpeechStreamedBuilder self() {
return this;
}
@Override
public InputStream build() {
return ElevenLabs
.getTextToSpeechAPI()
.generateTextToSpeechStreamed(getVoiceId(), getText(),getModelId(), getGeneratedAudioOutputFormat(),getLatencyOptimization(), getVoiceSettings());
}
}

View File

@@ -0,0 +1,32 @@
package net.andrewcpu.elevenlabs.enums;
public enum ElevenLabsVoiceModel {
ELEVEN_MULTILINGUAL_V2("eleven_multilingual_v2", "Eleven Multilingual v2"),
ELEVEN_ENGLISH_V2("eleven_english_v2", "Eleven English v2"),
ELEVEN_MULTILINGUAL_V1("eleven_multilingual_v1", "Eleven Multilingual v1"),
ELEVEN_MONOLINGUAL_V1("eleven_monolingual_v1", "Eleven English v1"),
ELEVEN_TURBO_V2("eleven_turbo_v2", "Eleven Turbo v2"),
ELEVEN_ENGLISH_STS_V2("eleven_english_sts_v2", "Eleven English v2", true),
;
final String modelId;
final String modelLabel;
final boolean supportsSpeechToSpeech;
ElevenLabsVoiceModel(String modelId, String modelLabel, boolean supportsSpeechToSpeech) {
this.modelId = modelId;
this.modelLabel = modelLabel;
this.supportsSpeechToSpeech = supportsSpeechToSpeech;
}
ElevenLabsVoiceModel(String modelId, String modelLabel) {
this(modelId, modelLabel, false);
}
public String getModelId() {
return modelId;
}
public String getModelLabel() {
return modelLabel;
}
}

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

@@ -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

@@ -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

@@ -2,11 +2,32 @@ 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;
import java.util.Optional;
public class History extends ElevenModel {
public static final int DEFAULT_HISTORY_PAGE_SIZE = 100;
public static History get() {
return ElevenLabs.getHistoryAPI().getHistory();
}
public static History get(String afterHistoryId) {
return ElevenLabs.getHistoryAPI().getHistory(afterHistoryId);
}
public static History get(int pageSize, String afterHistoryId) {
return ElevenLabs.getHistoryAPI().getHistory(pageSize, afterHistoryId);
}
public static History get(int pageSize) {
return ElevenLabs.getHistoryAPI().getHistory(pageSize, null);
}
@JsonProperty("history")
private List<HistoryItem> historyItems;
@@ -23,6 +44,16 @@ public class History extends ElevenModel {
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;
@@ -38,6 +69,21 @@ public class History extends ElevenModel {
return hasMore;
}
public File downloadHistory(String... historyIds) {
return ElevenLabs.getHistoryAPI().getHistoryItemAudio(historyIds);
}
public File downloadHistory(HistoryItem... items) {
return ElevenLabs.getHistoryAPI().getHistoryItemAudio(Arrays.stream(items).map(HistoryItem::getHistoryItemId).toArray(String[]::new));
}
public Optional<History> next(int pageSize) {
if(!hasMore) {
return Optional.empty();
}
return Optional.of(ElevenLabs.getHistoryAPI().getHistory(pageSize, lastHistoryItemId));
}
@JsonIgnore
@Override
public String toString() {

View File

@@ -2,8 +2,11 @@ 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 net.andrewcpu.elevenlabs.util.ElevenNetworkUtil;
import java.io.File;
import java.util.Map;
public class HistoryItem extends ElevenModel {
@@ -121,6 +124,18 @@ public class HistoryItem extends ElevenModel {
return feedback;
}
public String delete() {
return ElevenLabs.getHistoryAPI().deleteHistoryItem(historyItemId);
}
public File downloadAudio() {
return ElevenLabs.getHistoryAPI().getHistoryItemAudio(historyItemId);
}
public String getDownloadUrl() {
return ElevenNetworkUtil.getHistoryItemUrl(historyItemId);
}
@JsonIgnore
@Override
public String toString() {

View File

@@ -0,0 +1,107 @@
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 Chapter extends ElevenModel {
public String deleteChapter(String projectId) {
return ElevenLabs.getProjectsAPI().deleteChapter(projectId, chapterId);
}
public String convertChapter(String projectId) {
return ElevenLabs.getProjectsAPI().convertChapter(projectId, chapterId);
}
public List<ChapterSnapshot> getChapterSnapshots(String projectId) {
return ElevenLabs.getProjectsAPI().getChapterSnapshots(projectId, chapterId);
}
@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;
public Chapter() {
}
public Chapter(String chapterId, String name, long lastConversionDateUnix, double conversionProgress, boolean canBeDownloaded, String state, Statistics statistics) {
this.chapterId = chapterId;
this.name = name;
this.lastConversionDateUnix = lastConversionDateUnix;
this.conversionProgress = conversionProgress;
this.canBeDownloaded = canBeDownloaded;
this.state = state;
this.statistics = statistics;
}
@JsonIgnore
public String getChapterId() {
return chapterId;
}
@JsonIgnore
public String getName() {
return name;
}
@JsonIgnore
public long getLastConversionDateUnix() {
return lastConversionDateUnix;
}
@JsonIgnore
public double getConversionProgress() {
return conversionProgress;
}
@JsonIgnore
public boolean isCanBeDownloaded() {
return canBeDownloaded;
}
@JsonIgnore
public String getState() {
return state;
}
@JsonIgnore
public Statistics getStatistics() {
return statistics;
}
@Override
@JsonIgnore
public String toString() {
return "Chapter{" +
"chapterId='" + chapterId + '\'' +
", name='" + name + '\'' +
", lastConversionDateUnix=" + lastConversionDateUnix +
", conversionProgress=" + conversionProgress +
", canBeDownloaded=" + canBeDownloaded +
", state='" + state + '\'' +
", statistics=" + statistics +
'}';
}
}

View File

@@ -0,0 +1,55 @@
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.io.InputStream;
public class ChapterSnapshot extends Snapshot {
@Override
public InputStream getAudioStream() {
return ElevenLabs.getProjectsAPI().getChapterSnapshotAudioStream(projectId, chapterId, chapterSnapshotId);
}
public ChapterSnapshot() {
super();
}
public ChapterSnapshot(String chapterSnapshotId, String projectId, String chapterId, long createdAtUnix, String name) {
super(projectId, createdAtUnix, name);
this.chapterSnapshotId = chapterSnapshotId;
this.chapterId = chapterId;
}
@JsonProperty("chapter_snapshot_id")
private String chapterSnapshotId;
@JsonProperty("chapter_id")
private String chapterId;
@JsonIgnore
public String getChapterSnapshotId() {
return chapterSnapshotId;
}
@JsonIgnore
public String getChapterId() {
return chapterId;
}
@Override
@JsonIgnore
public String toString() {
return "ChapterSnapshot{" +
"chapterSnapshotId='" + chapterSnapshotId + '\'' +
", projectId='" + projectId + '\'' +
", chapterId='" + chapterId + '\'' +
", createdAtUnix=" + createdAtUnix +
", name='" + name + '\'' +
'}';
}
}

View File

@@ -0,0 +1,171 @@
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 net.andrewcpu.elevenlabs.model.request.AddProjectRequest;
import java.util.List;
public class Project extends ElevenModel {
public static List<Project> getProjects() {
return ElevenLabs.getProjectsAPI().getProjects();
}
public static Project addProject(AddProjectRequest builder) {
return ElevenLabs.getProjectsAPI().addProject(builder);
}
public static Project getProjectById(String projectId) {
return ElevenLabs.getProjectsAPI().getProject(projectId);
}
public List<Chapter> fetchUpdatedChapters() {
this.chapters = ElevenLabs.getProjectsAPI().getChapters(projectId);
return this.chapters;
}
public String deleteChapter(Chapter chapter) {
return chapter.deleteChapter(projectId);
}
public String convertChapter(Chapter chapter) {
return chapter.convertChapter(projectId);
}
public List<ChapterSnapshot> getChapterSnapshots(Chapter chapter) {
return chapter.getChapterSnapshots(projectId);
}
public String deleteProject() {
return ElevenLabs.getProjectsAPI().deleteProject(projectId);
}
public String convertProject() {
return ElevenLabs.getProjectsAPI().convertProject(projectId);
}
public List<ProjectSnapshot> getSnapshots() {
return ElevenLabs.getProjectsAPI().getProjectSnapshots(projectId);
}
public Chapter getChapterById(String chapterId) {
return ElevenLabs.getProjectsAPI().getChapterById(projectId, chapterId);
}
public Project(String projectId, String name, long unixCreateDate, String defaultTitleVoiceId, String defaultParagraphVoiceId, String defaultModelId, long lastConversionDateUnix, boolean canBeDownloaded, String state, List<Chapter> chapters) {
this.projectId = projectId;
this.name = name;
this.unixCreateDate = unixCreateDate;
this.defaultTitleVoiceId = defaultTitleVoiceId;
this.defaultParagraphVoiceId = defaultParagraphVoiceId;
this.defaultModelId = defaultModelId;
this.lastConversionDateUnix = lastConversionDateUnix;
this.canBeDownloaded = canBeDownloaded;
this.state = state;
this.chapters = chapters;
}
public Project() {
}
@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,45 @@
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.io.InputStream;
public class ProjectSnapshot extends Snapshot {
@Override
public InputStream getAudioStream() {
return ElevenLabs.getProjectsAPI().getProjectSnapshotAudioStream(projectId, projectSnapshotId);
}
public ProjectSnapshot() {
super();
}
public ProjectSnapshot(String projectSnapshotId, String projectId, long createdAtUnix, String name) {
super(projectId, createdAtUnix, name);
this.projectSnapshotId = projectSnapshotId;
}
@JsonProperty("project_snapshot_id")
private String projectSnapshotId;
@JsonIgnore
public String getProjectSnapshotId() {
return projectSnapshotId;
}
@Override
public String toString() {
return "ProjectSnapshot{" +
"projectSnapshotId='" + projectSnapshotId + '\'' +
", projectId='" + projectId + '\'' +
", createdAtUnix=" + createdAtUnix +
", name='" + name + '\'' +
'}';
}
}

View File

@@ -0,0 +1,54 @@
package net.andrewcpu.elevenlabs.model.projects;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import net.andrewcpu.elevenlabs.model.ElevenModel;
import java.io.InputStream;
public abstract class Snapshot extends ElevenModel {
@JsonProperty("project_id")
protected String projectId;
@JsonProperty("created_at_unix")
protected long createdAtUnix;
@JsonProperty("name")
protected String name;
public Snapshot(String projectId, long createdAtUnix, String name) {
this.projectId = projectId;
this.createdAtUnix = createdAtUnix;
this.name = name;
}
public Snapshot() {
}
public abstract InputStream getAudioStream();
@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{" +
"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,118 @@
package net.andrewcpu.elevenlabs.model.request;
import net.andrewcpu.elevenlabs.enums.ProjectOutputQuality;
import java.io.File;
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,118 @@
package net.andrewcpu.elevenlabs.model.request;
import net.andrewcpu.elevenlabs.model.ElevenModel;
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,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

@@ -1,7 +1,6 @@
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;
@@ -24,23 +23,46 @@ public class GenerationTypeModel extends ElevenModel {
@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, int tokenCostFactor, String description, 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;
}
@@ -87,17 +109,54 @@ public class GenerationTypeModel extends ElevenModel {
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 "ModelResponse{" +
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

@@ -1,7 +1,6 @@
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;

View File

@@ -2,9 +2,15 @@ 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.getUserAPI().getSubscription();
}
@JsonProperty("tier")
private String tier;

View File

@@ -2,9 +2,15 @@ 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.getUserAPI().getUser();
}
@JsonProperty("subscription")
private Subscription subscription;

View File

@@ -2,8 +2,11 @@ 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;
@@ -20,6 +23,9 @@ public class Sample extends ElevenModel {
@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;
@@ -56,6 +62,17 @@ public class Sample extends ElevenModel {
return hash;
}
public File downloadAudio() {
return ElevenLabs.getSampleAPI().getAudioSample(voice.getVoiceId(), sampleId);
}
/**
* Warning! This will delete the sample.
*/
public String delete() {
return ElevenLabs.getSampleAPI().deleteSample(voice.getVoiceId(), sampleId);
}
@Override
@JsonIgnore
public String toString() {

View File

@@ -2,13 +2,31 @@ 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.getVoiceAPI().getVoices();
}
public static Voice getVoice(String voiceId) {
return ElevenLabs.getVoiceAPI().getVoice(voiceId);
}
public static Voice getVoice(String voiceId, boolean withSettings) {
return ElevenLabs.getVoiceAPI().getVoice(voiceId, withSettings);
}
@JsonProperty("voice_id")
private String voiceId;
@@ -42,6 +60,9 @@ public class Voice extends ElevenModel {
@JsonProperty("sharing")
private Sharing sharing;
@JsonProperty("high_quality_base_model_ids")
private List<String> highQualityBaseModelIds;
@JsonIgnore
public String getVoiceId() {
return voiceId;
@@ -54,7 +75,7 @@ public class Voice extends ElevenModel {
@JsonIgnore
public List<Sample> getSamples() {
return samples;
return samples.stream().peek(s -> s.voice = this).collect(Collectors.toList());
}
@JsonIgnore
@@ -97,8 +118,155 @@ public class Voice extends ElevenModel {
return sharing;
}
@JsonIgnore
/**
* Warning! This will delete the voice.
*/
public String delete() {
return ElevenLabs.getVoiceAPI().deleteVoice(voiceId);
}
public VoiceSettings fetchSettings() {
this.settings = ElevenLabs.getVoiceAPI().getVoiceSettings(voiceId);
return settings;
}
public VoiceSettings updateVoiceSettings(VoiceSettings voiceSettings) {
ElevenLabs.getVoiceAPI().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.getTextToSpeechAPI().generateTextToSpeech(voiceId, text, model, settings);
}
public File generate(String text, String model, VoiceSettings settings) {
return ElevenLabs.getTextToSpeechAPI().generateTextToSpeech(voiceId, text, model, settings);
}
public File generate(String text, String model, VoiceSettings settings, GeneratedAudioOutputFormat outputFormat, StreamLatencyOptimization streamLatencyOptimization) {
return ElevenLabs.getTextToSpeechAPI().generateTextToSpeech(voiceId,text, model, outputFormat,streamLatencyOptimization, settings);
}
public File generate(String text, String model, VoiceSettings settings, GeneratedAudioOutputFormat outputFormat) {
return ElevenLabs.getTextToSpeechAPI().generateTextToSpeech(voiceId,text, model, outputFormat,StreamLatencyOptimization.getDefault(), settings);
}
public File generate(String text, VoiceSettings settings, GeneratedAudioOutputFormat outputFormat) {
return ElevenLabs.getTextToSpeechAPI().generateTextToSpeech(voiceId, text, ElevenLabs.getDefaultModel(), outputFormat,StreamLatencyOptimization.getDefault(), settings);
}
public File generate(String text, VoiceSettings settings, StreamLatencyOptimization streamLatencyOptimization) {
return ElevenLabs.getTextToSpeechAPI().generateTextToSpeech(voiceId, text, ElevenLabs.getDefaultModel(), GeneratedAudioOutputFormat.getDefault(),streamLatencyOptimization, settings);
}
public File generate(String text, VoiceSettings settings, GeneratedAudioOutputFormat outputFormat, StreamLatencyOptimization streamLatencyOptimization) {
return ElevenLabs.getTextToSpeechAPI().generateTextToSpeech(voiceId, text, ElevenLabs.getDefaultModel(), outputFormat,streamLatencyOptimization, settings);
}
public File generate(String text, GeneratedAudioOutputFormat outputFormat, StreamLatencyOptimization streamLatencyOptimization) {
return ElevenLabs.getTextToSpeechAPI().generateTextToSpeech(voiceId, text, ElevenLabs.getDefaultModel(), outputFormat,streamLatencyOptimization, settings);
}
public File generate(String text, StreamLatencyOptimization streamLatencyOptimization) {
return ElevenLabs.getTextToSpeechAPI().generateTextToSpeech(voiceId, text, ElevenLabs.getDefaultModel(), GeneratedAudioOutputFormat.getDefault(), streamLatencyOptimization, settings);
}
public File generate(String text, VoiceSettings settings) {
return ElevenLabs.getTextToSpeechAPI().generateTextToSpeech(voiceId, text, ElevenLabs.getDefaultModel(), settings);
}
public File generate(String text) {
return ElevenLabs.getTextToSpeechAPI().generateTextToSpeech(voiceId, text, ElevenLabs.getDefaultModel(), settings);
}
public InputStream generateStream(String text, String model) {
return ElevenLabs.getTextToSpeechAPI().generateTextToSpeechStreamed(voiceId, text, model, settings);
}
public InputStream generateStream(String text, String model, VoiceSettings settings) {
return ElevenLabs.getTextToSpeechAPI().generateTextToSpeechStreamed(voiceId, text, model, settings);
}
public InputStream generateStream(String text, VoiceSettings settings) {
return ElevenLabs.getTextToSpeechAPI().generateTextToSpeechStreamed(voiceId, text, ElevenLabs.getDefaultModel(), settings);
}
public InputStream generateStream(String text) {
return ElevenLabs.getTextToSpeechAPI().generateTextToSpeechStreamed(voiceId, text, ElevenLabs.getDefaultModel(), settings);
}
public InputStream generateStream(String text, String model, GeneratedAudioOutputFormat generatedAudioOutputFormat, StreamLatencyOptimization streamLatencyOptimization) {
return ElevenLabs.getTextToSpeechAPI().generateTextToSpeechStreamed(voiceId, text, model, generatedAudioOutputFormat, streamLatencyOptimization, settings);
}
public InputStream generateStream(String text, String model, GeneratedAudioOutputFormat generatedAudioOutputFormat, StreamLatencyOptimization streamLatencyOptimization, VoiceSettings settings) {
return ElevenLabs.getTextToSpeechAPI().generateTextToSpeechStreamed(voiceId, text, model, generatedAudioOutputFormat, streamLatencyOptimization, settings);
}
public InputStream generateStream(String text, VoiceSettings settings, GeneratedAudioOutputFormat generatedAudioOutputFormat, StreamLatencyOptimization streamLatencyOptimization) {
return ElevenLabs.getTextToSpeechAPI().generateTextToSpeechStreamed(voiceId, text, ElevenLabs.getDefaultModel(), generatedAudioOutputFormat, streamLatencyOptimization, settings);
}
public InputStream generateStream(String text, GeneratedAudioOutputFormat generatedAudioOutputFormat, StreamLatencyOptimization streamLatencyOptimization) {
return ElevenLabs.getTextToSpeechAPI().generateTextToSpeechStreamed(voiceId, text, ElevenLabs.getDefaultModel(), generatedAudioOutputFormat, streamLatencyOptimization, settings);
}
public InputStream generateStream(String text, String model, StreamLatencyOptimization streamLatencyOptimization) {
return ElevenLabs.getTextToSpeechAPI().generateTextToSpeechStreamed(voiceId, text, model, GeneratedAudioOutputFormat.getDefault(), streamLatencyOptimization, settings);
}
public InputStream generateStream(String text, String model, StreamLatencyOptimization streamLatencyOptimization, VoiceSettings settings) {
return ElevenLabs.getTextToSpeechAPI().generateTextToSpeechStreamed(voiceId, text, model, GeneratedAudioOutputFormat.getDefault(), streamLatencyOptimization, settings);
}
public InputStream generateStream(String text, VoiceSettings settings, StreamLatencyOptimization streamLatencyOptimization) {
return ElevenLabs.getTextToSpeechAPI().generateTextToSpeechStreamed(voiceId, text, ElevenLabs.getDefaultModel(), GeneratedAudioOutputFormat.getDefault(), streamLatencyOptimization, settings);
}
public InputStream generateStream(String text, StreamLatencyOptimization streamLatencyOptimization) {
return ElevenLabs.getTextToSpeechAPI().generateTextToSpeechStreamed(voiceId, text, ElevenLabs.getDefaultModel(), GeneratedAudioOutputFormat.getDefault(), streamLatencyOptimization, settings);
}
public File speechToSpeech(File audioFile, StreamLatencyOptimization latencyOptimization, String modelId, VoiceSettings voiceSettings) {
return ElevenLabs.getSpeechToSpeechAPI().generateSpeechToSpeech(voiceId, voiceSettings, modelId, audioFile, latencyOptimization);
}
public File speechToSpeech(File audioFile, StreamLatencyOptimization latencyOptimization, String modelId) {
return speechToSpeech(audioFile, latencyOptimization, modelId, settings);
}
public File speechToSpeech(File audioFile, String modelId) {
return speechToSpeech(audioFile, StreamLatencyOptimization.getDefault(), modelId,settings);
}
public InputStream speechToSpeechStream(File audioFile, StreamLatencyOptimization latencyOptimization, String modelId, VoiceSettings voiceSettings) {
return ElevenLabs.getSpeechToSpeechAPI().generateSpeechToSpeechStream(voiceId, voiceSettings,modelId,audioFile,latencyOptimization);
}
public InputStream speechToSpeechStream(File audioFile, StreamLatencyOptimization latencyOptimization, String modelId) {
return speechToSpeechStream(audioFile,latencyOptimization,modelId,settings);
}
public InputStream speechToSpeechStream(File audioFile, String modelId) {
return speechToSpeechStream(audioFile, StreamLatencyOptimization.getDefault(),modelId);
}
@Override
@JsonIgnore
public String toString() {
return "Voice{" +
"voiceId='" + voiceId + '\'' +
@@ -112,6 +280,7 @@ public class Voice extends ElevenModel {
", 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.getVoiceAPI().createVoice(name, files.toArray(File[]::new), description, labels);
return Voice.getVoice(createVoiceResponse.getVoiceId(), true);
}
public Voice edit() {
ElevenLabs.getVoiceAPI().editVoice(voice.getVoiceId(), name, files.toArray(File[]::new), description, labels);
voice = voice.refresh();
return voice;
}
}

View File

@@ -2,18 +2,37 @@ 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.getVoiceAPI().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() {
@@ -30,11 +49,23 @@ public class VoiceSettings extends ElevenModel {
}
@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

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

View File

@@ -1,32 +0,0 @@
package net.andrewcpu.elevenlabs.net;
import net.andrewcpu.elevenlabs.HttpRequestType;
import net.andrewcpu.elevenlabs.util.ElevenNetworkUtil;
public abstract class ElevenRequest<T> {
private HttpRequestType type;
private String endpoint;
private Class<T> responseClass;
public ElevenRequest(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;
}
public Class<T> getResponseClass() {
return responseClass;
}
public abstract Object getPayload();
}

View File

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

View File

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

View File

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

View File

@@ -1,15 +0,0 @@
package net.andrewcpu.elevenlabs.net.history;
import net.andrewcpu.elevenlabs.model.history.History;
import net.andrewcpu.elevenlabs.net.GetRequest;
public class GetHistoryRequest extends GetRequest<History> {
public GetHistoryRequest() {
super("v1/history", History.class);
}
@Override
public Object getPayload() {
return null;
}
}

View File

@@ -1,19 +0,0 @@
package net.andrewcpu.elevenlabs.net.tts;
import net.andrewcpu.elevenlabs.model.request.TextToSpeechRequest;
import net.andrewcpu.elevenlabs.net.PostRequest;
import java.io.File;
public class PostTextToSpeechRequest extends PostRequest<File> {
private TextToSpeechRequest request;
public PostTextToSpeechRequest(String voiceId, TextToSpeechRequest request) {
super("v1/text-to-speech/" + voiceId, File.class);
this.request = request;
}
@Override
public Object getPayload() {
return request;
}
}

View File

@@ -1,20 +0,0 @@
package net.andrewcpu.elevenlabs.net.tts;
import net.andrewcpu.elevenlabs.model.request.TextToSpeechRequest;
import net.andrewcpu.elevenlabs.net.PostRequest;
import java.io.File;
import java.io.InputStream;
public class PostTextToSpeechStreamedRequest extends PostRequest<InputStream> {
private TextToSpeechRequest request;
public PostTextToSpeechStreamedRequest(String voiceId, TextToSpeechRequest request) {
super("v1/text-to-speech/" + voiceId, InputStream.class);
this.request = request;
}
@Override
public Object getPayload() {
return request;
}
}

View File

@@ -0,0 +1,14 @@
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);
}
@Override
public Object getPayload() {
return null;
}
}

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 final HttpRequestType type;
private final String endpoint;
private final 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() {
Map<String, String> params = getQueryParameters();
if(params.isEmpty()) return endpoint;
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,14 @@
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);
}
@Override
public Object getPayload() {
return null;
}
}

View File

@@ -0,0 +1,18 @@
package net.andrewcpu.elevenlabs.requests;
import java.util.HashMap;
import java.util.Map;
public abstract class PostMultipartRequest<T> extends PostRequest<T> {
public PostMultipartRequest(String endpoint, Class<T> clazz) {
super(endpoint, clazz);
}
public abstract Map<String, Object> getMultipartParts(Map<String, Object> map);
@Override
public Object getPayload() {
return getMultipartParts(new HashMap<>());
}
}

View File

@@ -0,0 +1,14 @@
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);
}
@Override
public Object getPayload() {
return null;
}
}

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.PostMultipartRequest;
import net.andrewcpu.elevenlabs.requests.PostRequest;
import java.util.HashMap;
import java.util.Map;
public class PostCreateAudioNativeProjectRequest extends PostMultipartRequest<CreateAudioEnabledProjectModelResponse> {
private final CreateAudioNativeProjectRequest request;
public PostCreateAudioNativeProjectRequest(CreateAudioNativeProjectRequest request) {
super("v1/audio-native", CreateAudioEnabledProjectModelResponse.class);
this.request = request;
}
@Override
public Map<String, Object> getMultipartParts(Map<String, Object> payload) {
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

@@ -1,14 +1,9 @@
package net.andrewcpu.elevenlabs.net.history;
package net.andrewcpu.elevenlabs.requests.history;
import net.andrewcpu.elevenlabs.net.DeleteRequest;
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;
}
}

View File

@@ -1,6 +1,6 @@
package net.andrewcpu.elevenlabs.net.history;
package net.andrewcpu.elevenlabs.requests.history;
import net.andrewcpu.elevenlabs.net.GetRequest;
import net.andrewcpu.elevenlabs.requests.GetRequest;
import java.io.File;
@@ -8,9 +8,4 @@ public class GetHistoryItemAudioRequest extends GetRequest<File> {
public GetHistoryItemAudioRequest(String historyItemId) {
super("v1/history/" + historyItemId + "/audio", File.class);
}
@Override
public Object getPayload() {
return null;
}
}

View File

@@ -1,15 +1,10 @@
package net.andrewcpu.elevenlabs.net.history;
package net.andrewcpu.elevenlabs.requests.history;
import net.andrewcpu.elevenlabs.model.history.HistoryItem;
import net.andrewcpu.elevenlabs.net.GetRequest;
import net.andrewcpu.elevenlabs.requests.GetRequest;
public class GetHistoryItemByIdRequest extends GetRequest<HistoryItem> {
public GetHistoryItemByIdRequest(String historyId) {
super("v1/history/" + historyId, HistoryItem.class);
}
@Override
public Object getPayload() {
return null;
}
}

View File

@@ -0,0 +1,38 @@
package net.andrewcpu.elevenlabs.requests.history;
import net.andrewcpu.elevenlabs.model.history.History;
import net.andrewcpu.elevenlabs.requests.GetRequest;
import java.util.HashMap;
import java.util.Map;
import static net.andrewcpu.elevenlabs.model.history.History.DEFAULT_HISTORY_PAGE_SIZE;
public class GetHistoryRequest extends GetRequest<History> {
private final int pageSize;
private final String startAfterHistoryId;
public GetHistoryRequest() {
this(DEFAULT_HISTORY_PAGE_SIZE, null);
}
public GetHistoryRequest(String startAfterHistoryId) {
this(DEFAULT_HISTORY_PAGE_SIZE, startAfterHistoryId);
}
public GetHistoryRequest(int pageSize, String startAfterHistoryId) {
super("v1/history", History.class);
this.pageSize = pageSize;
this.startAfterHistoryId = startAfterHistoryId;
}
@Override
public Map<String, String> getQueryParameters() {
Map<String, String> params = new HashMap<>();
params.put("page_size", String.valueOf(pageSize));
if(startAfterHistoryId != null) {
params.put("start_after_history_item_id", startAfterHistoryId);
}
return params;
}
}

View File

@@ -1,14 +1,14 @@
package net.andrewcpu.elevenlabs.net.history;
package net.andrewcpu.elevenlabs.requests.history;
import net.andrewcpu.elevenlabs.model.history.HistoryItemList;
import net.andrewcpu.elevenlabs.net.PostRequest;
import net.andrewcpu.elevenlabs.requests.PostRequest;
import java.io.File;
import java.util.Arrays;
import java.util.stream.Collectors;
public class PostDownloadHistoryItemsRequest extends PostRequest<File> {
private String[] historyItemIds;
private final String[] historyItemIds;
public PostDownloadHistoryItemsRequest(String... historyItemIds) {
super("v1/history/download", File.class);
this.historyItemIds = historyItemIds;

View File

@@ -1,15 +1,10 @@
package net.andrewcpu.elevenlabs.net.models;
package net.andrewcpu.elevenlabs.requests.models;
import net.andrewcpu.elevenlabs.model.response.GenerationTypeModel;
import net.andrewcpu.elevenlabs.net.GetRequest;
import net.andrewcpu.elevenlabs.requests.GetRequest;
public class GetModelsRequest extends GetRequest<GenerationTypeModel[]> {
public GetModelsRequest() {
super("v1/models", GenerationTypeModel[].class);
}
@Override
public Object getPayload() {
return null;
}
}

View File

@@ -0,0 +1,9 @@
package net.andrewcpu.elevenlabs.requests.projects;
import net.andrewcpu.elevenlabs.requests.DeleteRequest;
public class DeleteChapterByIdRequest extends DeleteRequest<String> {
public DeleteChapterByIdRequest(String projectId, String chapterId) {
super("v1/projects/" + projectId + "/chapters/" + chapterId, String.class);
}
}

View File

@@ -0,0 +1,9 @@
package net.andrewcpu.elevenlabs.requests.projects;
import net.andrewcpu.elevenlabs.requests.DeleteRequest;
public class DeleteProjectByIdRequest extends DeleteRequest<String> {
public DeleteProjectByIdRequest(String projectId) {
super("v1/projects/" + projectId, String.class);
}
}

View File

@@ -0,0 +1,10 @@
package net.andrewcpu.elevenlabs.requests.projects;
import net.andrewcpu.elevenlabs.model.projects.Chapter;
import net.andrewcpu.elevenlabs.requests.GetRequest;
public class GetChapterByIdRequest extends GetRequest<Chapter> {
public GetChapterByIdRequest(String projectId, String chapterId) {
super("v1/projects/" + projectId + "/chapters/" + chapterId, Chapter.class);
}
}

View File

@@ -0,0 +1,10 @@
package net.andrewcpu.elevenlabs.requests.projects;
import net.andrewcpu.elevenlabs.model.response.ChapterSnapshotsModelResponse;
import net.andrewcpu.elevenlabs.requests.GetRequest;
public class GetChapterSnapshotsRequest extends GetRequest<ChapterSnapshotsModelResponse> {
public GetChapterSnapshotsRequest(String projectId, String chapterId) {
super("v1/projects/" + projectId + "/chapters/" + chapterId + "/snapshots", ChapterSnapshotsModelResponse.class);
}
}

View File

@@ -0,0 +1,10 @@
package net.andrewcpu.elevenlabs.requests.projects;
import net.andrewcpu.elevenlabs.model.projects.Project;
import net.andrewcpu.elevenlabs.requests.GetRequest;
public class GetProjectByIdRequest extends GetRequest<Project> {
public GetProjectByIdRequest(String projectId) {
super("v1/projects/" + projectId, Project.class);
}
}

View File

@@ -0,0 +1,10 @@
package net.andrewcpu.elevenlabs.requests.projects;
import net.andrewcpu.elevenlabs.model.response.ChaptersModelResponse;
import net.andrewcpu.elevenlabs.requests.GetRequest;
public class GetProjectChaptersRequest extends GetRequest<ChaptersModelResponse> {
public GetProjectChaptersRequest(String projectId) {
super("v1/projects/" + projectId + "/chapters", ChaptersModelResponse.class);
}
}

View File

@@ -0,0 +1,10 @@
package net.andrewcpu.elevenlabs.requests.projects;
import net.andrewcpu.elevenlabs.model.response.ProjectSnapshotsModelResponse;
import net.andrewcpu.elevenlabs.requests.GetRequest;
public class GetProjectSnapshotsRequest extends GetRequest<ProjectSnapshotsModelResponse> {
public GetProjectSnapshotsRequest(String projectId) {
super("v1/projects/" + projectId + "/snapshots", ProjectSnapshotsModelResponse.class);
}
}

View File

@@ -0,0 +1,10 @@
package net.andrewcpu.elevenlabs.requests.projects;
import net.andrewcpu.elevenlabs.model.response.ProjectsModelResponse;
import net.andrewcpu.elevenlabs.requests.GetRequest;
public class GetProjectsRequest extends GetRequest<ProjectsModelResponse> {
public GetProjectsRequest() {
super("v1/projects", ProjectsModelResponse.class);
}
}

View File

@@ -0,0 +1,33 @@
package net.andrewcpu.elevenlabs.requests.projects;
import net.andrewcpu.elevenlabs.model.request.AddProjectRequest;
import net.andrewcpu.elevenlabs.model.response.ProjectModelResponse;
import net.andrewcpu.elevenlabs.requests.PostMultipartRequest;
import net.andrewcpu.elevenlabs.requests.PostRequest;
import java.util.HashMap;
import java.util.Map;
public class PostAddProjectRequest extends PostMultipartRequest<ProjectModelResponse> {
private final AddProjectRequest request;
public PostAddProjectRequest(AddProjectRequest request) {
super("v1/projects/add", ProjectModelResponse.class);
this.request = request;
}
@Override
public Map<String, Object> getMultipartParts(Map<String, Object> payload) {
payload.put("name",request.getName());
payload.put("from_url", request.getFromUrl());
payload.put("from_document", request.getFromDocument());
payload.put("default_title_voice_id", request.getDefaultTitleVoiceId());
payload.put("default_paragraph_voice_id", request.getDefaultParagraphVoiceId());
payload.put("default_model_id", request.getDefaultModelId());
payload.put("quality_preset", request.getProjectOutputQuality().name().toLowerCase());
payload.put("title", request.getTitle());
payload.put("author", request.getAuthor());
payload.put("isbn_number", request.getIsbnNumber());
payload.put("acx_volume_normalization", request.isAcxVolumeNormalization());
return payload;
}
}

View File

@@ -0,0 +1,9 @@
package net.andrewcpu.elevenlabs.requests.projects;
import net.andrewcpu.elevenlabs.requests.PostRequest;
public class PostConvertChapterRequest extends PostRequest<String> {
public PostConvertChapterRequest(String projectId, String chapterId) {
super("v1/projects/" + projectId + "/chapters/" + chapterId + "/convert", String.class);
}
}

View File

@@ -0,0 +1,9 @@
package net.andrewcpu.elevenlabs.requests.projects;
import net.andrewcpu.elevenlabs.requests.PostRequest;
public class PostConvertProjectRequest extends PostRequest<String> {
public PostConvertProjectRequest(String projectId) {
super("v1/projects/" + projectId + "/convert", String.class);
}
}

View File

@@ -0,0 +1,11 @@
package net.andrewcpu.elevenlabs.requests.projects;
import net.andrewcpu.elevenlabs.requests.PostRequest;
import java.io.InputStream;
public class PostStreamChapterSnapshotAudioRequest extends PostRequest<InputStream> {
public PostStreamChapterSnapshotAudioRequest(String projectId, String chapterId, String chapterSnapshotId) {
super("v1/projects/" + projectId + "/chapters/" + chapterId + "/snapshots/" + chapterSnapshotId + "/stream", InputStream.class);
}
}

View File

@@ -0,0 +1,11 @@
package net.andrewcpu.elevenlabs.requests.projects;
import net.andrewcpu.elevenlabs.requests.PostRequest;
import java.io.InputStream;
public class PostStreamProjectSnapshotAudioRequest extends PostRequest<InputStream> {
public PostStreamProjectSnapshotAudioRequest(String projectId, String snapshotId) {
super("v1/projects/" + projectId + "/snapshots/" + snapshotId + "/stream", InputStream.class);
}
}

View File

@@ -1,14 +1,9 @@
package net.andrewcpu.elevenlabs.net.samples;
package net.andrewcpu.elevenlabs.requests.samples;
import net.andrewcpu.elevenlabs.net.DeleteRequest;
import net.andrewcpu.elevenlabs.requests.DeleteRequest;
public class DeleteSampleRequest extends DeleteRequest<String> {
public DeleteSampleRequest(String voiceId, String sampleId) {
super("v1/voices/" + voiceId + "/samples/" + sampleId, String.class);
}
@Override
public Object getPayload() {
return null;
}
}

View File

@@ -1,6 +1,6 @@
package net.andrewcpu.elevenlabs.net.samples;
package net.andrewcpu.elevenlabs.requests.samples;
import net.andrewcpu.elevenlabs.net.GetRequest;
import net.andrewcpu.elevenlabs.requests.GetRequest;
import java.io.File;
@@ -8,9 +8,4 @@ public class GetSampleRequest extends GetRequest<File> {
public GetSampleRequest(String voiceId, String sampleId) {
super("v1/voices/" + voiceId + "/samples/" + sampleId + "/audio", File.class);
}
@Override
public Object getPayload() {
return null;
}
}

View File

@@ -0,0 +1,47 @@
package net.andrewcpu.elevenlabs.requests.sts;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import net.andrewcpu.elevenlabs.enums.StreamLatencyOptimization;
import net.andrewcpu.elevenlabs.model.voice.VoiceSettings;
import net.andrewcpu.elevenlabs.requests.PostRequest;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
public class PostSpeechToSpeechRequest extends PostRequest<File> {
private final StreamLatencyOptimization latencyOptimization;
private final String modelId;
private final VoiceSettings voiceSettings;
private final File audio;
public PostSpeechToSpeechRequest(String voiceId, VoiceSettings voiceSettings, File audio, String modelId, StreamLatencyOptimization latencyOptimization) {
super("v1/speech-to-speech/" + voiceId, File.class);
this.latencyOptimization = latencyOptimization;
this.voiceSettings = voiceSettings;
this.audio = audio;
this.modelId = modelId;
}
@Override
public Map<String, String> getQueryParameters() {
Map<String, String> opts = new HashMap<>();
opts.put("optimize_streaming_latency",String.valueOf(latencyOptimization.getValue()));
return opts;
}
@Override
public Object getPayload() {
Map<String, Object> body = new HashMap<>();
String voiceSettingsString;
try {
voiceSettingsString = new ObjectMapper().writeValueAsString(voiceSettings);
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
body.put("audio", audio);
body.put("model_id", modelId);
body.put("voice_settings", voiceSettingsString);
return body;
}
}

View File

@@ -0,0 +1,48 @@
package net.andrewcpu.elevenlabs.requests.sts;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import net.andrewcpu.elevenlabs.enums.StreamLatencyOptimization;
import net.andrewcpu.elevenlabs.model.voice.VoiceSettings;
import net.andrewcpu.elevenlabs.requests.PostRequest;
import java.io.File;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
public class PostSpeechToSpeechStreamedRequest extends PostRequest<InputStream> {
private final StreamLatencyOptimization latencyOptimization;
private final String modelId;
private final VoiceSettings voiceSettings;
private final File audio;
public PostSpeechToSpeechStreamedRequest(String voiceId, VoiceSettings voiceSettings, File audio, String modelId, StreamLatencyOptimization latencyOptimization) {
super("v1/speech-to-speech/" + voiceId + "/stream", InputStream.class);
this.latencyOptimization = latencyOptimization;
this.voiceSettings = voiceSettings;
this.audio = audio;
this.modelId = modelId;
}
@Override
public Map<String, String> getQueryParameters() {
Map<String, String> opts = new HashMap<>();
opts.put("optimize_streaming_latency",String.valueOf(latencyOptimization.getValue()));
return opts;
}
@Override
public Object getPayload() {
Map<String, Object> body = new HashMap<>();
String voiceSettingsString;
try {
voiceSettingsString = new ObjectMapper().writeValueAsString(voiceSettings);
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
body.put("audio", audio);
body.put("model_id", modelId);
body.put("voice_settings", voiceSettingsString);
return body;
}
}

View File

@@ -0,0 +1,58 @@
package net.andrewcpu.elevenlabs.requests.tts;
import net.andrewcpu.elevenlabs.enums.GeneratedAudioOutputFormat;
import net.andrewcpu.elevenlabs.enums.StreamLatencyOptimization;
import net.andrewcpu.elevenlabs.model.request.TextToSpeechRequest;
import net.andrewcpu.elevenlabs.requests.PostRequest;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
public class PostTextToSpeechRequest extends PostRequest<File> {
private final TextToSpeechRequest request;
private final StreamLatencyOptimization streamLatencyOptimization;
private final GeneratedAudioOutputFormat outputFormat;
public PostTextToSpeechRequest(String voiceId, TextToSpeechRequest request) {
super("v1/text-to-speech/" + voiceId, File.class);
this.request = request;
this.streamLatencyOptimization = StreamLatencyOptimization.getDefault();
this.outputFormat = GeneratedAudioOutputFormat.getDefault();
}
public PostTextToSpeechRequest(String voiceId, TextToSpeechRequest request, StreamLatencyOptimization streamLatencyOptimization) {
super("v1/text-to-speech/" + voiceId, File.class);
this.request = request;
this.streamLatencyOptimization = streamLatencyOptimization;
this.outputFormat = GeneratedAudioOutputFormat.getDefault();
}
public PostTextToSpeechRequest(String voiceId, TextToSpeechRequest request, StreamLatencyOptimization streamLatencyOptimization, GeneratedAudioOutputFormat generatedAudioOutputFormat) {
super("v1/text-to-speech/" + voiceId, File.class);
this.request = request;
this.streamLatencyOptimization = streamLatencyOptimization;
this.outputFormat = generatedAudioOutputFormat;
}
public PostTextToSpeechRequest(String voiceId, TextToSpeechRequest request, GeneratedAudioOutputFormat generatedAudioOutputFormat) {
super("v1/text-to-speech/" + voiceId, File.class);
this.request = request;
this.streamLatencyOptimization = StreamLatencyOptimization.getDefault();
this.outputFormat = generatedAudioOutputFormat;
}
@Override
public Object getPayload() {
return request;
}
@Override
public Map<String, String> getQueryParameters() {
Map<String, String> map = new HashMap<>();
map.put("optimize_streaming_latency", String.valueOf(streamLatencyOptimization.getValue()));
map.put("output_format", outputFormat.name().toLowerCase());
return map;
}
}

View File

@@ -0,0 +1,57 @@
package net.andrewcpu.elevenlabs.requests.tts;
import net.andrewcpu.elevenlabs.enums.GeneratedAudioOutputFormat;
import net.andrewcpu.elevenlabs.enums.StreamLatencyOptimization;
import net.andrewcpu.elevenlabs.model.request.TextToSpeechRequest;
import net.andrewcpu.elevenlabs.requests.PostRequest;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
public class PostTextToSpeechStreamedRequest extends PostRequest<InputStream> {
private final TextToSpeechRequest request;
private final StreamLatencyOptimization streamLatencyOptimization;
private final GeneratedAudioOutputFormat outputFormat;
public PostTextToSpeechStreamedRequest(String voiceId, TextToSpeechRequest request) {
super("v1/text-to-speech/" + voiceId, InputStream.class);
this.request = request;
this.streamLatencyOptimization = StreamLatencyOptimization.getDefault();
this.outputFormat = GeneratedAudioOutputFormat.getDefault();
}
public PostTextToSpeechStreamedRequest(String voiceId, TextToSpeechRequest request, StreamLatencyOptimization streamLatencyOptimization) {
super("v1/text-to-speech/" + voiceId, InputStream.class);
this.request = request;
this.streamLatencyOptimization = streamLatencyOptimization;
this.outputFormat = GeneratedAudioOutputFormat.getDefault();
}
public PostTextToSpeechStreamedRequest(String voiceId, TextToSpeechRequest request, StreamLatencyOptimization streamLatencyOptimization, GeneratedAudioOutputFormat generatedAudioOutputFormat) {
super("v1/text-to-speech/" + voiceId, InputStream.class);
this.request = request;
this.streamLatencyOptimization = streamLatencyOptimization;
this.outputFormat = generatedAudioOutputFormat;
}
public PostTextToSpeechStreamedRequest(String voiceId, TextToSpeechRequest request, GeneratedAudioOutputFormat generatedAudioOutputFormat) {
super("v1/text-to-speech/" + voiceId, InputStream.class);
this.request = request;
this.streamLatencyOptimization = StreamLatencyOptimization.getDefault();
this.outputFormat = generatedAudioOutputFormat;
}
@Override
public Map<String, String> getQueryParameters() {
Map<String, String> map = new HashMap<>();
map.put("optimize_streaming_latency", String.valueOf(streamLatencyOptimization.getValue()));
map.put("output_format", outputFormat.name().toLowerCase());
return map;
}
@Override
public Object getPayload() {
return request;
}
}

View File

@@ -1,16 +1,10 @@
package net.andrewcpu.elevenlabs.net.user;
package net.andrewcpu.elevenlabs.requests.user;
import net.andrewcpu.elevenlabs.model.user.Subscription;
import net.andrewcpu.elevenlabs.net.GetRequest;
import net.andrewcpu.elevenlabs.requests.GetRequest;
public class GetSubscriptionRequest extends GetRequest<Subscription> {
public GetSubscriptionRequest() {
super("v1/user/subscription", Subscription.class);
}
@Override
public Object getPayload() {
return null;
}
}

View File

@@ -1,15 +1,10 @@
package net.andrewcpu.elevenlabs.net.user;
package net.andrewcpu.elevenlabs.requests.user;
import net.andrewcpu.elevenlabs.model.user.User;
import net.andrewcpu.elevenlabs.net.GetRequest;
import net.andrewcpu.elevenlabs.requests.GetRequest;
public class GetUserRequest extends GetRequest<User> {
public GetUserRequest() {
super("v1/user", User.class);
}
@Override
public Object getPayload() {
return null;
}
}

View File

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

View File

@@ -1,15 +1,10 @@
package net.andrewcpu.elevenlabs.net.voices;
package net.andrewcpu.elevenlabs.requests.voices;
import net.andrewcpu.elevenlabs.model.voice.VoiceSettings;
import net.andrewcpu.elevenlabs.net.GetRequest;
import net.andrewcpu.elevenlabs.requests.GetRequest;
public class GetDefaultVoiceSettingsRequest extends GetRequest<VoiceSettings> {
public GetDefaultVoiceSettingsRequest() {
super("v1/voices/settings/default", VoiceSettings.class);
}
@Override
public Object getPayload() {
return null;
}
}

View File

@@ -1,26 +1,28 @@
package net.andrewcpu.elevenlabs.net.voices;
package net.andrewcpu.elevenlabs.requests.voices;
import net.andrewcpu.elevenlabs.model.voice.Voice;
import net.andrewcpu.elevenlabs.net.GetRequest;
import net.andrewcpu.elevenlabs.requests.GetRequest;
import java.util.HashMap;
import java.util.Map;
public class GetVoiceRequest extends GetRequest<Voice> {
private boolean withSettings;
private final boolean withSettings;
public GetVoiceRequest(String voiceId) {
this(voiceId, true);
}
public GetVoiceRequest(String voiceId, boolean withSettings) {
super( "v1/voices/" + voiceId, Voice.class);
this.withSettings = withSettings;
}
@Override
public Object getPayload() {
Map<String, Object> payload = new HashMap<>();
payload.put("with_settings", withSettings);
public Map<String, String> getQueryParameters() {
Map<String, String> payload = new HashMap<>();
payload.put("with_settings", String.valueOf(withSettings));
return payload;
}
}

View File

@@ -1,15 +1,10 @@
package net.andrewcpu.elevenlabs.net.voices;
package net.andrewcpu.elevenlabs.requests.voices;
import net.andrewcpu.elevenlabs.model.voice.VoiceSettings;
import net.andrewcpu.elevenlabs.net.GetRequest;
import net.andrewcpu.elevenlabs.requests.GetRequest;
public class GetVoiceSettingsRequest extends GetRequest<VoiceSettings> {
public GetVoiceSettingsRequest(String voiceId) {
super("v1/voices/" + voiceId + "/settings", VoiceSettings.class);
}
@Override
public Object getPayload() {
return null;
}
}

View File

@@ -1,15 +1,10 @@
package net.andrewcpu.elevenlabs.net.voices;
package net.andrewcpu.elevenlabs.requests.voices;
import net.andrewcpu.elevenlabs.model.response.VoiceModelResponse;
import net.andrewcpu.elevenlabs.net.GetRequest;
import net.andrewcpu.elevenlabs.requests.GetRequest;
public class GetVoicesRequest extends GetRequest<VoiceModelResponse> {
public GetVoicesRequest() {
super("v1/voices", VoiceModelResponse.class);
}
@Override
public Object getPayload() {
return null;
}
}

View File

@@ -1,17 +1,18 @@
package net.andrewcpu.elevenlabs.net.voices;
package net.andrewcpu.elevenlabs.requests.voices;
import net.andrewcpu.elevenlabs.model.response.CreateVoiceResponse;
import net.andrewcpu.elevenlabs.net.PostRequest;
import net.andrewcpu.elevenlabs.requests.PostMultipartRequest;
import net.andrewcpu.elevenlabs.requests.PostRequest;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
public class PostAddVoiceRequest extends PostRequest<CreateVoiceResponse> {
private String name;
private File[] samples;
private String description;
private Map<String, String> labels;
public class PostAddVoiceRequest extends PostMultipartRequest<CreateVoiceResponse> {
private final String name;
private final File[] samples;
private final String description;
private final Map<String, String> labels;
public PostAddVoiceRequest(String name, File[] samples, String description, Map<String, String> labels) {
super("v1/voices/add", CreateVoiceResponse.class);
this.name = name;
@@ -37,8 +38,7 @@ public class PostAddVoiceRequest extends PostRequest<CreateVoiceResponse> {
}
@Override
public Object getPayload() {
Map<String, Object> map = new HashMap<String, Object>();
public Map<String, Object> getMultipartParts(Map<String, Object> map) {
map.put("name", this.name);
map.put("files", this.samples);
map.put("description", this.description);

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