Add Activepieces integration for workflow automation
- Add Activepieces fork with SmoothSchedule custom piece - Create integrations app with Activepieces service layer - Add embed token endpoint for iframe integration - Create Automations page with embedded workflow builder - Add sidebar visibility fix for embed mode - Add list inactive customers endpoint to Public API - Include SmoothSchedule triggers: event created/updated/cancelled - Include SmoothSchedule actions: create/update/cancel events, list resources/services/customers 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"extends": [
|
||||
"../../../../.eslintrc.base.json"
|
||||
],
|
||||
"ignorePatterns": [
|
||||
"!**/*"
|
||||
],
|
||||
"overrides": [
|
||||
{
|
||||
"files": [
|
||||
"*.ts",
|
||||
"*.tsx",
|
||||
"*.js",
|
||||
"*.jsx"
|
||||
],
|
||||
"rules": {}
|
||||
},
|
||||
{
|
||||
"files": [
|
||||
"*.ts",
|
||||
"*.tsx"
|
||||
],
|
||||
"rules": {}
|
||||
},
|
||||
{
|
||||
"files": [
|
||||
"*.js",
|
||||
"*.jsx"
|
||||
],
|
||||
"rules": {}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
# pieces-murf-api
|
||||
|
||||
This library was generated with [Nx](https://nx.dev).
|
||||
|
||||
## Building
|
||||
|
||||
Run `nx build pieces-murf-api` to build the library.
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"name": "@activepieces/piece-murf-api",
|
||||
"version": "0.0.3",
|
||||
"type": "commonjs",
|
||||
"main": "./src/index.js",
|
||||
"types": "./src/index.d.ts",
|
||||
"dependencies": {
|
||||
"tslib": "^2.3.0"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
{
|
||||
"name": "pieces-murf-api",
|
||||
"$schema": "../../../../node_modules/nx/schemas/project-schema.json",
|
||||
"sourceRoot": "packages/pieces/community/murf-api/src",
|
||||
"projectType": "library",
|
||||
"release": {
|
||||
"version": {
|
||||
"manifestRootsToUpdate": [
|
||||
"dist/{projectRoot}"
|
||||
],
|
||||
"currentVersionResolver": "git-tag",
|
||||
"fallbackCurrentVersionResolver": "disk"
|
||||
}
|
||||
},
|
||||
"tags": [],
|
||||
"targets": {
|
||||
"build": {
|
||||
"executor": "@nx/js:tsc",
|
||||
"outputs": [
|
||||
"{options.outputPath}"
|
||||
],
|
||||
"options": {
|
||||
"outputPath": "dist/packages/pieces/community/murf-api",
|
||||
"tsConfig": "packages/pieces/community/murf-api/tsconfig.lib.json",
|
||||
"packageJson": "packages/pieces/community/murf-api/package.json",
|
||||
"main": "packages/pieces/community/murf-api/src/index.ts",
|
||||
"assets": [
|
||||
"packages/pieces/community/murf-api/*.md",
|
||||
{
|
||||
"input": "packages/pieces/community/murf-api/src/i18n",
|
||||
"output": "./src/i18n",
|
||||
"glob": "**/!(i18n.json)"
|
||||
}
|
||||
],
|
||||
"buildableProjectDepsInPackageJsonType": "dependencies",
|
||||
"updateBuildableProjectDepsInPackageJson": true
|
||||
},
|
||||
"dependsOn": [
|
||||
"^build",
|
||||
"prebuild"
|
||||
]
|
||||
},
|
||||
"nx-release-publish": {
|
||||
"options": {
|
||||
"packageRoot": "dist/{projectRoot}"
|
||||
}
|
||||
},
|
||||
"lint": {
|
||||
"executor": "@nx/eslint:lint",
|
||||
"outputs": [
|
||||
"{options.outputFile}"
|
||||
]
|
||||
},
|
||||
"prebuild": {
|
||||
"executor": "nx:run-commands",
|
||||
"options": {
|
||||
"cwd": "packages/pieces/community/murf-api",
|
||||
"command": "bun install --no-save --silent"
|
||||
},
|
||||
"dependsOn": [
|
||||
"^build"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,85 @@
|
||||
{
|
||||
"Enter your API key from https://murf.ai": "API-Schlüssel von https://murf.ai eingeben",
|
||||
"List Voices": "Stimmen auflisten",
|
||||
"Translate Text": "Text übersetzen",
|
||||
"Voice Changer": "Sprachwechsler",
|
||||
"Text to Speech": "Text-zu-Sprache",
|
||||
"Custom API Call": "Eigener API-Aufruf",
|
||||
"Get the list of available voices for text-to-speech": "Holen Sie sich die Liste der zur Verfügung stehenden Stimmen für Text-zu-Sprache",
|
||||
"Translate one or more texts to the target language.": "Übersetze einen oder mehrere Texte in die Zielsprache.",
|
||||
"Convert an input audio file to a different voice using Murf Voice Changer.": "Konvertieren Sie eine Audiodatei mit Murf Voice Changer in eine andere Stimme.",
|
||||
"Converts input text into speech using Murf AI.": "Konvertiert Eingabetext in Sprache mit Murf AI.",
|
||||
"Make a custom API call to a specific endpoint": "Einen benutzerdefinierten API-Aufruf an einen bestimmten Endpunkt machen",
|
||||
"Language": "Sprache",
|
||||
"Style": "Stil",
|
||||
"Texts": "Texte",
|
||||
"Voice": "Stimme",
|
||||
"File URL": "Datei-URL",
|
||||
"Upload File": "Datei hochladen",
|
||||
"Output Format": "Ausgabeformat",
|
||||
"Channel Type": "Kanaltyp",
|
||||
"Pitch": "Neigung",
|
||||
"Rate": "Rate",
|
||||
"Encode Output as Base64": "Ausgabe als Base64 kodieren",
|
||||
"Text": "Text",
|
||||
"Audio Duration (seconds)": "Audio-Dauer (Sekunden)",
|
||||
"Encode as Base64": "Als Base64 kodieren",
|
||||
"Audio Format": "Audioformat",
|
||||
"Model Version": "Modellversion",
|
||||
"Multi Native Locale": "Multi Heimatsprache",
|
||||
"Sample Rate": "Beispielrate",
|
||||
"Variation": "Variation",
|
||||
"Word Durations as Original Text": "Wortdauer als Originaltext",
|
||||
"Pronunciation Dictionary": "Pronunciation Wörterbuch",
|
||||
"Method": "Methode",
|
||||
"Headers": "Kopfzeilen",
|
||||
"Query Parameters": "Abfrageparameter",
|
||||
"Body": "Körper",
|
||||
"Response is Binary ?": "Antwort ist binär?",
|
||||
"No Error on Failure": "Kein Fehler bei Fehler",
|
||||
"Timeout (in seconds)": "Timeout (in Sekunden)",
|
||||
"Select your preferred language for the translated output.": "Wählen Sie Ihre bevorzugte Sprache für die Übersetzung aus.",
|
||||
"Filter by style (optional)": "Nach Stil filtern (optional)",
|
||||
"List of texts to translate": "Liste der zu übersetzenden Texte",
|
||||
"Choose a voice for converting text into speech": "Wählen Sie eine Stimme für die Umwandlung von Text in Sprache",
|
||||
"Publicly accessible URL of the input audio file. Either provide this or upload a file.": "Öffentlich zugängliche URL der Audio-Eingabedatei. Geben Sie diese entweder ein oder laden Sie eine Datei hoch.",
|
||||
"Upload an audio file for voice conversion": "Audiodatei für Sprachkonvertierung hochladen",
|
||||
"Format of the generated audio file": "Format der generierten Audiodatei",
|
||||
"Choose MONO or STEREO output": "MONO- oder STEREO-Ausgabe auswählen",
|
||||
"Pitch adjustment (-50 to 50)": "Pitch-Anpassung (-50 bis 50)",
|
||||
"Speed adjustment (-50 to 50)": "Geschwindigkeitsanpassung (-50 bis 50)",
|
||||
"Receive audio directly as Base64 instead of a file URL": "Audio direkt als Base64 anstelle einer Datei-URL empfangen",
|
||||
"The text to be synthesized.": "Der zu synthetisierende Text.",
|
||||
"Specify audio length. If 0, Murf ignores this. Only for Gen2 model.": "Audio-Länge angeben. Wenn 0, ignoriert Murf dies. Nur für Gen2-Modell.",
|
||||
"Mono or Stereo output.": "Mono oder Stereo Ausgang.",
|
||||
"Return Base64 encoded audio instead of URL (zero retention).": "Gibt Base64 kodiertes Audio anstelle von URL zurück (0 Vorrat).",
|
||||
"Select audio format.": "Audioformat auswählen.",
|
||||
"Choose Gen1 or Gen2.": "Wählen Sie Gen1 oder Gen2.",
|
||||
"Set multi-language voice (e.g., en-US, es-ES). Only for Gen2.": "Setzen Sie mehrsprachige Stimme (z. B. en-US, es-ES).",
|
||||
"Pitch adjustment (-50 to 50).": "Pitch-Anpassung (-50 bis 50).",
|
||||
"Speed adjustment (-50 to 50).": "Geschwindigkeitsanpassung (-50 bis 50).",
|
||||
"Voice style (e.g., 'default', 'calm', 'energetic'). Check voice details.": "Sprachstil (z. B. 'default', 'calm', 'energetisch'). Überprüfen Sie die Sprachdetails.",
|
||||
"Defaults to 44100. Allowed: 8000, 24000, 44100, 48000.": "Standardwerte sind 44100: 8000, 24000, 44100, 48000.",
|
||||
"Variation level (0–5). Defaults to 1. Higher = more natural pauses/pitch/speed.": "Variationsstufe (0–5). Standard ist 1. Höher = natürlicher Pausen/Pitch/Geschwindigkeit.",
|
||||
"If true, response word timings map to original text. (English only).": "Wenn aktiviert, werden Wort-Timings auf Originaltext angezeigt. (Nur in Englisch).",
|
||||
"Custom word pronunciations.": "Eigene Wortaussprachen.",
|
||||
"Authorization headers are injected automatically from your connection.": "Autorisierungs-Header werden automatisch von Ihrer Verbindung injiziert.",
|
||||
"Enable for files like PDFs, images, etc..": "Aktivieren für Dateien wie PDFs, Bilder, etc..",
|
||||
"MP3": "MP3",
|
||||
"WAV": "WAV",
|
||||
"FLAC": "FLAC",
|
||||
"OGG": "OGG",
|
||||
"Mono": "Mono",
|
||||
"Stereo": "Stereo",
|
||||
"ALAW": "ALAW",
|
||||
"ULAW": "ULAG",
|
||||
"PCM": "PCM",
|
||||
"GEN1": "GEN1",
|
||||
"GEN2": "GEN2",
|
||||
"GET": "ERHALTEN",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "LÖSCHEN",
|
||||
"HEAD": "HEAD"
|
||||
}
|
||||
@@ -0,0 +1,85 @@
|
||||
{
|
||||
"Enter your API key from https://murf.ai": "Introduzca su clave API desde https://murf.ai",
|
||||
"List Voices": "Lista de Votos",
|
||||
"Translate Text": "Traducir texto",
|
||||
"Voice Changer": "Cambiador de voz",
|
||||
"Text to Speech": "Texto a voz",
|
||||
"Custom API Call": "Llamada API personalizada",
|
||||
"Get the list of available voices for text-to-speech": "Obtener la lista de voces disponibles para el texto a voz",
|
||||
"Translate one or more texts to the target language.": "Traducir uno o más textos al idioma de destino.",
|
||||
"Convert an input audio file to a different voice using Murf Voice Changer.": "Convierte un archivo de audio de entrada a una voz diferente usando Murf Voice Changer.",
|
||||
"Converts input text into speech using Murf AI.": "Convierte texto de entrada en voz usando Murf AI.",
|
||||
"Make a custom API call to a specific endpoint": "Hacer una llamada API personalizada a un extremo específico",
|
||||
"Language": "Idioma",
|
||||
"Style": "Estilo",
|
||||
"Texts": "Textos",
|
||||
"Voice": "Voz",
|
||||
"File URL": "URL del archivo",
|
||||
"Upload File": "Subir archivo",
|
||||
"Output Format": "Formato de salida",
|
||||
"Channel Type": "Tipo de canal",
|
||||
"Pitch": "Tono",
|
||||
"Rate": "Tasa",
|
||||
"Encode Output as Base64": "Codificar salida como Base64",
|
||||
"Text": "Texto",
|
||||
"Audio Duration (seconds)": "Duración de audio (segundos)",
|
||||
"Encode as Base64": "Codificar como Base64",
|
||||
"Audio Format": "Formato de audio",
|
||||
"Model Version": "Versión del modelo",
|
||||
"Multi Native Locale": "Local multicnativo",
|
||||
"Sample Rate": "Tasa de ejemplo",
|
||||
"Variation": "Variación",
|
||||
"Word Durations as Original Text": "Duraciones de la palabra como texto original",
|
||||
"Pronunciation Dictionary": "Diccionario de Pronunciación",
|
||||
"Method": "Método",
|
||||
"Headers": "Encabezados",
|
||||
"Query Parameters": "Parámetros de consulta",
|
||||
"Body": "Cuerpo",
|
||||
"Response is Binary ?": "¿Respuesta es binaria?",
|
||||
"No Error on Failure": "No hay ningún error en fallo",
|
||||
"Timeout (in seconds)": "Tiempo de espera (en segundos)",
|
||||
"Select your preferred language for the translated output.": "Seleccione su idioma preferido para la salida traducida.",
|
||||
"Filter by style (optional)": "Filtrar por estilo (opcional)",
|
||||
"List of texts to translate": "Lista de textos a traducir",
|
||||
"Choose a voice for converting text into speech": "Elige una voz para convertir texto en voz",
|
||||
"Publicly accessible URL of the input audio file. Either provide this or upload a file.": "URL públicamente accesible del archivo de audio de entrada. Proporciona esto o sube un archivo.",
|
||||
"Upload an audio file for voice conversion": "Subir un archivo de audio para conversión de voz",
|
||||
"Format of the generated audio file": "Formato del archivo de audio generado",
|
||||
"Choose MONO or STEREO output": "Elegir salida MONO o STEREO",
|
||||
"Pitch adjustment (-50 to 50)": "Ajuste del tono (-50 a 50)",
|
||||
"Speed adjustment (-50 to 50)": "Ajuste de velocidad (-50 a 50)",
|
||||
"Receive audio directly as Base64 instead of a file URL": "Recibir audio directamente como Base64 en lugar de una URL de archivo",
|
||||
"The text to be synthesized.": "El texto a sintetizar.",
|
||||
"Specify audio length. If 0, Murf ignores this. Only for Gen2 model.": "Especifique la longitud de audio. Si es 0, Murf ignora esto. Sólo para el modelo Gen2.",
|
||||
"Mono or Stereo output.": "Salida Mono o Stereo.",
|
||||
"Return Base64 encoded audio instead of URL (zero retention).": "Devolver audio Base64 codificado en lugar de URL (retención cero).",
|
||||
"Select audio format.": "Seleccionar formato de audio.",
|
||||
"Choose Gen1 or Gen2.": "Elija Gen1 o Gen2.",
|
||||
"Set multi-language voice (e.g., en-US, es-ES). Only for Gen2.": "Establecer voz múltiple (por ejemplo, en-US, es-ES). Sólo para Gen2.",
|
||||
"Pitch adjustment (-50 to 50).": "Ajuste de tono (-50 a 50).",
|
||||
"Speed adjustment (-50 to 50).": "Ajuste de velocidad (-50 a 50).",
|
||||
"Voice style (e.g., 'default', 'calm', 'energetic'). Check voice details.": "Estilo de voz (por ejemplo, 'predeterminado', 'calm', 'energético'). Comprueba los detalles de voz.",
|
||||
"Defaults to 44100. Allowed: 8000, 24000, 44100, 48000.": "Por defecto es 44100. Permitido: 8000, 24000, 44100, 48000.",
|
||||
"Variation level (0–5). Defaults to 1. Higher = more natural pauses/pitch/speed.": "Nivel de variación (0–5). Por defecto es 1. Mayor = pausas más naturales/pitch/velocidad.",
|
||||
"If true, response word timings map to original text. (English only).": "If true, response word timings map to original text. (Solo en inglés).",
|
||||
"Custom word pronunciations.": "Promociones de palabras personalizadas.",
|
||||
"Authorization headers are injected automatically from your connection.": "Las cabeceras de autorización se inyectan automáticamente desde tu conexión.",
|
||||
"Enable for files like PDFs, images, etc..": "Activar para archivos como PDFs, imágenes, etc.",
|
||||
"MP3": "MP3",
|
||||
"WAV": "WAV",
|
||||
"FLAC": "FLAC",
|
||||
"OGG": "OGG",
|
||||
"Mono": "Mono",
|
||||
"Stereo": "Stereo",
|
||||
"ALAW": "ALAW",
|
||||
"ULAW": "ULAR",
|
||||
"PCM": "PCM",
|
||||
"GEN1": "GEN1",
|
||||
"GEN2": "GEN2",
|
||||
"GET": "RECOGER",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "BORRAR",
|
||||
"HEAD": "LIMPIO"
|
||||
}
|
||||
@@ -0,0 +1,85 @@
|
||||
{
|
||||
"Enter your API key from https://murf.ai": "Entrez votre clé API depuis https://murf.ai",
|
||||
"List Voices": "Lister les voix",
|
||||
"Translate Text": "Traduire le texte",
|
||||
"Voice Changer": "Changeur de voix",
|
||||
"Text to Speech": "Discours vocaux",
|
||||
"Custom API Call": "Appel d'API personnalisé",
|
||||
"Get the list of available voices for text-to-speech": "Obtenir la liste des voix disponibles pour la synthèse vocale",
|
||||
"Translate one or more texts to the target language.": "Traduire un ou plusieurs textes dans la langue cible.",
|
||||
"Convert an input audio file to a different voice using Murf Voice Changer.": "Convertissez un fichier audio d'entrée en une autre voix à l'aide de Murf Voice Changer.",
|
||||
"Converts input text into speech using Murf AI.": "Convertit le texte d'entrée en parole en utilisant Murf AI.",
|
||||
"Make a custom API call to a specific endpoint": "Passer un appel API personnalisé à un endpoint spécifique",
|
||||
"Language": "Langue",
|
||||
"Style": "Style",
|
||||
"Texts": "Textes",
|
||||
"Voice": "Voix",
|
||||
"File URL": "URL du fichier",
|
||||
"Upload File": "Charger un fichier",
|
||||
"Output Format": "Format de sortie",
|
||||
"Channel Type": "Type de canal",
|
||||
"Pitch": "Tailler",
|
||||
"Rate": "Évaluer",
|
||||
"Encode Output as Base64": "Encoder la sortie en Base64",
|
||||
"Text": "Texte du texte",
|
||||
"Audio Duration (seconds)": "Durée audio (secondes)",
|
||||
"Encode as Base64": "Encoder en Base64",
|
||||
"Audio Format": "Format audio",
|
||||
"Model Version": "Version du modèle",
|
||||
"Multi Native Locale": "Locale multi-native",
|
||||
"Sample Rate": "Taux d'échantillonnage",
|
||||
"Variation": "Variation",
|
||||
"Word Durations as Original Text": "Durée du mot comme texte original",
|
||||
"Pronunciation Dictionary": "Dictionnaire de prononciation",
|
||||
"Method": "Méthode",
|
||||
"Headers": "Headers",
|
||||
"Query Parameters": "Paramètres de requête",
|
||||
"Body": "Body",
|
||||
"Response is Binary ?": "La réponse est Binaire ?",
|
||||
"No Error on Failure": "Aucune erreur en cas d'échec",
|
||||
"Timeout (in seconds)": "Délai d'expiration (en secondes)",
|
||||
"Select your preferred language for the translated output.": "Sélectionnez votre langue préférée pour la sortie traduite.",
|
||||
"Filter by style (optional)": "Filtrer par style (optionnel)",
|
||||
"List of texts to translate": "Liste des textes à traduire",
|
||||
"Choose a voice for converting text into speech": "Choisissez une voix pour convertir le texte en voix",
|
||||
"Publicly accessible URL of the input audio file. Either provide this or upload a file.": "URL publiquement accessible du fichier audio d'entrée. Fournissez ceci ou téléchargez un fichier.",
|
||||
"Upload an audio file for voice conversion": "Télécharger un fichier audio pour la conversion vocale",
|
||||
"Format of the generated audio file": "Format du fichier audio généré",
|
||||
"Choose MONO or STEREO output": "Choisir une sortie MONO ou STEREO",
|
||||
"Pitch adjustment (-50 to 50)": "Ajustement du pas (-50 à 50)",
|
||||
"Speed adjustment (-50 to 50)": "Réglage de la vitesse (-50 à 50)",
|
||||
"Receive audio directly as Base64 instead of a file URL": "Recevoir l'audio directement en Base64 au lieu d'une URL de fichier",
|
||||
"The text to be synthesized.": "Le texte à synthétiser.",
|
||||
"Specify audio length. If 0, Murf ignores this. Only for Gen2 model.": "Spécifiez la longueur audio. Si 0, Murf ignore cela. Seulement pour le modèle Gen2.",
|
||||
"Mono or Stereo output.": "Sortie Mono ou Stéréo.",
|
||||
"Return Base64 encoded audio instead of URL (zero retention).": "Renvoyer l'audio encodé en Base64 au lieu de l'URL (valeur zéro).",
|
||||
"Select audio format.": "Sélectionnez le format audio.",
|
||||
"Choose Gen1 or Gen2.": "Choisissez Gen1 ou Gen2.",
|
||||
"Set multi-language voice (e.g., en-US, es-ES). Only for Gen2.": "Définir la voix multilingue (par exemple, en-US, es-ES). Uniquement pour Gen2.",
|
||||
"Pitch adjustment (-50 to 50).": "Réglage de la hauteur (-50 à 50).",
|
||||
"Speed adjustment (-50 to 50).": "Réglage de la vitesse (-50 à 50).",
|
||||
"Voice style (e.g., 'default', 'calm', 'energetic'). Check voice details.": "Style vocal (par exemple, 'default', 'calm', 'energetic'). Vérifiez les détails de la voix.",
|
||||
"Defaults to 44100. Allowed: 8000, 24000, 44100, 48000.": "Par défaut 44100. Autorisé : 8000, 24000, 44100, 48000.",
|
||||
"Variation level (0–5). Defaults to 1. Higher = more natural pauses/pitch/speed.": "Niveau de variation (0-5). Valeur par défaut à 1. Plus élevé = plus de pauses naturelles/pitch/vitesse.",
|
||||
"If true, response word timings map to original text. (English only).": "Si vrai, les timings des mots de réponse correspondent au texte original. (anglais seulement).",
|
||||
"Custom word pronunciations.": "pronunciations de mots personnalisés.",
|
||||
"Authorization headers are injected automatically from your connection.": "Les Headers d'autorisation sont injectés automatiquement à partir de votre connexion.",
|
||||
"Enable for files like PDFs, images, etc..": "Activer pour les fichiers comme les PDFs, les images, etc.",
|
||||
"MP3": "Mp3",
|
||||
"WAV": "WAV",
|
||||
"FLAC": "FLAC",
|
||||
"OGG": "OG",
|
||||
"Mono": "Mono",
|
||||
"Stereo": "Stereo",
|
||||
"ALAW": "ALAW",
|
||||
"ULAW": "ULAI",
|
||||
"PCM": "PCM",
|
||||
"GEN1": "GEN1",
|
||||
"GEN2": "GEN2",
|
||||
"GET": "GET",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "DELETE",
|
||||
"HEAD": "HEAD"
|
||||
}
|
||||
@@ -0,0 +1,85 @@
|
||||
{
|
||||
"Enter your API key from https://murf.ai": "https://murf.aiからAPIキーを入力してください",
|
||||
"List Voices": "ボイス一覧",
|
||||
"Translate Text": "テキストを翻訳",
|
||||
"Voice Changer": "ボイスチェンジャー",
|
||||
"Text to Speech": "テキスト読み上げ",
|
||||
"Custom API Call": "カスタムAPI通話",
|
||||
"Get the list of available voices for text-to-speech": "テキスト読み上げで利用可能なボイスの一覧を取得します",
|
||||
"Translate one or more texts to the target language.": "1つ以上のテキストをターゲット言語に翻訳します。",
|
||||
"Convert an input audio file to a different voice using Murf Voice Changer.": "Murf Voice Changer を使用して、入力オーディオファイルを別の音声に変換します。",
|
||||
"Converts input text into speech using Murf AI.": "Murf AI を使用して入力テキストを音声に変換します。",
|
||||
"Make a custom API call to a specific endpoint": "特定のエンドポイントへのカスタム API コールを実行します。",
|
||||
"Language": "言語",
|
||||
"Style": "スタイル",
|
||||
"Texts": "テキスト",
|
||||
"Voice": "音声",
|
||||
"File URL": "ファイル URL",
|
||||
"Upload File": "ファイルをアップロード",
|
||||
"Output Format": "出力形式",
|
||||
"Channel Type": "チャンネルタイプ",
|
||||
"Pitch": "Pitch",
|
||||
"Rate": "利率",
|
||||
"Encode Output as Base64": "出力を Base64 としてエンコード",
|
||||
"Text": "テキスト",
|
||||
"Audio Duration (seconds)": "音声の持続時間(秒)",
|
||||
"Encode as Base64": "Base64 としてエンコード",
|
||||
"Audio Format": "オーディオ形式",
|
||||
"Model Version": "モデルのバージョン",
|
||||
"Multi Native Locale": "マルチネイティブロケール:",
|
||||
"Sample Rate": "サンプルレート",
|
||||
"Variation": "バリエーション",
|
||||
"Word Durations as Original Text": "原文としての単語期間",
|
||||
"Pronunciation Dictionary": "発音辞書",
|
||||
"Method": "方法",
|
||||
"Headers": "ヘッダー",
|
||||
"Query Parameters": "クエリパラメータ",
|
||||
"Body": "本文",
|
||||
"Response is Binary ?": "応答はバイナリですか?",
|
||||
"No Error on Failure": "失敗時にエラーはありません",
|
||||
"Timeout (in seconds)": "タイムアウト(秒)",
|
||||
"Select your preferred language for the translated output.": "翻訳された出力に使用する言語を選択します。",
|
||||
"Filter by style (optional)": "スタイルでフィルター (オプション)",
|
||||
"List of texts to translate": "翻訳するテキストのリスト",
|
||||
"Choose a voice for converting text into speech": "テキストを音声に変換する音声を選択",
|
||||
"Publicly accessible URL of the input audio file. Either provide this or upload a file.": "入力オーディオファイルのアクセス可能なURL。これを指定するか、ファイルをアップロードしてください。",
|
||||
"Upload an audio file for voice conversion": "音声変換用の音声ファイルをアップロード",
|
||||
"Format of the generated audio file": "生成されたオーディオファイルの形式",
|
||||
"Choose MONO or STEREO output": "MONOまたはSTEREO出力を選択してください",
|
||||
"Pitch adjustment (-50 to 50)": "ピッチ調整 (-50〜50)",
|
||||
"Speed adjustment (-50 to 50)": "速度調整(-50~50)",
|
||||
"Receive audio directly as Base64 instead of a file URL": "ファイルの URL の代わりに Base64 として音声を直接受信する",
|
||||
"The text to be synthesized.": "合成されるテキスト。",
|
||||
"Specify audio length. If 0, Murf ignores this. Only for Gen2 model.": "オーディオの長さを指定します。0の場合、Murfはこれを無視します。Gen2モデルのみ。",
|
||||
"Mono or Stereo output.": "モノラルまたはステレオ出力。",
|
||||
"Return Base64 encoded audio instead of URL (zero retention).": "URL の代わりに Base64 エンコードされたオーディオを返します (保持はゼロ)。",
|
||||
"Select audio format.": "音声形式を選択します。",
|
||||
"Choose Gen1 or Gen2.": "Gen1またはGen2を選択します。",
|
||||
"Set multi-language voice (e.g., en-US, es-ES). Only for Gen2.": "多言語音声(例:en-US、es-ES)を設定します。Gen2のみ。",
|
||||
"Pitch adjustment (-50 to 50).": "ピッチ調整(-50〜50)。",
|
||||
"Speed adjustment (-50 to 50).": "速度調整(-50~50)",
|
||||
"Voice style (e.g., 'default', 'calm', 'energetic'). Check voice details.": "音声スタイル (例: 'default', 'calm', 'energic'). 音声の詳細を確認してください.",
|
||||
"Defaults to 44100. Allowed: 8000, 24000, 44100, 48000.": "デフォルトは44100です。 許可されている: 8000, 24000, 44100, 48000.",
|
||||
"Variation level (0–5). Defaults to 1. Higher = more natural pauses/pitch/speed.": "バリエーションレベル(0~5)。デフォルトは1です。高い = より自然な一時停止/ピッチ/スピード。",
|
||||
"If true, response word timings map to original text. (English only).": "true の場合、応答ワードのタイミングは元のテキストにマップされます。",
|
||||
"Custom word pronunciations.": "カスタムの単語の発音。",
|
||||
"Authorization headers are injected automatically from your connection.": "認証ヘッダは接続から自動的に注入されます。",
|
||||
"Enable for files like PDFs, images, etc..": "PDF、画像などのファイルを有効にします。",
|
||||
"MP3": "MP3",
|
||||
"WAV": "WAV",
|
||||
"FLAC": "Flac(フラッシュ)",
|
||||
"OGG": "OGG",
|
||||
"Mono": "モノラル",
|
||||
"Stereo": "Stereo",
|
||||
"ALAW": "ALAW",
|
||||
"ULAW": "ULAW",
|
||||
"PCM": "PCM",
|
||||
"GEN1": "GEN1",
|
||||
"GEN2": "GEN2",
|
||||
"GET": "取得",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "削除",
|
||||
"HEAD": "頭"
|
||||
}
|
||||
@@ -0,0 +1,85 @@
|
||||
{
|
||||
"Enter your API key from https://murf.ai": "Voer je API-sleutel in van https://murf.ai",
|
||||
"List Voices": "Lijst stemlijsten",
|
||||
"Translate Text": "Tekst vertalen",
|
||||
"Voice Changer": "Spraakwijziging veranderen",
|
||||
"Text to Speech": "Tekst naar spraak",
|
||||
"Custom API Call": "Custom API Call",
|
||||
"Get the list of available voices for text-to-speech": "Haal de lijst op met beschikbare stemmen voor tekst-naar-spraak",
|
||||
"Translate one or more texts to the target language.": "Vertaal een of meer teksten naar de doeltaal.",
|
||||
"Convert an input audio file to a different voice using Murf Voice Changer.": "Converteer een invoer audiobestand naar een andere stem met behulp van Murf Voice Changer.",
|
||||
"Converts input text into speech using Murf AI.": "Zet input tekst om naar spraak met Murf AI.",
|
||||
"Make a custom API call to a specific endpoint": "Maak een aangepaste API call naar een specifiek eindpunt",
|
||||
"Language": "Taal",
|
||||
"Style": "CSS",
|
||||
"Texts": "Teksten",
|
||||
"Voice": "Stem",
|
||||
"File URL": "Bestand URL",
|
||||
"Upload File": "Bestand uploaden",
|
||||
"Output Format": "Uitvoer formaat",
|
||||
"Channel Type": "Type kanaal",
|
||||
"Pitch": "Toonhoogte",
|
||||
"Rate": "Beoordelen",
|
||||
"Encode Output as Base64": "Coderen uitvoer als Base64",
|
||||
"Text": "Tekstveld",
|
||||
"Audio Duration (seconds)": "Audioduur (seconden)",
|
||||
"Encode as Base64": "Coderen als Base64",
|
||||
"Audio Format": "Audio-formaat",
|
||||
"Model Version": "Model versie",
|
||||
"Multi Native Locale": "Multi oorspronkelijke lokalisatie",
|
||||
"Sample Rate": "Sample snelheid",
|
||||
"Variation": "Variatie",
|
||||
"Word Durations as Original Text": "Duur woorden als oorspronkelijke tekst",
|
||||
"Pronunciation Dictionary": "Uitspraak Woordenboek",
|
||||
"Method": "Methode",
|
||||
"Headers": "Kopteksten",
|
||||
"Query Parameters": "Query parameters",
|
||||
"Body": "Lichaam",
|
||||
"Response is Binary ?": "Antwoord is binair?",
|
||||
"No Error on Failure": "Geen fout bij fout",
|
||||
"Timeout (in seconds)": "Time-out (in seconden)",
|
||||
"Select your preferred language for the translated output.": "Selecteer uw voorkeurstaal voor de vertaalde uitvoer.",
|
||||
"Filter by style (optional)": "Filter op stijl (optioneel)",
|
||||
"List of texts to translate": "Lijst van te vertalen teksten",
|
||||
"Choose a voice for converting text into speech": "Kies een stem voor het omzetten van tekst in spraak",
|
||||
"Publicly accessible URL of the input audio file. Either provide this or upload a file.": "Openbaar toegankelijke URL van het audiobestand van invoer. Of geef dit op of upload een bestand.",
|
||||
"Upload an audio file for voice conversion": "Een audiobestand voor spraakconversie uploaden",
|
||||
"Format of the generated audio file": "Formaat van het gegenereerde audiobestand",
|
||||
"Choose MONO or STEREO output": "Kies MONO of STEREO uitvoer",
|
||||
"Pitch adjustment (-50 to 50)": "Hoogteaanpassing (-50 tot 50)",
|
||||
"Speed adjustment (-50 to 50)": "Snelheidsaanpassing (-50 tot 50)",
|
||||
"Receive audio directly as Base64 instead of a file URL": "Ontvang direct audio als Base64 in plaats van een bestand-URL",
|
||||
"The text to be synthesized.": "De tekst die gesynthetiseerd moet worden.",
|
||||
"Specify audio length. If 0, Murf ignores this. Only for Gen2 model.": "Geef de audiolengte op. Als 0, Murf dit negeert. Alleen voor Gen2 model.",
|
||||
"Mono or Stereo output.": "Mono of Stereo uitvoer.",
|
||||
"Return Base64 encoded audio instead of URL (zero retention).": "Retourneer Base64 gecodeerde audio in plaats van URL (nul-tentie).",
|
||||
"Select audio format.": "Audio-opmaak selecteren.",
|
||||
"Choose Gen1 or Gen2.": "Kies Gen1 of Gen2.",
|
||||
"Set multi-language voice (e.g., en-US, es-ES). Only for Gen2.": "Meerdere talen spraak instellen (bijv. en-US, es-ES). Alleen voor Gen2.",
|
||||
"Pitch adjustment (-50 to 50).": "Hoogteaanpassing (-50 tot 50).",
|
||||
"Speed adjustment (-50 to 50).": "Snelheidsaanpassing (-50 tot 50).",
|
||||
"Voice style (e.g., 'default', 'calm', 'energetic'). Check voice details.": "Spraakstijl (bijv. 'standaard', 'kalm', 'energetische'). Controleer spraak.",
|
||||
"Defaults to 44100. Allowed: 8000, 24000, 44100, 48000.": "Standaard ingesteld op 44100. Toegestaan: 8000, 24000, 44100, 48000.",
|
||||
"Variation level (0–5). Defaults to 1. Higher = more natural pauses/pitch/speed.": "Variatieniveau (0-5). Standaard ingesteld op 1. Hoger = meer natuurlijke pauze/pitch/snelheid.",
|
||||
"If true, response word timings map to original text. (English only).": "Indien waar, antwoord woorden op de oorspronkelijke tekst. (alleen in het Engels).",
|
||||
"Custom word pronunciations.": "Aangepaste woordwoordeningen.",
|
||||
"Authorization headers are injected automatically from your connection.": "Autorisatie headers worden automatisch geïnjecteerd vanuit uw verbinding.",
|
||||
"Enable for files like PDFs, images, etc..": "Inschakelen voor bestanden zoals PDF's, afbeeldingen etc..",
|
||||
"MP3": "MP3",
|
||||
"WAV": "WV",
|
||||
"FLAC": "FLAC",
|
||||
"OGG": "GROTE",
|
||||
"Mono": "Monochroom",
|
||||
"Stereo": "Stereo",
|
||||
"ALAW": "ALAW",
|
||||
"ULAW": "ULADEN",
|
||||
"PCM": "PCM",
|
||||
"GEN1": "GEN1",
|
||||
"GEN2": "GEN2",
|
||||
"GET": "KRIJG",
|
||||
"POST": "POSTE",
|
||||
"PATCH": "BEKIJK",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "VERWIJDEREN",
|
||||
"HEAD": "HOOFD"
|
||||
}
|
||||
@@ -0,0 +1,85 @@
|
||||
{
|
||||
"Enter your API key from https://murf.ai": "Digite sua chave de API de https://murf.ai",
|
||||
"List Voices": "Lista de Vozes",
|
||||
"Translate Text": "Traduzir texto",
|
||||
"Voice Changer": "Alterador de Voz",
|
||||
"Text to Speech": "Texto para fala",
|
||||
"Custom API Call": "Chamada de API personalizada",
|
||||
"Get the list of available voices for text-to-speech": "Obter a lista de vozes disponíveis para conversão de texto em fala",
|
||||
"Translate one or more texts to the target language.": "Traduza um ou mais textos para o idioma de destino.",
|
||||
"Convert an input audio file to a different voice using Murf Voice Changer.": "Converta um arquivo de áudio para uma voz diferente usando Murf Voice Changer.",
|
||||
"Converts input text into speech using Murf AI.": "Converte texto em fala usando Murf AI.",
|
||||
"Make a custom API call to a specific endpoint": "Faça uma chamada de API personalizada para um ponto de extremidade específico",
|
||||
"Language": "IDIOMA",
|
||||
"Style": "Estilo",
|
||||
"Texts": "Textos",
|
||||
"Voice": "Voz",
|
||||
"File URL": "URL do Arquivo",
|
||||
"Upload File": "Enviar Arquivo",
|
||||
"Output Format": "Formato de saída",
|
||||
"Channel Type": "Tipo de canal",
|
||||
"Pitch": "Tom",
|
||||
"Rate": "Avaliar",
|
||||
"Encode Output as Base64": "Codificar a Saída como Base64",
|
||||
"Text": "texto",
|
||||
"Audio Duration (seconds)": "Duração do Áudio (segundos)",
|
||||
"Encode as Base64": "Codificar como Base64",
|
||||
"Audio Format": "Formato de Áudio",
|
||||
"Model Version": "Versão do Modelo",
|
||||
"Multi Native Locale": "Múltiplos Nativos Locais",
|
||||
"Sample Rate": "Taxa de amostragem",
|
||||
"Variation": "Variação",
|
||||
"Word Durations as Original Text": "Durações de Palavra como Texto Original",
|
||||
"Pronunciation Dictionary": "Dicionário de Pronúncia",
|
||||
"Method": "Método",
|
||||
"Headers": "Cabeçalhos",
|
||||
"Query Parameters": "Parâmetros da consulta",
|
||||
"Body": "Conteúdo",
|
||||
"Response is Binary ?": "A resposta é binária ?",
|
||||
"No Error on Failure": "Nenhum erro no Failure",
|
||||
"Timeout (in seconds)": "Tempo limite (em segundos)",
|
||||
"Select your preferred language for the translated output.": "Selecione seu idioma preferido para a saída traduzida.",
|
||||
"Filter by style (optional)": "Filtrar por estilo (opcional)",
|
||||
"List of texts to translate": "Lista de textos a traduzir",
|
||||
"Choose a voice for converting text into speech": "Escolha uma voz para converter texto em fala",
|
||||
"Publicly accessible URL of the input audio file. Either provide this or upload a file.": "URL publicamente acessível do arquivo de entrada. Forneça isto ou faça upload de um arquivo.",
|
||||
"Upload an audio file for voice conversion": "Carregar arquivo de áudio para conversão de voz",
|
||||
"Format of the generated audio file": "Formato do arquivo de áudio gerado",
|
||||
"Choose MONO or STEREO output": "Escolher saída MONO ou STEREO",
|
||||
"Pitch adjustment (-50 to 50)": "Ajuste de tom (-50 a 50)",
|
||||
"Speed adjustment (-50 to 50)": "Ajuste de velocidade (-50 para 50)",
|
||||
"Receive audio directly as Base64 instead of a file URL": "Receber áudio diretamente como Base64 em vez de uma URL de arquivo",
|
||||
"The text to be synthesized.": "O texto a ser sintetizado.",
|
||||
"Specify audio length. If 0, Murf ignores this. Only for Gen2 model.": "Especificar comprimento de áudio. Se 0, Murf ignora isso. Apenas para o modelo Gen2.",
|
||||
"Mono or Stereo output.": "Saída de mono ou estéreo.",
|
||||
"Return Base64 encoded audio instead of URL (zero retention).": "Retornar áudio codificado em Base64 em vez de URL (retenção zero).",
|
||||
"Select audio format.": "Selecionar formato de áudio.",
|
||||
"Choose Gen1 or Gen2.": "Escolher Gênero ou Gen2.",
|
||||
"Set multi-language voice (e.g., en-US, es-ES). Only for Gen2.": "Definir voz multiidioma (por exemplo, en-US, es-ES). Apenas para o Gen2.",
|
||||
"Pitch adjustment (-50 to 50).": "Ajuste de Tom (-50 a 50).",
|
||||
"Speed adjustment (-50 to 50).": "Ajuste de velocidade (-50 para 50).",
|
||||
"Voice style (e.g., 'default', 'calm', 'energetic'). Check voice details.": "Estilo de voz (ex.: 'default', 'calm', 'energetica'). Verifique os detalhes da voz.",
|
||||
"Defaults to 44100. Allowed: 8000, 24000, 44100, 48000.": "O valor padrão é 44100. Permitido: 8000, 24000, 44100, 48000.",
|
||||
"Variation level (0–5). Defaults to 1. Higher = more natural pauses/pitch/speed.": "Nível de variação (0–5). O padrão é 1. Superior = mais naturais pausas/tom/velocidade.",
|
||||
"If true, response word timings map to original text. (English only).": "Se verdadeiro, as palavras de resposta são mapeadas para o texto original. (apenas em inglês).",
|
||||
"Custom word pronunciations.": "pronúncias de palavra personalizada.",
|
||||
"Authorization headers are injected automatically from your connection.": "Os cabeçalhos de autorização são inseridos automaticamente a partir da sua conexão.",
|
||||
"Enable for files like PDFs, images, etc..": "Habilitar para arquivos como PDFs, imagens, etc..",
|
||||
"MP3": "MP3",
|
||||
"WAV": "WAV",
|
||||
"FLAC": "BANDEIRA",
|
||||
"OGG": "OGG",
|
||||
"Mono": "Monocromático",
|
||||
"Stereo": "Stereo",
|
||||
"ALAW": "ALAW",
|
||||
"ULAW": "BANDEIRA",
|
||||
"PCM": "PCM",
|
||||
"GEN1": "GEN1",
|
||||
"GEN2": "GEN2",
|
||||
"GET": "OBTER",
|
||||
"POST": "POSTAR",
|
||||
"PATCH": "COMPRAR",
|
||||
"PUT": "COLOCAR",
|
||||
"DELETE": "EXCLUIR",
|
||||
"HEAD": "CABEÇA"
|
||||
}
|
||||
@@ -0,0 +1,85 @@
|
||||
{
|
||||
"Enter your API key from https://murf.ai": "Enter your API key from https://murf.ai",
|
||||
"List Voices": "List Voices",
|
||||
"Translate Text": "Translate Text",
|
||||
"Voice Changer": "Voice Changer",
|
||||
"Text to Speech": "Text to Speech",
|
||||
"Custom API Call": "Custom API Call",
|
||||
"Get the list of available voices for text-to-speech": "Get the list of available voices for text-to-speech",
|
||||
"Translate one or more texts to the target language.": "Translate one or more texts to the target language.",
|
||||
"Convert an input audio file to a different voice using Murf Voice Changer.": "Convert an input audio file to a different voice using Murf Voice Changer.",
|
||||
"Converts input text into speech using Murf AI.": "Converts input text into speech using Murf AI.",
|
||||
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
|
||||
"Language": "Language",
|
||||
"Style": "Style",
|
||||
"Texts": "Texts",
|
||||
"Voice": "Voice",
|
||||
"File URL": "File URL",
|
||||
"Upload File": "Upload File",
|
||||
"Output Format": "Output Format",
|
||||
"Channel Type": "Channel Type",
|
||||
"Pitch": "Pitch",
|
||||
"Rate": "Rate",
|
||||
"Encode Output as Base64": "Encode Output as Base64",
|
||||
"Text": "Text",
|
||||
"Audio Duration (seconds)": "Audio Duration (seconds)",
|
||||
"Encode as Base64": "Encode as Base64",
|
||||
"Audio Format": "Audio Format",
|
||||
"Model Version": "Model Version",
|
||||
"Multi Native Locale": "Multi Native Locale",
|
||||
"Sample Rate": "Sample Rate",
|
||||
"Variation": "Variation",
|
||||
"Word Durations as Original Text": "Word Durations as Original Text",
|
||||
"Pronunciation Dictionary": "Pronunciation Dictionary",
|
||||
"Method": "Method",
|
||||
"Headers": "Headers",
|
||||
"Query Parameters": "Query Parameters",
|
||||
"Body": "Body",
|
||||
"Response is Binary ?": "Response is Binary ?",
|
||||
"No Error on Failure": "No Error on Failure",
|
||||
"Timeout (in seconds)": "Timeout (in seconds)",
|
||||
"Select your preferred language for the translated output.": "Select your preferred language for the translated output.",
|
||||
"Filter by style (optional)": "Filter by style (optional)",
|
||||
"List of texts to translate": "List of texts to translate",
|
||||
"Choose a voice for converting text into speech": "Choose a voice for converting text into speech",
|
||||
"Publicly accessible URL of the input audio file. Either provide this or upload a file.": "Publicly accessible URL of the input audio file. Either provide this or upload a file.",
|
||||
"Upload an audio file for voice conversion": "Upload an audio file for voice conversion",
|
||||
"Format of the generated audio file": "Format of the generated audio file",
|
||||
"Choose MONO or STEREO output": "Choose MONO or STEREO output",
|
||||
"Pitch adjustment (-50 to 50)": "Pitch adjustment (-50 to 50)",
|
||||
"Speed adjustment (-50 to 50)": "Speed adjustment (-50 to 50)",
|
||||
"Receive audio directly as Base64 instead of a file URL": "Receive audio directly as Base64 instead of a file URL",
|
||||
"The text to be synthesized.": "The text to be synthesized.",
|
||||
"Specify audio length. If 0, Murf ignores this. Only for Gen2 model.": "Specify audio length. If 0, Murf ignores this. Only for Gen2 model.",
|
||||
"Mono or Stereo output.": "Mono or Stereo output.",
|
||||
"Return Base64 encoded audio instead of URL (zero retention).": "Return Base64 encoded audio instead of URL (zero retention).",
|
||||
"Select audio format.": "Select audio format.",
|
||||
"Choose Gen1 or Gen2.": "Choose Gen1 or Gen2.",
|
||||
"Set multi-language voice (e.g., en-US, es-ES). Only for Gen2.": "Set multi-language voice (e.g., en-US, es-ES). Only for Gen2.",
|
||||
"Pitch adjustment (-50 to 50).": "Pitch adjustment (-50 to 50).",
|
||||
"Speed adjustment (-50 to 50).": "Speed adjustment (-50 to 50).",
|
||||
"Voice style (e.g., 'default', 'calm', 'energetic'). Check voice details.": "Voice style (e.g., 'default', 'calm', 'energetic'). Check voice details.",
|
||||
"Defaults to 44100. Allowed: 8000, 24000, 44100, 48000.": "Defaults to 44100. Allowed: 8000, 24000, 44100, 48000.",
|
||||
"Variation level (0–5). Defaults to 1. Higher = more natural pauses/pitch/speed.": "Variation level (0–5). Defaults to 1. Higher = more natural pauses/pitch/speed.",
|
||||
"If true, response word timings map to original text. (English only).": "If true, response word timings map to original text. (English only).",
|
||||
"Custom word pronunciations.": "Custom word pronunciations.",
|
||||
"Authorization headers are injected automatically from your connection.": "Authorization headers are injected automatically from your connection.",
|
||||
"Enable for files like PDFs, images, etc..": "Enable for files like PDFs, images, etc..",
|
||||
"MP3": "MP3",
|
||||
"WAV": "WAV",
|
||||
"FLAC": "FLAC",
|
||||
"OGG": "OGG",
|
||||
"Mono": "Mono",
|
||||
"Stereo": "Stereo",
|
||||
"ALAW": "ALAW",
|
||||
"ULAW": "ULAW",
|
||||
"PCM": "PCM",
|
||||
"GEN1": "GEN1",
|
||||
"GEN2": "GEN2",
|
||||
"GET": "GET",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "DELETE",
|
||||
"HEAD": "HEAD"
|
||||
}
|
||||
@@ -0,0 +1,85 @@
|
||||
{
|
||||
"Enter your API key from https://murf.ai": "Enter your API key from https://murf.ai",
|
||||
"List Voices": "List Voices",
|
||||
"Translate Text": "Translate Text",
|
||||
"Voice Changer": "Voice Changer",
|
||||
"Text to Speech": "Text to Speech",
|
||||
"Custom API Call": "自定义 API 呼叫",
|
||||
"Get the list of available voices for text-to-speech": "Get the list of available voices for text-to-speech",
|
||||
"Translate one or more texts to the target language.": "Translate one or more texts to the target language.",
|
||||
"Convert an input audio file to a different voice using Murf Voice Changer.": "Convert an input audio file to a different voice using Murf Voice Changer.",
|
||||
"Converts input text into speech using Murf AI.": "Converts input text into speech using Murf AI.",
|
||||
"Make a custom API call to a specific endpoint": "将一个自定义 API 调用到一个特定的终点",
|
||||
"Language": "Language",
|
||||
"Style": "Style",
|
||||
"Texts": "Texts",
|
||||
"Voice": "Voice",
|
||||
"File URL": "File URL",
|
||||
"Upload File": "Upload File",
|
||||
"Output Format": "Output Format",
|
||||
"Channel Type": "Channel Type",
|
||||
"Pitch": "Pitch",
|
||||
"Rate": "Rate",
|
||||
"Encode Output as Base64": "Encode Output as Base64",
|
||||
"Text": "文本",
|
||||
"Audio Duration (seconds)": "Audio Duration (seconds)",
|
||||
"Encode as Base64": "Encode as Base64",
|
||||
"Audio Format": "Audio Format",
|
||||
"Model Version": "Model Version",
|
||||
"Multi Native Locale": "Multi Native Locale",
|
||||
"Sample Rate": "Sample Rate",
|
||||
"Variation": "Variation",
|
||||
"Word Durations as Original Text": "Word Durations as Original Text",
|
||||
"Pronunciation Dictionary": "Pronunciation Dictionary",
|
||||
"Method": "方法",
|
||||
"Headers": "信头",
|
||||
"Query Parameters": "查询参数",
|
||||
"Body": "正文内容",
|
||||
"Response is Binary ?": "Response is Binary ?",
|
||||
"No Error on Failure": "失败时没有错误",
|
||||
"Timeout (in seconds)": "超时(秒)",
|
||||
"Select your preferred language for the translated output.": "Select your preferred language for the translated output.",
|
||||
"Filter by style (optional)": "Filter by style (optional)",
|
||||
"List of texts to translate": "List of texts to translate",
|
||||
"Choose a voice for converting text into speech": "Choose a voice for converting text into speech",
|
||||
"Publicly accessible URL of the input audio file. Either provide this or upload a file.": "Publicly accessible URL of the input audio file. Either provide this or upload a file.",
|
||||
"Upload an audio file for voice conversion": "Upload an audio file for voice conversion",
|
||||
"Format of the generated audio file": "Format of the generated audio file",
|
||||
"Choose MONO or STEREO output": "Choose MONO or STEREO output",
|
||||
"Pitch adjustment (-50 to 50)": "Pitch adjustment (-50 to 50)",
|
||||
"Speed adjustment (-50 to 50)": "Speed adjustment (-50 to 50)",
|
||||
"Receive audio directly as Base64 instead of a file URL": "Receive audio directly as Base64 instead of a file URL",
|
||||
"The text to be synthesized.": "The text to be synthesized.",
|
||||
"Specify audio length. If 0, Murf ignores this. Only for Gen2 model.": "Specify audio length. If 0, Murf ignores this. Only for Gen2 model.",
|
||||
"Mono or Stereo output.": "Mono or Stereo output.",
|
||||
"Return Base64 encoded audio instead of URL (zero retention).": "Return Base64 encoded audio instead of URL (zero retention).",
|
||||
"Select audio format.": "Select audio format.",
|
||||
"Choose Gen1 or Gen2.": "Choose Gen1 or Gen2.",
|
||||
"Set multi-language voice (e.g., en-US, es-ES). Only for Gen2.": "Set multi-language voice (e.g., en-US, es-ES). Only for Gen2.",
|
||||
"Pitch adjustment (-50 to 50).": "Pitch adjustment (-50 to 50).",
|
||||
"Speed adjustment (-50 to 50).": "Speed adjustment (-50 to 50).",
|
||||
"Voice style (e.g., 'default', 'calm', 'energetic'). Check voice details.": "Voice style (e.g., 'default', 'calm', 'energetic'). Check voice details.",
|
||||
"Defaults to 44100. Allowed: 8000, 24000, 44100, 48000.": "Defaults to 44100. Allowed: 8000, 24000, 44100, 48000.",
|
||||
"Variation level (0–5). Defaults to 1. Higher = more natural pauses/pitch/speed.": "Variation level (0–5). Defaults to 1. Higher = more natural pauses/pitch/speed.",
|
||||
"If true, response word timings map to original text. (English only).": "If true, response word timings map to original text. (English only).",
|
||||
"Custom word pronunciations.": "Custom word pronunciations.",
|
||||
"Authorization headers are injected automatically from your connection.": "授权头自动从您的连接中注入。",
|
||||
"Enable for files like PDFs, images, etc..": "Enable for files like PDFs, images, etc..",
|
||||
"MP3": "MP3",
|
||||
"WAV": "WAV",
|
||||
"FLAC": "FLAC",
|
||||
"OGG": "OGG",
|
||||
"Mono": "Mono",
|
||||
"Stereo": "Stereo",
|
||||
"ALAW": "ALAW",
|
||||
"ULAW": "ULAW",
|
||||
"PCM": "PCM",
|
||||
"GEN1": "GEN1",
|
||||
"GEN2": "GEN2",
|
||||
"GET": "获取",
|
||||
"POST": "帖子",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "弹出",
|
||||
"DELETE": "删除",
|
||||
"HEAD": "黑色"
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
import { createPiece } from '@activepieces/pieces-framework';
|
||||
import { murfAuth } from './lib/common/auth';
|
||||
|
||||
import { listVoices } from './lib/actions/list-voices';
|
||||
import { translateText } from './lib/actions/translate-text';
|
||||
import { voiceChange } from './lib/actions/voice-change';
|
||||
import { textToSpeech } from './lib/actions/text-to-speech';
|
||||
import { PieceCategory } from '@activepieces/shared';
|
||||
import { createCustomApiCallAction } from '@activepieces/pieces-common';
|
||||
import { BASE_URL } from './lib/common/client';
|
||||
|
||||
export const murfApi = createPiece({
|
||||
displayName: "Murf AI",
|
||||
auth: murfAuth,
|
||||
minimumSupportedRelease: '0.36.1',
|
||||
logoUrl: 'https://cdn.activepieces.com/pieces/murf-api.png',
|
||||
authors: ['Niket2035'],
|
||||
categories: [PieceCategory.ARTIFICIAL_INTELLIGENCE],
|
||||
actions: [
|
||||
listVoices,
|
||||
translateText,
|
||||
voiceChange,
|
||||
textToSpeech,
|
||||
createCustomApiCallAction({
|
||||
auth: murfAuth,
|
||||
baseUrl: () => BASE_URL,
|
||||
authMapping: async (auth) => {
|
||||
return {
|
||||
'api-key': auth.secret_text,
|
||||
};
|
||||
},
|
||||
}),
|
||||
],
|
||||
triggers: [],
|
||||
});
|
||||
@@ -0,0 +1,87 @@
|
||||
import { createAction, Property } from "@activepieces/pieces-framework";
|
||||
import { HttpMethod } from "@activepieces/pieces-common";
|
||||
import { makeRequest } from "../common/client";
|
||||
import { murfAuth } from "../common/auth";
|
||||
import { murfCommon } from "../common/dropdown";
|
||||
|
||||
export const listVoices = createAction({
|
||||
auth: murfAuth,
|
||||
name: "list-voices",
|
||||
displayName: "List Voices",
|
||||
description: "Get the list of available voices for text-to-speech",
|
||||
props: {
|
||||
locale: murfCommon.language,
|
||||
style: Property.Dropdown({
|
||||
auth: murfAuth,
|
||||
displayName: "Style",
|
||||
description: "Filter by style (optional)",
|
||||
required: false,
|
||||
refreshers: ["locale"],
|
||||
options: async ({ auth, locale }) => {
|
||||
if (!auth) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: "Please connect your Murf account first",
|
||||
};
|
||||
}
|
||||
|
||||
const response = await makeRequest(auth.secret_text , HttpMethod.GET, "/speech/voices");
|
||||
const voices = Array.isArray(response) ? response : [];
|
||||
|
||||
|
||||
const filtered = locale
|
||||
? voices.filter((v: any) => v.locale === locale || (Array.isArray(v.supportedLocales) && v.supportedLocales.includes(locale)))
|
||||
: voices;
|
||||
|
||||
const allStyles = new Set<string>();
|
||||
filtered.forEach((voice: any) => {
|
||||
if (Array.isArray(voice.availableStyles)) {
|
||||
voice.availableStyles.forEach((s: string) => allStyles.add(s));
|
||||
}
|
||||
});
|
||||
|
||||
return {
|
||||
disabled: false,
|
||||
options: [
|
||||
{ label: "All Styles", value: "" },
|
||||
...Array.from(allStyles).map((s) => ({
|
||||
label: s.charAt(0).toUpperCase() + s.slice(1),
|
||||
value: s,
|
||||
})),
|
||||
],
|
||||
};
|
||||
},
|
||||
}),
|
||||
},
|
||||
|
||||
async run(context) {
|
||||
const { locale, style } = context.propsValue;
|
||||
|
||||
const response = await makeRequest(context.auth.secret_text, HttpMethod.GET, "/speech/voices");
|
||||
const voices = Array.isArray(response) ? response : [];
|
||||
|
||||
let filtered = voices;
|
||||
if (locale) {
|
||||
filtered = filtered.filter(
|
||||
(v: any) => v.locale === locale || (Array.isArray(v.supportedLocales) && v.supportedLocales.includes(locale))
|
||||
);
|
||||
}
|
||||
if (style) {
|
||||
filtered = filtered.filter((v: any) =>
|
||||
v.availableStyles?.includes(style)
|
||||
);
|
||||
}
|
||||
|
||||
return {
|
||||
voices: filtered.map((voice: any) => ({
|
||||
voiceId: voice.voiceId,
|
||||
displayName: voice.displayName,
|
||||
gender: voice.gender,
|
||||
locale: voice.locale,
|
||||
supportedLocales: voice.supportedLocales,
|
||||
availableStyles: voice.availableStyles,
|
||||
})),
|
||||
};
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,145 @@
|
||||
import { createAction, Property } from "@activepieces/pieces-framework";
|
||||
import { murfAuth } from "../common/auth";
|
||||
import { makeRequest } from "../common/client";
|
||||
import { HttpMethod } from "@activepieces/pieces-common";
|
||||
import { murfCommon } from "../common/dropdown";
|
||||
|
||||
export const textToSpeech = createAction({
|
||||
auth: murfAuth,
|
||||
name: "text_to_speech",
|
||||
displayName: "Text to Speech",
|
||||
description: "Converts input text into speech using Murf AI.",
|
||||
props: {
|
||||
language: murfCommon.language,
|
||||
voiceId: murfCommon.voiceId,
|
||||
text: Property.LongText({
|
||||
displayName: "Text",
|
||||
description: "The text to be synthesized.",
|
||||
required: true,
|
||||
}),
|
||||
audioDuration: Property.Number({
|
||||
displayName: "Audio Duration (seconds)",
|
||||
description:
|
||||
"Specify audio length. If 0, Murf ignores this. Only for Gen2 model.",
|
||||
required: false,
|
||||
}),
|
||||
channelType: Property.StaticDropdown({
|
||||
displayName: "Channel Type",
|
||||
description: "Mono or Stereo output.",
|
||||
required: false,
|
||||
options: {
|
||||
options: [
|
||||
{ label: "Mono", value: "MONO" },
|
||||
{ label: "Stereo", value: "STEREO" },
|
||||
],
|
||||
},
|
||||
}),
|
||||
encodeAsBase64: Property.Checkbox({
|
||||
displayName: "Encode as Base64",
|
||||
description:
|
||||
"Return Base64 encoded audio instead of URL (zero retention).",
|
||||
required: false,
|
||||
}),
|
||||
format: Property.StaticDropdown({
|
||||
displayName: "Audio Format",
|
||||
description: "Select audio format.",
|
||||
required: false,
|
||||
options: {
|
||||
options: [
|
||||
{ label: "MP3", value: "MP3" },
|
||||
{ label: "WAV", value: "WAV" },
|
||||
{ label: "FLAC", value: "FLAC" },
|
||||
{ label: "ALAW", value: "ALAW" },
|
||||
{ label: "ULAW", value: "ULAW" },
|
||||
{ label: "PCM", value: "PCM" },
|
||||
{ label: "OGG", value: "OGG" },
|
||||
],
|
||||
},
|
||||
}),
|
||||
modelVersion: Property.StaticDropdown({
|
||||
displayName: "Model Version",
|
||||
description: "Choose Gen1 or Gen2.",
|
||||
required: false,
|
||||
options: {
|
||||
options: [
|
||||
{ label: "GEN1", value: "GEN1" },
|
||||
{ label: "GEN2", value: "GEN2" },
|
||||
],
|
||||
},
|
||||
}),
|
||||
multiNativeLocale: Property.ShortText({
|
||||
displayName: "Multi Native Locale",
|
||||
description:
|
||||
"Set multi-language voice (e.g., en-US, es-ES). Only for Gen2.",
|
||||
required: false,
|
||||
}),
|
||||
pitch: Property.Number({
|
||||
displayName: "Pitch",
|
||||
description: "Pitch adjustment (-50 to 50).",
|
||||
required: false,
|
||||
}),
|
||||
rate: Property.Number({
|
||||
displayName: "Rate",
|
||||
description: "Speed adjustment (-50 to 50).",
|
||||
required: false,
|
||||
}),
|
||||
style: Property.ShortText({
|
||||
displayName: "Style",
|
||||
description:
|
||||
"Voice style (e.g., 'default', 'calm', 'energetic'). Check voice details.",
|
||||
required: false,
|
||||
}),
|
||||
sampleRate: Property.Number({
|
||||
displayName: "Sample Rate",
|
||||
description: "Defaults to 44100. Allowed: 8000, 24000, 44100, 48000.",
|
||||
required: false,
|
||||
}),
|
||||
variation: Property.Number({
|
||||
displayName: "Variation",
|
||||
description:
|
||||
"Variation level (0–5). Defaults to 1. Higher = more natural pauses/pitch/speed.",
|
||||
required: false,
|
||||
}),
|
||||
wordDurationsAsOriginalText: Property.Checkbox({
|
||||
displayName: "Word Durations as Original Text",
|
||||
description:
|
||||
"If true, response word timings map to original text. (English only).",
|
||||
required: false,
|
||||
}),
|
||||
pronunciationDictionary: Property.Json({
|
||||
displayName: "Pronunciation Dictionary",
|
||||
description:
|
||||
"Custom word pronunciations.",
|
||||
required: false,
|
||||
}),
|
||||
},
|
||||
async run(context) {
|
||||
const body = {
|
||||
text: context.propsValue.text,
|
||||
voiceId: context.propsValue.voiceId,
|
||||
audioDuration: context.propsValue.audioDuration,
|
||||
channelType: context.propsValue.channelType,
|
||||
encodeAsBase64: context.propsValue.encodeAsBase64,
|
||||
format: context.propsValue.format,
|
||||
modelVersion: context.propsValue.modelVersion,
|
||||
multiNativeLocale: context.propsValue.multiNativeLocale,
|
||||
pitch: context.propsValue.pitch,
|
||||
rate: context.propsValue.rate,
|
||||
sampleRate: context.propsValue.sampleRate,
|
||||
style: context.propsValue.style,
|
||||
variation: context.propsValue.variation,
|
||||
wordDurationsAsOriginalText:
|
||||
context.propsValue.wordDurationsAsOriginalText,
|
||||
pronunciationDictionary: context.propsValue.pronunciationDictionary,
|
||||
};
|
||||
|
||||
const response = await makeRequest(
|
||||
context.auth.secret_text ,
|
||||
HttpMethod.POST,
|
||||
"/speech/generate",
|
||||
body
|
||||
);
|
||||
|
||||
return response;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,33 @@
|
||||
import { createAction, Property } from "@activepieces/pieces-framework";
|
||||
import { murfAuth } from "../common/auth";
|
||||
import { murfCommon } from "../common/dropdown";
|
||||
import { makeRequest } from "../common/client";
|
||||
import { HttpMethod } from "@activepieces/pieces-common";
|
||||
|
||||
export const translateText = createAction({
|
||||
auth: murfAuth,
|
||||
name: "translateText",
|
||||
displayName: "Translate Text",
|
||||
description: "Translate one or more texts to the target language.",
|
||||
props: {
|
||||
targetLanguage: murfCommon.language,
|
||||
texts: Property.Array({
|
||||
displayName: "Texts",
|
||||
description: "List of texts to translate",
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
async run({ auth, propsValue }) {
|
||||
const response = await makeRequest(
|
||||
auth.secret_text ,
|
||||
HttpMethod.POST,
|
||||
"/text/translate",
|
||||
{
|
||||
target_language: propsValue.targetLanguage,
|
||||
texts: propsValue.texts,
|
||||
}
|
||||
);
|
||||
|
||||
return response;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,139 @@
|
||||
import { ApFile, createAction, Property } from "@activepieces/pieces-framework";
|
||||
import { HttpMethod } from "@activepieces/pieces-common";
|
||||
import { murfAuth } from "../common/auth";
|
||||
import { murfCommon } from "../common/dropdown";
|
||||
import { makeRequest } from "../common/client";
|
||||
import FormData from "form-data";
|
||||
|
||||
export const voiceChange = createAction({
|
||||
auth: murfAuth,
|
||||
name: "voice-changer-convert",
|
||||
displayName: "Voice Changer",
|
||||
description: "Convert an input audio file to a different voice using Murf Voice Changer.",
|
||||
props: {
|
||||
language: murfCommon.language,
|
||||
voiceId: murfCommon.voiceId,
|
||||
fileUrl: Property.ShortText({
|
||||
displayName: "File URL",
|
||||
description: "Publicly accessible URL of the input audio file. Either provide this or upload a file.",
|
||||
required: false,
|
||||
}),
|
||||
file: Property.File({
|
||||
displayName: "Upload File",
|
||||
description: "Upload an audio file for voice conversion",
|
||||
required: false,
|
||||
}),
|
||||
format: Property.StaticDropdown({
|
||||
displayName: "Output Format",
|
||||
description: "Format of the generated audio file",
|
||||
required: false,
|
||||
options: {
|
||||
options: [
|
||||
{ label: "MP3", value: "MP3" },
|
||||
{ label: "WAV", value: "WAV" },
|
||||
{ label: "FLAC", value: "FLAC" },
|
||||
{ label: "OGG", value: "OGG" },
|
||||
],
|
||||
},
|
||||
}),
|
||||
channelType: Property.StaticDropdown({
|
||||
displayName: "Channel Type",
|
||||
description: "Choose MONO or STEREO output",
|
||||
required: false,
|
||||
options: {
|
||||
options: [
|
||||
{ label: "Mono", value: "MONO" },
|
||||
{ label: "Stereo", value: "STEREO" },
|
||||
],
|
||||
},
|
||||
}),
|
||||
pitch: Property.Number({
|
||||
displayName: "Pitch",
|
||||
description: "Pitch adjustment (-50 to 50)",
|
||||
required: false,
|
||||
}),
|
||||
rate: Property.Number({
|
||||
displayName: "Rate",
|
||||
description: "Speed adjustment (-50 to 50)",
|
||||
required: false,
|
||||
}),
|
||||
encodeOutputAsBase64: Property.Checkbox({
|
||||
displayName: "Encode Output as Base64",
|
||||
description: "Receive audio directly as Base64 instead of a file URL",
|
||||
required: false,
|
||||
}),
|
||||
},
|
||||
|
||||
async run({ auth, propsValue }) {
|
||||
try {
|
||||
const { voiceId, file, fileUrl, format, pitch, rate, encodeOutputAsBase64 } =
|
||||
propsValue as {
|
||||
voiceId: string;
|
||||
file?: ApFile;
|
||||
fileUrl?: string;
|
||||
format?: string;
|
||||
pitch?: number;
|
||||
rate?: number;
|
||||
encodeOutputAsBase64?: boolean;
|
||||
};
|
||||
|
||||
// Validation
|
||||
if (!file && !fileUrl) {
|
||||
throw new Error(" Either 'Source Audio File' or 'Source File URL' must be provided.");
|
||||
}
|
||||
if (file && fileUrl) {
|
||||
throw new Error(" Provide only one: 'Source Audio File' OR 'Source File URL', not both.");
|
||||
}
|
||||
|
||||
// Build FormData
|
||||
const formData = new FormData();
|
||||
formData.append("voice_id", voiceId);
|
||||
|
||||
if (fileUrl) {
|
||||
formData.append("file_url", fileUrl);
|
||||
}
|
||||
if (file) {
|
||||
try {
|
||||
const fileBuffer = Buffer.from(file.base64, "base64");
|
||||
const blob = new Blob([fileBuffer]);
|
||||
formData.append("file", blob, file.filename);
|
||||
} catch (e) {
|
||||
throw new Error("Failed to process uploaded file. Ensure it's a valid audio file.");
|
||||
}
|
||||
}
|
||||
|
||||
if (format) formData.append("format", format);
|
||||
if (pitch !== undefined) formData.append("pitch", pitch.toString());
|
||||
if (rate !== undefined) formData.append("rate", rate.toString());
|
||||
if (encodeOutputAsBase64) formData.append("encode_output_as_base64", "true");
|
||||
|
||||
// API request
|
||||
const response = await makeRequest(
|
||||
auth.secret_text,
|
||||
HttpMethod.POST,
|
||||
"/voice-changer/convert",
|
||||
formData,
|
||||
true
|
||||
);
|
||||
|
||||
// Handle Murf error response
|
||||
if (response?.errorMessage) {
|
||||
throw new Error(
|
||||
` Murf API error (${response.errorCode || "unknown"}): ${response.errorMessage}`
|
||||
);
|
||||
}
|
||||
|
||||
return {
|
||||
success: true,
|
||||
message: " Voice conversion successful",
|
||||
data: response,
|
||||
};
|
||||
} catch (error: any) {
|
||||
return {
|
||||
success: false,
|
||||
message: error.message || "Unexpected error during voice conversion",
|
||||
details: error.response?.body || error,
|
||||
};
|
||||
}
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,35 @@
|
||||
import { PieceAuth } from "@activepieces/pieces-framework";
|
||||
import { makeRequest } from "./client";
|
||||
import { HttpMethod } from "@activepieces/pieces-common";
|
||||
|
||||
export const murfAuth = PieceAuth.SecretText({
|
||||
displayName: "API Key",
|
||||
description: "Enter your API key from https://murf.ai",
|
||||
required: true,
|
||||
validate: async ({ auth }) => {
|
||||
if (!auth) {
|
||||
return {
|
||||
valid: false,
|
||||
error: "API Key is required",
|
||||
};
|
||||
}
|
||||
|
||||
try {
|
||||
const response = await makeRequest(auth as string, HttpMethod.GET, "/auth/token");
|
||||
|
||||
if (response && response.token) {
|
||||
return { valid: true };
|
||||
}
|
||||
|
||||
return {
|
||||
valid: false,
|
||||
error: "Invalid API key or token could not be generated",
|
||||
};
|
||||
} catch (e: any) {
|
||||
return {
|
||||
valid: false,
|
||||
error: `Auth validation failed: ${e.message}`,
|
||||
};
|
||||
}
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,38 @@
|
||||
import { HttpMethod, httpClient } from "@activepieces/pieces-common";
|
||||
|
||||
export const BASE_URL = "https://api.murf.ai/v1";
|
||||
|
||||
export async function makeRequest(
|
||||
apiKey: string,
|
||||
method: HttpMethod,
|
||||
path: string,
|
||||
body?: any,
|
||||
isFormData = false
|
||||
) {
|
||||
try {
|
||||
let headers: Record<string, string> = {
|
||||
"api-key": apiKey,
|
||||
};
|
||||
|
||||
const requestBody = body;
|
||||
|
||||
if (!isFormData) {
|
||||
headers["Content-Type"] = "application/json";
|
||||
} else if (body && typeof (body as any).getHeaders === "function") {
|
||||
headers = { ...headers, ...(body as any).getHeaders() };
|
||||
}
|
||||
|
||||
const response = await httpClient.sendRequest({
|
||||
method,
|
||||
url: `${BASE_URL}${path}`,
|
||||
headers,
|
||||
body: requestBody,
|
||||
});
|
||||
|
||||
return response.body;
|
||||
} catch (error: any) {
|
||||
throw new Error(
|
||||
`Unexpected error: ${JSON.stringify(error.response || error.message || error)}`
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,121 @@
|
||||
import { Property } from "@activepieces/pieces-framework";
|
||||
import { HttpMethod } from "@activepieces/pieces-common";
|
||||
import { makeRequest } from "./client";
|
||||
import { murfAuth } from "./auth";
|
||||
|
||||
// Helper to fetch voices
|
||||
const getVoices = async (apiKey: string) => {
|
||||
return await makeRequest(apiKey, HttpMethod.GET, "/speech/voices");
|
||||
};
|
||||
|
||||
// Helper to build unique language list
|
||||
const getLanguages = async (apiKey: string) => {
|
||||
const voices = await getVoices(apiKey);
|
||||
const languageMap = new Map<string, string>();
|
||||
|
||||
voices.forEach((voice: any) => {
|
||||
if (voice.supportedLocales) {
|
||||
Object.keys(voice.supportedLocales).forEach((localeCode) => {
|
||||
if (!languageMap.has(localeCode)) {
|
||||
languageMap.set(
|
||||
localeCode,
|
||||
voice.supportedLocales[localeCode].detail || localeCode
|
||||
);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
return Array.from(languageMap, ([value, label]) => ({ label, value }));
|
||||
};
|
||||
|
||||
export const murfCommon = {
|
||||
language: Property.Dropdown({
|
||||
auth: murfAuth,
|
||||
displayName: "Language",
|
||||
description: "Select your preferred language for the translated output.",
|
||||
required: true,
|
||||
refreshers: [],
|
||||
options: async ({ auth }) => {
|
||||
if (!auth) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: "Please connect your Murf account first.",
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
|
||||
const langs = await getLanguages(auth.secret_text);
|
||||
return {
|
||||
disabled: false,
|
||||
options: langs,
|
||||
};
|
||||
},
|
||||
}),
|
||||
|
||||
voiceId: Property.Dropdown({
|
||||
auth: murfAuth,
|
||||
displayName: "Voice",
|
||||
description: "Choose a voice for converting text into speech",
|
||||
required: true,
|
||||
refreshers: ["language"],
|
||||
options: async ({ auth, language }) => {
|
||||
if (!auth|| !language) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: "Please select a language and connect your Murf account first.",
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
|
||||
const voices = await getVoices(auth.secret_text);
|
||||
const filtered = voices.filter((v: any) =>
|
||||
Object.keys(v.supportedLocales || {}).includes(language as string)
|
||||
);
|
||||
|
||||
return {
|
||||
disabled: false,
|
||||
options: filtered.map((v: any) => ({
|
||||
label: `${v.displayName} (${v.gender}, ${v.locale})`,
|
||||
value: v.voiceId,
|
||||
})),
|
||||
};
|
||||
},
|
||||
}),
|
||||
sourceLocale: Property.Dropdown({
|
||||
auth: murfAuth,
|
||||
displayName: "Source Locale",
|
||||
description: "Select the source locale for input text.",
|
||||
required: false,
|
||||
refreshers: [],
|
||||
options: async ({ auth }) => {
|
||||
if (!auth) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: "Please connect your Murf account first.",
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
|
||||
const voices = await getVoices(auth.secret_text);
|
||||
|
||||
const localeMap = new Map<string, string>();
|
||||
voices.forEach((voice: any) => {
|
||||
if (voice.supportedLocales) {
|
||||
Object.entries(voice.supportedLocales).forEach(([localeCode, localeData]: any) => {
|
||||
if (!localeMap.has(localeCode)) {
|
||||
localeMap.set(localeCode, localeData.detail);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
return {
|
||||
disabled: false,
|
||||
options: Array.from(localeMap, ([value, label]) => ({ value, label })),
|
||||
};
|
||||
},
|
||||
}),
|
||||
|
||||
};
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"extends": "../../../../tsconfig.base.json",
|
||||
"compilerOptions": {
|
||||
"module": "commonjs",
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"strict": true,
|
||||
"importHelpers": true,
|
||||
"noImplicitOverride": true,
|
||||
"noImplicitReturns": true,
|
||||
"noFallthroughCasesInSwitch": true,
|
||||
"noPropertyAccessFromIndexSignature": true
|
||||
},
|
||||
"files": [],
|
||||
"include": [],
|
||||
"references": [
|
||||
{
|
||||
"path": "./tsconfig.lib.json"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"extends": "./tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"outDir": "../../../../dist/out-tsc",
|
||||
"declaration": true,
|
||||
"types": ["node"]
|
||||
},
|
||||
"include": ["src/**/*.ts"]
|
||||
}
|
||||
Reference in New Issue
Block a user