2 Commits
v29 ... v31

58 changed files with 491 additions and 382 deletions

View File

@@ -293,11 +293,11 @@ History(List<HistoryItem> history)
```java
History.HistoryItem(String historyItemId, String voiceId, String voiceName, String text,
long dateUnix, int characterCountChangeFrom, int characterCountChangeTo,
String contentType, String state)
String contentType, GenerationState state)
```
```java
public enum State {
public enum GenerationState {
CREATED,
DELETED,
PROCESSING;
@@ -311,8 +311,8 @@ User(Subscription subscription, boolean isNewUser, String xiApiKey)
```java
Subscription(String tier, int characterCount, int characterLimit, boolean canExtendCharacterLimit,
boolean allowedToExtendCharacterLimit, long nextCharacterCountResetUnix, int voiceLimit,
boolean canExtendVoiceLimit, boolean canUseInstantVoiceCloning, List<AvailableModel> availableModels,
String status, NextInvoice nextInvoice)
boolean canExtendVoiceLimit, boolean canUseInstantVoiceCloning, List<AvailableModel> availableModels,
AccountStatus status, NextInvoice nextInvoice)
```
```java
AvailableModel(String modelId, String displayName, List<SupportedLanguage> supportedLanguages)
@@ -324,7 +324,7 @@ SupportedLanguage(String isoCode, String displayName)
NextInvoice(int amountDueCents, long nextPaymentAttemptUnix)
```
```java
public enum Status {
public enum AccountStatus {
TRIALING,
ACTIVE,
INCOMPLETE,

View File

@@ -24,6 +24,14 @@
<tag>HEAD</tag>
</scm>
<distributionManagement>
<repository>
<id>github</id>
<name>GitHub AndrewCPU Apache Maven Packages</name>
<url>https://maven.pkg.github.com/AndrewCPU/elevenlabs-api</url>
</repository>
</distributionManagement>
<groupId>net.andrewcpu</groupId>
<artifactId>elevenlabs-api</artifactId>
<version>1.0-SNAPSHOT</version>

View File

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

View File

@@ -0,0 +1,31 @@
package net.andrewcpu.elevenlabs.api;
import net.andrewcpu.elevenlabs.api.net.requests.history.DeleteHistoryItemRequest;
import net.andrewcpu.elevenlabs.api.net.requests.history.DownloadHistoryRequest;
import net.andrewcpu.elevenlabs.api.net.requests.history.GetHistoryAudioRequest;
import net.andrewcpu.elevenlabs.api.net.requests.history.GetHistoryRequest;
import net.andrewcpu.elevenlabs.elements.voice.History;
import net.andrewcpu.elevenlabs.exceptions.ElevenLabsException;
import java.io.File;
import java.util.List;
import static net.andrewcpu.elevenlabs.ElevenLabsAPI.getRequestResult;
public class HistoryAPI {
public static History getHistory() throws ElevenLabsException {
return getRequestResult(new GetHistoryRequest());
}
public static File downloadHistory(List<String> historyIds, File outputFile) throws ElevenLabsException {
return getRequestResult(new DownloadHistoryRequest(historyIds, outputFile));
}
public static File getHistoryItemAudio(History.HistoryItem historyItem, File outputFile) throws ElevenLabsException {
return getRequestResult(new GetHistoryAudioRequest(historyItem.getHistoryItemId(), outputFile));
}
public static String deleteHistoryItem(History.HistoryItem historyItem) throws ElevenLabsException {
return getRequestResult(new DeleteHistoryItemRequest(historyItem.getHistoryItemId()));
}
}

View File

@@ -0,0 +1,36 @@
package net.andrewcpu.elevenlabs.api;
import net.andrewcpu.elevenlabs.api.net.requests.samples.DeleteSampleRequest;
import net.andrewcpu.elevenlabs.api.net.requests.samples.GetAudioSampleRequest;
import net.andrewcpu.elevenlabs.elements.voice.Sample;
import net.andrewcpu.elevenlabs.elements.voice.Voice;
import net.andrewcpu.elevenlabs.exceptions.ElevenLabsException;
import org.json.simple.JSONObject;
import java.io.File;
import static net.andrewcpu.elevenlabs.ElevenLabsAPI.getRequestResult;
public class SampleAPI {
public static JSONObject deleteSample(String voiceId, String sampleId) throws ElevenLabsException {
return getRequestResult(new DeleteSampleRequest(voiceId, sampleId));
}
public static JSONObject deleteSample(Voice voice, String sampleId) throws ElevenLabsException {
return deleteSample(voice.getVoiceId(), sampleId);
}
public static JSONObject deleteSample(String voiceId, Sample sample) throws ElevenLabsException {
return deleteSample(voiceId, sample.getSampleId());
}
public static JSONObject deleteSample(Voice voice, Sample sample) throws ElevenLabsException {
return deleteSample(voice.getVoiceId(), sample.getSampleId());
}
public static File getSampleAudio(String voiceId, String sampleId, File file) throws ElevenLabsException {
return getRequestResult(new GetAudioSampleRequest(voiceId, sampleId, file));
}
public static File getSampleAudio(Voice voice, Sample sample, File file) throws ElevenLabsException {
return getSampleAudio(voice.getVoiceId(), sample.getSampleId(), file);
}
}

View File

@@ -0,0 +1,20 @@
package net.andrewcpu.elevenlabs.api;
import net.andrewcpu.elevenlabs.api.net.requests.user.GetSubscriptionInfoRequest;
import net.andrewcpu.elevenlabs.api.net.requests.user.GetUserRequest;
import net.andrewcpu.elevenlabs.elements.user.Subscription;
import net.andrewcpu.elevenlabs.elements.user.User;
import net.andrewcpu.elevenlabs.exceptions.ElevenLabsException;
import static net.andrewcpu.elevenlabs.ElevenLabsAPI.getRequestResult;
public class UserAPI {
public static Subscription getSubscription() throws ElevenLabsException {
return getRequestResult(new GetSubscriptionInfoRequest());
}
public static User getUser() throws ElevenLabsException {
return getRequestResult(new GetUserRequest());
}
}

View File

@@ -0,0 +1,78 @@
package net.andrewcpu.elevenlabs.api;
import net.andrewcpu.elevenlabs.ElevenLabsAPI;
import net.andrewcpu.elevenlabs.api.net.requests.voices.*;
import net.andrewcpu.elevenlabs.api.net.requests.voices.settings.GetDefaultVoiceSettingsRequest;
import net.andrewcpu.elevenlabs.api.net.requests.voices.settings.GetVoiceSettingsRequest;
import net.andrewcpu.elevenlabs.api.net.requests.voices.settings.UpdateVoiceSettingsRequest;
import net.andrewcpu.elevenlabs.elements.voice.Voice;
import net.andrewcpu.elevenlabs.elements.voice.VoiceSettings;
import net.andrewcpu.elevenlabs.exceptions.ElevenLabsException;
import org.json.simple.JSONObject;
import java.io.File;
import java.util.List;
import java.util.Map;
import static net.andrewcpu.elevenlabs.ElevenLabsAPI.getRequestResult;
public class VoiceAPI {
public static VoiceSettings getDefaultVoiceSettings() throws ElevenLabsException {
return getRequestResult(new GetDefaultVoiceSettingsRequest());
}
public static File getTextToSpeech(String text, Voice voice, VoiceSettings settings, File outputFile) throws ElevenLabsException {
return getRequestResult(new GenerateTextToSpeechRequest(voice, settings, text, outputFile));
}
public static List<Voice> getVoices() throws ElevenLabsException {
return getRequestResult(new GetVoicesRequest());
}
public static Voice getVoice(String voiceId, boolean withSettings) throws ElevenLabsException {
return getRequestResult(new GetVoiceRequest(voiceId, withSettings));
}
public static Voice getVoice(String voiceId) throws ElevenLabsException {
return getVoice(voiceId, true);
}
public static VoiceSettings getVoiceSettings(String voiceId) throws ElevenLabsException {
return getRequestResult(new GetVoiceSettingsRequest(voiceId));
}
public static VoiceSettings getVoiceSettings(Voice voice) throws ElevenLabsException {
return getVoiceSettings(voice.getVoiceId());
}
public static boolean deleteVoice(Voice voice) throws ElevenLabsException {
return deleteVoice(voice.getVoiceId());
}
public static boolean deleteVoice(String voiceId) throws ElevenLabsException {
JSONObject result = getRequestResult(new DeleteVoiceRequest(voiceId));
if(result.containsKey("status") && result.get("status").equals("ok")){
return true;
}
return false;
}
public static JSONObject editVoice(Voice voice, VoiceSettings voiceSettings) throws ElevenLabsException {
return editVoice(voice.getVoiceId(), voiceSettings);
}
public static JSONObject editVoice(String voiceId, VoiceSettings settings) throws ElevenLabsException {
return getRequestResult(new UpdateVoiceSettingsRequest(voiceId, settings));
}
public static String createVoice(String name, Map<String, String> labels, List<File> files) throws ElevenLabsException {
CreateVoiceRequest request = new CreateVoiceRequest(name, files, labels);
return getRequestResult(request);
}
public static JSONObject editVoice(String voiceId, String name, Map<String, String> labels, List<File> files) throws ElevenLabsException {
EditVoiceRequest editVoiceRequest = new EditVoiceRequest(voiceId, name, files, labels);
return getRequestResult(editVoiceRequest);
}
}

View File

@@ -1,7 +1,7 @@
package net.andrewcpu.elevenlabs.api;
package net.andrewcpu.elevenlabs.api.net;
import net.andrewcpu.elevenlabs.api.multipart.MultipartForm;
import net.andrewcpu.elevenlabs.api.transformers.ResultTransformer;
import net.andrewcpu.elevenlabs.api.net.multipart.MultipartForm;
import net.andrewcpu.elevenlabs.api.net.transformers.ResultTransformer;
import net.andrewcpu.elevenlabs.enums.ContentType;
import net.andrewcpu.elevenlabs.enums.HTTPMethod;
import net.andrewcpu.elevenlabs.enums.ResponseType;

View File

@@ -1,4 +1,4 @@
package net.andrewcpu.elevenlabs.api;
package net.andrewcpu.elevenlabs.api.net;
import net.andrewcpu.elevenlabs.enums.ResponseType;
import net.andrewcpu.elevenlabs.exceptions.ElevenLabsExceptionBuilder;
@@ -15,12 +15,12 @@ import java.io.OutputStream;
import java.nio.charset.StandardCharsets;
public class ElevenLabsResponse<T> {
private final int responseCode;
private final InputStream errorStream;
private final InputStream successStream;
private final ElevenLabsRequest<T> request;
private JSONObject successful;
private JSONObject error;
private final InputStream successStream;
private JSONObject successful;
private final ElevenLabsRequest<T> request;
private final int responseCode;
private T resultingObject;
public ElevenLabsResponse(int responseCode, InputStream errorStream, InputStream successStream, ElevenLabsRequest<T> request) {

View File

@@ -1,4 +1,4 @@
package net.andrewcpu.elevenlabs.api.multipart;
package net.andrewcpu.elevenlabs.api.net.multipart;
import java.io.File;

View File

@@ -1,4 +1,4 @@
package net.andrewcpu.elevenlabs.api.multipart;
package net.andrewcpu.elevenlabs.api.net.multipart;
import java.util.ArrayList;
import java.util.Arrays;

View File

@@ -1,4 +1,4 @@
package net.andrewcpu.elevenlabs.api.multipart;
package net.andrewcpu.elevenlabs.api.net.multipart;
import java.io.File;

View File

@@ -1,7 +1,7 @@
package net.andrewcpu.elevenlabs.api.requests;
package net.andrewcpu.elevenlabs.api.net.requests;
import net.andrewcpu.elevenlabs.api.ElevenLabsRequest;
import net.andrewcpu.elevenlabs.api.transformers.ResultTransformer;
import net.andrewcpu.elevenlabs.api.net.ElevenLabsRequest;
import net.andrewcpu.elevenlabs.api.net.transformers.ResultTransformer;
import net.andrewcpu.elevenlabs.enums.HTTPMethod;
import org.json.simple.JSONObject;

View File

@@ -1,7 +1,7 @@
package net.andrewcpu.elevenlabs.api.requests;
package net.andrewcpu.elevenlabs.api.net.requests;
import net.andrewcpu.elevenlabs.api.ElevenLabsRequest;
import net.andrewcpu.elevenlabs.api.transformers.ResultTransformer;
import net.andrewcpu.elevenlabs.api.net.ElevenLabsRequest;
import net.andrewcpu.elevenlabs.api.net.transformers.ResultTransformer;
import net.andrewcpu.elevenlabs.enums.HTTPMethod;
import org.json.simple.JSONObject;

View File

@@ -1,7 +1,7 @@
package net.andrewcpu.elevenlabs.api.requests;
package net.andrewcpu.elevenlabs.api.net.requests;
import net.andrewcpu.elevenlabs.api.ElevenLabsRequest;
import net.andrewcpu.elevenlabs.api.transformers.ResultTransformer;
import net.andrewcpu.elevenlabs.api.net.ElevenLabsRequest;
import net.andrewcpu.elevenlabs.api.net.transformers.ResultTransformer;
import net.andrewcpu.elevenlabs.enums.HTTPMethod;
import org.json.simple.JSONObject;

View File

@@ -1,7 +1,7 @@
package net.andrewcpu.elevenlabs.api.requests.history;
package net.andrewcpu.elevenlabs.api.net.requests.history;
import net.andrewcpu.elevenlabs.api.requests.ElevenLabsDeleteRequest;
import net.andrewcpu.elevenlabs.api.transformers.RequestTransformer;
import net.andrewcpu.elevenlabs.api.net.requests.ElevenLabsDeleteRequest;
import net.andrewcpu.elevenlabs.api.net.transformers.RequestTransformer;
import net.andrewcpu.elevenlabs.enums.ResponseType;
import java.util.List;

View File

@@ -1,7 +1,7 @@
package net.andrewcpu.elevenlabs.api.requests.history;
package net.andrewcpu.elevenlabs.api.net.requests.history;
import net.andrewcpu.elevenlabs.api.requests.ElevenLabsPostRequest;
import net.andrewcpu.elevenlabs.api.transformers.FilePingPongTransformer;
import net.andrewcpu.elevenlabs.api.net.requests.ElevenLabsPostRequest;
import net.andrewcpu.elevenlabs.api.net.transformers.FilePingPongTransformer;
import net.andrewcpu.elevenlabs.enums.ResponseType;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;

View File

@@ -1,7 +1,7 @@
package net.andrewcpu.elevenlabs.api.requests.history;
package net.andrewcpu.elevenlabs.api.net.requests.history;
import net.andrewcpu.elevenlabs.api.requests.ElevenLabsGetRequest;
import net.andrewcpu.elevenlabs.api.transformers.FilePingPongTransformer;
import net.andrewcpu.elevenlabs.api.net.requests.ElevenLabsGetRequest;
import net.andrewcpu.elevenlabs.api.net.transformers.FilePingPongTransformer;
import net.andrewcpu.elevenlabs.enums.ResponseType;
import java.io.File;

View File

@@ -1,7 +1,7 @@
package net.andrewcpu.elevenlabs.api.requests.history;
package net.andrewcpu.elevenlabs.api.net.requests.history;
import net.andrewcpu.elevenlabs.api.requests.ElevenLabsGetRequest;
import net.andrewcpu.elevenlabs.api.transformers.RequestTransformer;
import net.andrewcpu.elevenlabs.api.net.requests.ElevenLabsGetRequest;
import net.andrewcpu.elevenlabs.api.net.transformers.RequestTransformer;
import net.andrewcpu.elevenlabs.elements.voice.History;
public class GetHistoryRequest extends ElevenLabsGetRequest<History> {

View File

@@ -0,0 +1,20 @@
package net.andrewcpu.elevenlabs.api.net.requests.samples;
import net.andrewcpu.elevenlabs.api.net.requests.ElevenLabsDeleteRequest;
import net.andrewcpu.elevenlabs.api.net.transformers.RequestTransformer;
import net.andrewcpu.elevenlabs.enums.ResponseType;
import org.json.simple.JSONObject;
import java.util.List;
public class DeleteSampleRequest extends ElevenLabsDeleteRequest<JSONObject> {
public DeleteSampleRequest(String voiceId, String sampleId) {
super(List.of(voiceId, sampleId), RequestTransformer.IN_OUT_TRANSFORMER);
responseType = (ResponseType.JSON);
}
@Override
public String getEndpoint() {
return "voices/{voiceId}/samples/{sampleId}";
}
}

View File

@@ -1,7 +1,7 @@
package net.andrewcpu.elevenlabs.api.requests.samples;
package net.andrewcpu.elevenlabs.api.net.requests.samples;
import net.andrewcpu.elevenlabs.api.requests.ElevenLabsGetRequest;
import net.andrewcpu.elevenlabs.api.transformers.FilePingPongTransformer;
import net.andrewcpu.elevenlabs.api.net.requests.ElevenLabsGetRequest;
import net.andrewcpu.elevenlabs.api.net.transformers.FilePingPongTransformer;
import net.andrewcpu.elevenlabs.enums.ResponseType;
import java.io.File;
@@ -10,8 +10,8 @@ import java.util.List;
public class GetAudioSampleRequest extends ElevenLabsGetRequest<File> {
public GetAudioSampleRequest(String voiceId, String sampleId, File outputFile) {
super(List.of(voiceId, sampleId), new FilePingPongTransformer(outputFile));
responseType = (ResponseType.FILE_STREAM);
outputFilePath = (outputFile);
responseType = ResponseType.FILE_STREAM;
outputFilePath = outputFile;
}
@Override

View File

@@ -1,7 +1,7 @@
package net.andrewcpu.elevenlabs.api.requests.user;
package net.andrewcpu.elevenlabs.api.net.requests.user;
import net.andrewcpu.elevenlabs.api.requests.ElevenLabsGetRequest;
import net.andrewcpu.elevenlabs.api.transformers.RequestTransformer;
import net.andrewcpu.elevenlabs.api.net.requests.ElevenLabsGetRequest;
import net.andrewcpu.elevenlabs.api.net.transformers.RequestTransformer;
import net.andrewcpu.elevenlabs.elements.user.Subscription;
public class GetSubscriptionInfoRequest extends ElevenLabsGetRequest<Subscription> {

View File

@@ -1,7 +1,7 @@
package net.andrewcpu.elevenlabs.api.requests.user;
package net.andrewcpu.elevenlabs.api.net.requests.user;
import net.andrewcpu.elevenlabs.api.requests.ElevenLabsGetRequest;
import net.andrewcpu.elevenlabs.api.transformers.RequestTransformer;
import net.andrewcpu.elevenlabs.api.net.requests.ElevenLabsGetRequest;
import net.andrewcpu.elevenlabs.api.net.transformers.RequestTransformer;
import net.andrewcpu.elevenlabs.elements.user.User;
public class GetUserRequest extends ElevenLabsGetRequest<User> {

View File

@@ -1,12 +1,10 @@
package net.andrewcpu.elevenlabs.api.requests.voices;
package net.andrewcpu.elevenlabs.api.net.requests.voices;
import net.andrewcpu.elevenlabs.api.multipart.MultipartFile;
import net.andrewcpu.elevenlabs.api.multipart.MultipartForm;
import net.andrewcpu.elevenlabs.api.multipart.MultipartFormContent;
import net.andrewcpu.elevenlabs.api.requests.ElevenLabsPostRequest;
import net.andrewcpu.elevenlabs.api.transformers.RequestTransformer;
import net.andrewcpu.elevenlabs.api.transformers.ResultTransformer;
import net.andrewcpu.elevenlabs.api.transformers.ResultTransformerAdapter;
import net.andrewcpu.elevenlabs.api.net.multipart.MultipartFile;
import net.andrewcpu.elevenlabs.api.net.multipart.MultipartForm;
import net.andrewcpu.elevenlabs.api.net.multipart.MultipartFormContent;
import net.andrewcpu.elevenlabs.api.net.requests.ElevenLabsPostRequest;
import net.andrewcpu.elevenlabs.api.net.transformers.RequestTransformer;
import net.andrewcpu.elevenlabs.enums.ContentType;
import org.json.simple.JSONObject;
@@ -20,10 +18,8 @@ import java.util.Map;
public class CreateVoiceRequest extends ElevenLabsPostRequest<String> {
public CreateVoiceRequest(String name, List<File> files, Map<String, String> labels) {
super(RequestTransformer.VOICE_ID_TRANSFORMER);
buildBody(name, files, labels);
}
public CreateVoiceRequest(List<String> parameters, String name, List<File> files, Map<String, String> labels) {
super(parameters, RequestTransformer.VOICE_ID_TRANSFORMER);
this.contentType = ContentType.MULTIPART;
this.multipartForm = new MultipartForm();
buildBody(name, files, labels);
}
@@ -32,24 +28,16 @@ public class CreateVoiceRequest extends ElevenLabsPostRequest<String> {
return "voices/add";
}
private void buildBody(String name, List<File> files, Map<String, String> labels){
this.contentType = ContentType.MULTIPART;
this.multipartForm = new MultipartForm();
private void buildBody(String name, List<File> files, Map<String, String> labels) {
JSONObject val = new JSONObject();
if(labels != null && labels.size() != 0){
for(String key : labels.keySet()){
val.put(key, labels.get(key));
}
if (labels != null && labels.size() != 0) {
labels.keySet().forEach(key -> val.put(key, labels.get(key)));
}
MultipartFormContent nameMultipart = new MultipartFormContent("name", URLEncoder.encode(name, StandardCharsets.UTF_8));
MultipartFormContent labelsMultipart = new MultipartFormContent("labels", val.toJSONString());
this.multipartForm.push(nameMultipart, labelsMultipart);
for(File file : files){
this.multipartForm.push(new MultipartFile("files", file));
}
this.multipartForm.push(files.stream()
.map(file -> new MultipartFile("files", file))
.toArray(MultipartFile[]::new));
}
}

View File

@@ -0,0 +1,18 @@
package net.andrewcpu.elevenlabs.api.net.requests.voices;
import net.andrewcpu.elevenlabs.api.net.requests.ElevenLabsDeleteRequest;
import net.andrewcpu.elevenlabs.api.net.transformers.RequestTransformer;
import org.json.simple.JSONObject;
import java.util.List;
public class DeleteVoiceRequest extends ElevenLabsDeleteRequest<JSONObject> {
public DeleteVoiceRequest(String voiceId) {
super(List.of(voiceId), RequestTransformer.IN_OUT_TRANSFORMER);
}
@Override
public String getEndpoint() {
return "voices/{voiceId}";
}
}

View File

@@ -0,0 +1,45 @@
package net.andrewcpu.elevenlabs.api.net.requests.voices;
import net.andrewcpu.elevenlabs.api.net.multipart.MultipartFile;
import net.andrewcpu.elevenlabs.api.net.multipart.MultipartForm;
import net.andrewcpu.elevenlabs.api.net.multipart.MultipartFormContent;
import net.andrewcpu.elevenlabs.api.net.requests.ElevenLabsPostRequest;
import net.andrewcpu.elevenlabs.api.net.transformers.RequestTransformer;
import net.andrewcpu.elevenlabs.enums.ContentType;
import net.andrewcpu.elevenlabs.enums.ResponseType;
import org.json.simple.JSONObject;
import java.io.File;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Map;
public class EditVoiceRequest extends ElevenLabsPostRequest<JSONObject> {
public EditVoiceRequest(String voiceId, String name, List<File> files, Map<String, String> labels) {
super(List.of(voiceId), RequestTransformer.IN_OUT_TRANSFORMER);
this.contentType = ContentType.MULTIPART;
this.multipartForm = new MultipartForm();
buildBody(name, files, labels);
}
@Override
public String getEndpoint() {
return "voices/{voiceId}/edit";
}
private void buildBody(String name, List<File> files, Map<String, String> labels) {
JSONObject val = new JSONObject();
if (labels != null && labels.size() != 0) {
labels.keySet().forEach(key -> val.put(key, labels.get(key)));
}
MultipartFormContent nameMultipart = new MultipartFormContent("name", URLEncoder.encode(name, StandardCharsets.UTF_8));
MultipartFormContent labelsMultipart = new MultipartFormContent("labels", val.toJSONString());
this.multipartForm.push(nameMultipart, labelsMultipart);
this.multipartForm.push(files.stream()
.map(file -> new MultipartFile("files", file))
.toArray(MultipartFile[]::new));
}
}

View File

@@ -1,7 +1,7 @@
package net.andrewcpu.elevenlabs.api.requests.voices;
package net.andrewcpu.elevenlabs.api.net.requests.voices;
import net.andrewcpu.elevenlabs.api.ElevenLabsRequest;
import net.andrewcpu.elevenlabs.api.transformers.FilePingPongTransformer;
import net.andrewcpu.elevenlabs.api.net.ElevenLabsRequest;
import net.andrewcpu.elevenlabs.api.net.transformers.FilePingPongTransformer;
import net.andrewcpu.elevenlabs.elements.voice.Voice;
import net.andrewcpu.elevenlabs.elements.voice.VoiceSettings;
import net.andrewcpu.elevenlabs.enums.HTTPMethod;

View File

@@ -1,7 +1,7 @@
package net.andrewcpu.elevenlabs.api.requests.voices;
package net.andrewcpu.elevenlabs.api.net.requests.voices;
import net.andrewcpu.elevenlabs.api.requests.ElevenLabsGetRequest;
import net.andrewcpu.elevenlabs.api.transformers.RequestTransformer;
import net.andrewcpu.elevenlabs.api.net.requests.ElevenLabsGetRequest;
import net.andrewcpu.elevenlabs.api.net.transformers.RequestTransformer;
import net.andrewcpu.elevenlabs.elements.voice.Voice;
import java.util.List;

View File

@@ -1,7 +1,7 @@
package net.andrewcpu.elevenlabs.api.requests.voices;
package net.andrewcpu.elevenlabs.api.net.requests.voices;
import net.andrewcpu.elevenlabs.api.requests.ElevenLabsGetRequest;
import net.andrewcpu.elevenlabs.api.transformers.RequestTransformer;
import net.andrewcpu.elevenlabs.api.net.requests.ElevenLabsGetRequest;
import net.andrewcpu.elevenlabs.api.net.transformers.RequestTransformer;
import net.andrewcpu.elevenlabs.elements.voice.Voice;
import java.util.List;

View File

@@ -1,7 +1,7 @@
package net.andrewcpu.elevenlabs.api.requests.voices.settings;
package net.andrewcpu.elevenlabs.api.net.requests.voices.settings;
import net.andrewcpu.elevenlabs.api.requests.ElevenLabsGetRequest;
import net.andrewcpu.elevenlabs.api.transformers.RequestTransformer;
import net.andrewcpu.elevenlabs.api.net.requests.ElevenLabsGetRequest;
import net.andrewcpu.elevenlabs.api.net.transformers.RequestTransformer;
import net.andrewcpu.elevenlabs.elements.voice.VoiceSettings;
public class GetDefaultVoiceSettingsRequest extends ElevenLabsGetRequest<VoiceSettings> {

View File

@@ -1,7 +1,7 @@
package net.andrewcpu.elevenlabs.api.requests.voices.settings;
package net.andrewcpu.elevenlabs.api.net.requests.voices.settings;
import net.andrewcpu.elevenlabs.api.requests.ElevenLabsGetRequest;
import net.andrewcpu.elevenlabs.api.transformers.RequestTransformer;
import net.andrewcpu.elevenlabs.api.net.requests.ElevenLabsGetRequest;
import net.andrewcpu.elevenlabs.api.net.transformers.RequestTransformer;
import net.andrewcpu.elevenlabs.elements.voice.VoiceSettings;
import java.util.List;

View File

@@ -1,15 +1,16 @@
package net.andrewcpu.elevenlabs.api.requests.voices.settings;
package net.andrewcpu.elevenlabs.api.net.requests.voices.settings;
import net.andrewcpu.elevenlabs.api.requests.ElevenLabsPostRequest;
import net.andrewcpu.elevenlabs.api.transformers.RequestTransformer;
import net.andrewcpu.elevenlabs.api.net.requests.ElevenLabsPostRequest;
import net.andrewcpu.elevenlabs.api.net.transformers.RequestTransformer;
import net.andrewcpu.elevenlabs.api.net.transformers.ResultTransformer;
import net.andrewcpu.elevenlabs.elements.voice.VoiceSettings;
import org.json.simple.JSONObject;
import java.util.List;
public class UpdateVoiceSettingsRequest extends ElevenLabsPostRequest<String> {
public class UpdateVoiceSettingsRequest extends ElevenLabsPostRequest<JSONObject> {
public UpdateVoiceSettingsRequest(String voiceId, VoiceSettings settings){
super(List.of(voiceId), settings.toJSON(), RequestTransformer.STRING_RESULT_TRANSFORMER);
super(List.of(voiceId), settings.toJSON(), RequestTransformer.IN_OUT_TRANSFORMER);
}
@Override

View File

@@ -1,4 +1,4 @@
package net.andrewcpu.elevenlabs.api.transformers;
package net.andrewcpu.elevenlabs.api.net.transformers;
import net.andrewcpu.elevenlabs.util.DebugLogger;

View File

@@ -1,11 +1,12 @@
package net.andrewcpu.elevenlabs.api.transformers;
package net.andrewcpu.elevenlabs.api.net.transformers;
import net.andrewcpu.elevenlabs.api.transformers.obj.*;
import net.andrewcpu.elevenlabs.api.net.transformers.obj.*;
import net.andrewcpu.elevenlabs.elements.user.Subscription;
import net.andrewcpu.elevenlabs.elements.user.User;
import net.andrewcpu.elevenlabs.elements.voice.History;
import net.andrewcpu.elevenlabs.elements.voice.Voice;
import net.andrewcpu.elevenlabs.elements.voice.VoiceSettings;
import org.json.simple.JSONObject;
import java.util.List;
@@ -18,4 +19,11 @@ public class RequestTransformer {
public static final ResultTransformer<List<Voice>> VOICE_LIST_TRANSFORMER = new VoiceListTransformer();
public static final ResultTransformer<String> STRING_RESULT_TRANSFORMER = new StringPingPongTransformer();
public static final ResultTransformer<String> VOICE_ID_TRANSFORMER = new VoiceIDTransformer();
public static final ResultTransformer<JSONObject> IN_OUT_TRANSFORMER = new ResultTransformerAdapter<JSONObject>(){
@Override
public JSONObject transform(JSONObject object) {
return object;
}
};
}

View File

@@ -1,4 +1,4 @@
package net.andrewcpu.elevenlabs.api.transformers;
package net.andrewcpu.elevenlabs.api.net.transformers;
import org.json.simple.JSONObject;

View File

@@ -1,4 +1,4 @@
package net.andrewcpu.elevenlabs.api.transformers;
package net.andrewcpu.elevenlabs.api.net.transformers;
import org.json.simple.JSONObject;

View File

@@ -1,4 +1,4 @@
package net.andrewcpu.elevenlabs.api.transformers;
package net.andrewcpu.elevenlabs.api.net.transformers;
import net.andrewcpu.elevenlabs.util.DebugLogger;

View File

@@ -1,6 +1,6 @@
package net.andrewcpu.elevenlabs.api.transformers.obj;
package net.andrewcpu.elevenlabs.api.net.transformers.obj;
import net.andrewcpu.elevenlabs.api.transformers.ResultTransformerAdapter;
import net.andrewcpu.elevenlabs.api.net.transformers.ResultTransformerAdapter;
import net.andrewcpu.elevenlabs.elements.voice.History;
import org.json.simple.JSONObject;

View File

@@ -1,6 +1,6 @@
package net.andrewcpu.elevenlabs.api.transformers.obj;
package net.andrewcpu.elevenlabs.api.net.transformers.obj;
import net.andrewcpu.elevenlabs.api.transformers.ResultTransformerAdapter;
import net.andrewcpu.elevenlabs.api.net.transformers.ResultTransformerAdapter;
import net.andrewcpu.elevenlabs.elements.user.Subscription;
import org.json.simple.JSONObject;

View File

@@ -1,6 +1,6 @@
package net.andrewcpu.elevenlabs.api.transformers.obj;
package net.andrewcpu.elevenlabs.api.net.transformers.obj;
import net.andrewcpu.elevenlabs.api.transformers.ResultTransformerAdapter;
import net.andrewcpu.elevenlabs.api.net.transformers.ResultTransformerAdapter;
import net.andrewcpu.elevenlabs.elements.user.User;
import org.json.simple.JSONObject;

View File

@@ -1,9 +1,10 @@
package net.andrewcpu.elevenlabs.api.transformers.obj;
package net.andrewcpu.elevenlabs.api.net.transformers.obj;
import net.andrewcpu.elevenlabs.api.transformers.ResultTransformerAdapter;
import net.andrewcpu.elevenlabs.api.net.transformers.ResultTransformerAdapter;
import org.json.simple.JSONObject;
public class VoiceIDTransformer extends ResultTransformerAdapter<String> {
@Override
public String transform(JSONObject object) {
return object.get("voice_id").toString();

View File

@@ -1,6 +1,6 @@
package net.andrewcpu.elevenlabs.api.transformers.obj;
package net.andrewcpu.elevenlabs.api.net.transformers.obj;
import net.andrewcpu.elevenlabs.api.transformers.ResultTransformerAdapter;
import net.andrewcpu.elevenlabs.api.net.transformers.ResultTransformerAdapter;
import net.andrewcpu.elevenlabs.elements.voice.Voice;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;

View File

@@ -1,6 +1,6 @@
package net.andrewcpu.elevenlabs.api.transformers.obj;
package net.andrewcpu.elevenlabs.api.net.transformers.obj;
import net.andrewcpu.elevenlabs.api.transformers.ResultTransformerAdapter;
import net.andrewcpu.elevenlabs.api.net.transformers.ResultTransformerAdapter;
import net.andrewcpu.elevenlabs.elements.voice.VoiceSettings;
import org.json.simple.JSONObject;

View File

@@ -1,6 +1,6 @@
package net.andrewcpu.elevenlabs.api.transformers.obj;
package net.andrewcpu.elevenlabs.api.net.transformers.obj;
import net.andrewcpu.elevenlabs.api.transformers.ResultTransformerAdapter;
import net.andrewcpu.elevenlabs.api.net.transformers.ResultTransformerAdapter;
import net.andrewcpu.elevenlabs.elements.voice.Voice;
import org.json.simple.JSONObject;

View File

@@ -1,19 +0,0 @@
package net.andrewcpu.elevenlabs.api.requests.samples;
import net.andrewcpu.elevenlabs.api.requests.ElevenLabsDeleteRequest;
import net.andrewcpu.elevenlabs.api.transformers.RequestTransformer;
import net.andrewcpu.elevenlabs.enums.ResponseType;
import java.util.List;
public class DeleteSampleRequest extends ElevenLabsDeleteRequest<String> {
public DeleteSampleRequest(String voiceId, String sampleId) {
super(List.of(voiceId, sampleId), RequestTransformer.STRING_RESULT_TRANSFORMER);
responseType = (ResponseType.STRING);
}
@Override
public String getEndpoint() {
return "voices/{voiceId}/samples/{sampleId}";
}
}

View File

@@ -1,17 +0,0 @@
package net.andrewcpu.elevenlabs.api.requests.voices;
import net.andrewcpu.elevenlabs.api.requests.ElevenLabsDeleteRequest;
import net.andrewcpu.elevenlabs.api.transformers.RequestTransformer;
import java.util.List;
public class DeleteVoiceRequest extends ElevenLabsDeleteRequest<String> {
public DeleteVoiceRequest(String voiceId) {
super(List.of(voiceId), RequestTransformer.STRING_RESULT_TRANSFORMER);
}
@Override
public String getEndpoint() {
return "voices/{voiceId}";
}
}

View File

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

View File

@@ -1,6 +1,7 @@
package net.andrewcpu.elevenlabs.elements;
import net.andrewcpu.elevenlabs.ElevenLabsAPI;
import net.andrewcpu.elevenlabs.api.VoiceAPI;
import net.andrewcpu.elevenlabs.elements.voice.Voice;
import net.andrewcpu.elevenlabs.exceptions.ElevenLabsException;
import net.andrewcpu.elevenlabs.exceptions.ElevenLabsValidationException;
@@ -65,15 +66,15 @@ public class VoiceBuilder {
}
public Voice edit() throws ElevenLabsException {
ElevenLabsAPI.getInstance().editVoice(voiceId, name, labels, files);
return ElevenLabsAPI.getInstance().getVoice(voiceId, true);
VoiceAPI.editVoice(voiceId, name, labels, files);
return VoiceAPI.getVoice(voiceId, true);
}
public Voice create() throws ElevenLabsException {
if(files.isEmpty()){
throw new ElevenLabsValidationException("Cannot build a voice without any files.");
}
String voiceId = ElevenLabsAPI.getInstance().createVoice(name, labels, files);
return ElevenLabsAPI.getInstance().getVoice(voiceId, true);
String voiceId = VoiceAPI.createVoice(name, labels, files);
return VoiceAPI.getVoice(voiceId, true);
}
}

View File

@@ -1,7 +1,7 @@
package net.andrewcpu.elevenlabs.elements.user;
import net.andrewcpu.elevenlabs.ElevenLabsAPI;
import net.andrewcpu.elevenlabs.enums.Status;
import net.andrewcpu.elevenlabs.api.UserAPI;
import net.andrewcpu.elevenlabs.enums.AccountStatus;
import net.andrewcpu.elevenlabs.exceptions.ElevenLabsException;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
@@ -21,7 +21,7 @@ public class Subscription {
private final boolean canExtendVoiceLimit;
private final boolean canUseInstantVoiceCloning;
private final List<AvailableModel> availableModels;
private final Status status;
private final AccountStatus status;
private final NextInvoice nextInvoice;
public static Subscription fromJSON(JSONObject object) {
@@ -64,7 +64,7 @@ public class Subscription {
public static Subscription get() throws ElevenLabsException {
return ElevenLabsAPI.getInstance().getSubscription();
return UserAPI.getSubscription();
}
private Subscription(String tier, int characterCount, int characterLimit, boolean canExtendCharacterLimit, boolean allowedToExtendCharacterLimit,
@@ -80,7 +80,7 @@ public class Subscription {
this.canExtendVoiceLimit = canExtendVoiceLimit;
this.canUseInstantVoiceCloning = canUseInstantVoiceCloning;
this.availableModels = availableModels;
this.status = Status.valueOf(status.toUpperCase());
this.status = AccountStatus.valueOf(status.toUpperCase());
this.nextInvoice = nextInvoice;
}
@@ -124,7 +124,7 @@ public class Subscription {
return availableModels;
}
public Status getStatus() {
public AccountStatus getStatus() {
return status;
}

View File

@@ -1,19 +1,20 @@
package net.andrewcpu.elevenlabs.elements.user;
import net.andrewcpu.elevenlabs.ElevenLabsAPI;
import net.andrewcpu.elevenlabs.api.HistoryAPI;
import net.andrewcpu.elevenlabs.api.UserAPI;
import net.andrewcpu.elevenlabs.elements.voice.History;
import net.andrewcpu.elevenlabs.exceptions.ElevenLabsException;
import org.json.simple.JSONObject;
import java.io.IOException;
public class User {
private final Subscription subscription;
private final boolean isNewUser;
private final String apiKey;
public static User get() throws ElevenLabsException, IOException {
return ElevenLabsAPI.getInstance().getUser();
public static User get() throws ElevenLabsException {
return UserAPI.getUser();
}
public User(Subscription subscription, boolean isNewUser, String xiApiKey) {
@@ -34,8 +35,8 @@ public class User {
return apiKey;
}
public History getHistory() throws IOException, ElevenLabsException {
return ElevenLabsAPI.getInstance().getHistory();
public History getHistory() throws ElevenLabsException {
return HistoryAPI.getHistory();
}
public static User fromJSON(JSONObject object) {
JSONObject subscriptionJson = (JSONObject) object.get("subscription");

View File

@@ -1,7 +1,8 @@
package net.andrewcpu.elevenlabs.elements.voice;
import net.andrewcpu.elevenlabs.ElevenLabsAPI;
import net.andrewcpu.elevenlabs.enums.State;
import net.andrewcpu.elevenlabs.api.HistoryAPI;
import net.andrewcpu.elevenlabs.api.VoiceAPI;
import net.andrewcpu.elevenlabs.enums.GenerationState;
import net.andrewcpu.elevenlabs.exceptions.ElevenLabsException;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
@@ -37,7 +38,7 @@ public record History(List<HistoryItem> history) {
}
public static History get() throws ElevenLabsException {
return ElevenLabsAPI.getInstance().getHistory();
return HistoryAPI.getHistory();
}
@@ -51,11 +52,11 @@ public record History(List<HistoryItem> history) {
}
public File downloadHistory(String[] ids, File file) throws ElevenLabsException {
return ElevenLabsAPI.getInstance().downloadHistory(Arrays.stream(ids).toList(), file);
return HistoryAPI.downloadHistory(Arrays.stream(ids).toList(), file);
}
public File downloadHistory(List<HistoryItem> historyItems, File file) throws ElevenLabsException {
return ElevenLabsAPI.getInstance().downloadHistory(historyItems.stream().map(HistoryItem::getHistoryItemId).collect(Collectors.toList()), file);
return HistoryAPI.downloadHistory(historyItems.stream().map(HistoryItem::getHistoryItemId).collect(Collectors.toList()), file);
}
@Override
@@ -74,7 +75,7 @@ public record History(List<HistoryItem> history) {
private final int characterCountChangeFrom;
private final int characterCountChangeTo;
private final String contentType;
private final State state;
private final GenerationState state;
private Voice voice;
private final History history;
@@ -87,7 +88,7 @@ public record History(List<HistoryItem> history) {
this.characterCountChangeFrom = characterCountChangeFrom;
this.characterCountChangeTo = characterCountChangeTo;
this.contentType = contentType;
this.state = State.valueOf(state.toUpperCase());
this.state = GenerationState.valueOf(state.toUpperCase());
this.history = history;
this.voice = null;
}
@@ -95,7 +96,7 @@ public record History(List<HistoryItem> history) {
public Voice getVoice() {
if (voice == null) {
try {
voice = ElevenLabsAPI.getInstance().getVoice(voiceId);
voice = VoiceAPI.getVoice(voiceId);
} catch (ElevenLabsException e) {
throw new RuntimeException(e);
}
@@ -139,18 +140,18 @@ public record History(List<HistoryItem> history) {
return contentType;
}
public State getState() {
public GenerationState getState() {
return state;
}
public String delete() throws ElevenLabsException {
String output = ElevenLabsAPI.getInstance().deleteHistoryItem(this);
String output = HistoryAPI.deleteHistoryItem(this);
history.history.remove(this);
return output;
}
public File downloadAudio(File outputFile) throws ElevenLabsException {
return ElevenLabsAPI.getInstance().getHistoryItemAudio(this, outputFile);
return HistoryAPI.getHistoryItemAudio(this, outputFile);
}
@Override

View File

@@ -1,6 +1,7 @@
package net.andrewcpu.elevenlabs.elements.voice;
import net.andrewcpu.elevenlabs.ElevenLabsAPI;
import net.andrewcpu.elevenlabs.api.SampleAPI;
import net.andrewcpu.elevenlabs.exceptions.ElevenLabsException;
import org.json.simple.JSONObject;
@@ -62,12 +63,18 @@ public class Sample {
return hash;
}
public String delete() throws ElevenLabsException {
return ElevenLabsAPI.getInstance().deleteSample(voice,this);
public boolean delete() throws ElevenLabsException {
JSONObject result = SampleAPI.deleteSample(voice,this);
if(result.containsKey("status")){
if(result.get("status").equals("ok")){
return true;
}
}
return false;
}
public File downloadAudio(File outputFile) throws ElevenLabsException {
return ElevenLabsAPI.getInstance().getSampleAudio(voice, this, outputFile);
return SampleAPI.getSampleAudio(voice, this, outputFile);
}
@Override
@@ -78,7 +85,7 @@ public class Sample {
", mimeType='" + mimeType + '\'' +
", sizeBytes=" + sizeBytes +
", hash='" + hash + '\'' +
", voice=" + voice +
", voice=" + voice.getVoiceId() +
'}';
}
}

View File

@@ -1,6 +1,7 @@
package net.andrewcpu.elevenlabs.elements.voice;
import net.andrewcpu.elevenlabs.ElevenLabsAPI;
import net.andrewcpu.elevenlabs.api.VoiceAPI;
import net.andrewcpu.elevenlabs.elements.VoiceBuilder;
import net.andrewcpu.elevenlabs.exceptions.ElevenLabsException;
import net.andrewcpu.elevenlabs.exceptions.ElevenLabsValidationException;
@@ -8,7 +9,6 @@ import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -70,17 +70,17 @@ public class Voice {
public static List<Voice> getVoices() throws ElevenLabsException {
return ElevenLabsAPI.getInstance().getVoices();
return VoiceAPI.getVoices();
}
public static Voice get(String voiceId) throws ElevenLabsException {
Voice voice = ElevenLabsAPI.getInstance().getVoice(voiceId);
Voice voice = VoiceAPI.getVoice(voiceId);
voice.hasSettings = true;
return voice;
}
public static Voice get(String voiceId, boolean withSettings) throws ElevenLabsException {
Voice voice = ElevenLabsAPI.getInstance().getVoice(voiceId, withSettings);
Voice voice = VoiceAPI.getVoice(voiceId, withSettings);
voice.hasSettings = withSettings;
return voice;
}
@@ -129,40 +129,47 @@ public class Voice {
return voiceSettings;
}
public String delete() throws IOException, ElevenLabsException {
return ElevenLabsAPI.getInstance().deleteVoice(getVoiceId());
public boolean delete() throws ElevenLabsException {
return VoiceAPI.deleteVoice(getVoiceId());
}
public void fetchSettings() throws IOException, ElevenLabsException {
this.voiceSettings = ElevenLabsAPI.getInstance().getVoiceSettings(getVoiceId());
public void fetchSettings() throws ElevenLabsException {
this.voiceSettings = VoiceAPI.getVoiceSettings(getVoiceId());
hasSettings = true;
}
public VoiceBuilder builder() {
public VoiceBuilder editor() {
return VoiceBuilder.fromVoice(this);
}
public String updateVoiceSettings(VoiceSettings settings) throws ElevenLabsException {
String response = ElevenLabsAPI.getInstance().editVoice(this, settings);
public void updateVoiceSettings(VoiceSettings settings) throws ElevenLabsException {
JSONObject response = VoiceAPI.editVoice(this, settings);
if(response != null){
this.voiceSettings = settings;
hasSettings = true;
return response;
return;
}
return null;
}//todo figure out what this endpoint returns. String is not description, but docs don't have the info
public File generate(String text, VoiceSettings voiceSettings, File output) throws ElevenLabsException {
return ElevenLabsAPI.getInstance().getTextToSpeech(text, this, voiceSettings,output);
}
public File generate(String text, File output) throws ElevenLabsException, IOException {
public File generate(String text, VoiceSettings voiceSettings, File output) throws ElevenLabsException {
return VoiceAPI.getTextToSpeech(text, this, voiceSettings,output);
}
public File generate(String text, File output) throws ElevenLabsException {
if(!hasSettings){
throw new ElevenLabsValidationException("Cannot use default voice settings for " + voiceId + " because this object does not have VoiceSettings");
}
return generate(text, voiceSettings, output);
}
public String getLabel(String label) {
return labels.get(label);
}
public boolean hasLabel(String label){
return labels.containsKey(label);
}
@Override
public String toString() {
return "Voice{" +

View File

@@ -1,6 +1,6 @@
package net.andrewcpu.elevenlabs.elements.voice;
import net.andrewcpu.elevenlabs.ElevenLabsAPI;
import net.andrewcpu.elevenlabs.api.VoiceAPI;
import net.andrewcpu.elevenlabs.exceptions.ElevenLabsException;
import org.json.simple.JSONObject;
@@ -10,10 +10,10 @@ public class VoiceSettings {
private double similarityBoost;
public static VoiceSettings fromJSON(JSONObject object){
return new VoiceSettings((double)object.get("stability"), (double)object.get("similarity"));
return new VoiceSettings((double)object.get("stability"), (double)object.get("similarity_boost"));
}
public static VoiceSettings getDefaultVoiceSettings() throws ElevenLabsException {
return ElevenLabsAPI.getInstance().getDefaultVoiceSettings();
return VoiceAPI.getDefaultVoiceSettings();
}

View File

@@ -1,6 +1,6 @@
package net.andrewcpu.elevenlabs.enums;
public enum Status {
public enum AccountStatus {
TRIALING,
ACTIVE,
INCOMPLETE,

View File

@@ -1,6 +1,6 @@
package net.andrewcpu.elevenlabs.enums;
public enum State {
public enum GenerationState {
CREATED,
DELETED,
PROCESSING

View File

@@ -1,7 +1,13 @@
package net.andrewcpu.elevenlabs.exceptions;
public abstract class ElevenLabsException extends Exception{
import java.io.IOException;
public class ElevenLabsException extends Exception{
public ElevenLabsException(String message) {
super(message);
}
public ElevenLabsException(IOException ioException) {
super(ioException);
}
}

View File

@@ -1,5 +1,9 @@
package net.andrewcpu.elevenlabs.util;
import net.andrewcpu.elevenlabs.api.net.ElevenLabsRequest;
import net.andrewcpu.elevenlabs.api.net.multipart.MultipartFile;
import net.andrewcpu.elevenlabs.api.net.multipart.MultipartFormContent;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
@@ -33,4 +37,14 @@ public class MultipartUtil {
connection.getOutputStream().write("\r\n".getBytes(StandardCharsets.UTF_8));
}
public static void writeFormValues(ElevenLabsRequest<?> request, HttpURLConnection connection, String boundary) throws IOException {
for (MultipartFormContent item : request.getMultipartForm().getItems()) {
if (item instanceof MultipartFile multipartFile) {
addFilePart(multipartFile.getName(), multipartFile.getFilename(), multipartFile.getFile(), boundary, connection);
} else {
addFormField(item.getName(), item.getValue(), boundary, connection);
}
}
}
}