diff --git a/README.md b/README.md index 75446f8..78bb674 100644 --- a/README.md +++ b/README.md @@ -75,7 +75,7 @@ wav, duration = tts.synthesize( ) tts.save_audio(wav, "output.wav") -print(f"Generated {duration:.2f}s of audio") +print(f"Generated {duration[0]:.2f}s of audio") ``` ## Getting Started diff --git a/cpp/helper.cpp b/cpp/helper.cpp index 5933c9e..1545c99 100644 --- a/cpp/helper.cpp +++ b/cpp/helper.cpp @@ -12,7 +12,7 @@ using json = nlohmann::json; // Available languages for multilingual TTS -const std::vector AVAILABLE_LANGS = {"en", "ko", "ja", "ar", "bg", "cs", "da", "de", "el", "es", "et", "fi", "fr", "hi", "hr", "hu", "id", "it", "lt", "lv", "nl", "pl", "pt", "ro", "ru", "sk", "sl", "sv", "tr", "uk", "vi"}; +const std::vector AVAILABLE_LANGS = {"en", "ko", "ja", "ar", "bg", "cs", "da", "de", "el", "es", "et", "fi", "fr", "hi", "hr", "hu", "id", "it", "lt", "lv", "nl", "pl", "pt", "ro", "ru", "sk", "sl", "sv", "tr", "uk", "vi", "na"}; // Global tensor buffers for memory management static std::vector> g_tensor_buffers_float; diff --git a/csharp/Helper.cs b/csharp/Helper.cs index 72867b9..3569ea1 100644 --- a/csharp/Helper.cs +++ b/csharp/Helper.cs @@ -13,7 +13,7 @@ namespace Supertonic // Available languages for multilingual TTS public static class Languages { - public static readonly string[] Available = { "en", "ko", "ja", "ar", "bg", "cs", "da", "de", "el", "es", "et", "fi", "fr", "hi", "hr", "hu", "id", "it", "lt", "lv", "nl", "pl", "pt", "ro", "ru", "sk", "sl", "sv", "tr", "uk", "vi" }; + public static readonly string[] Available = { "en", "ko", "ja", "ar", "bg", "cs", "da", "de", "el", "es", "et", "fi", "fr", "hi", "hr", "hu", "id", "it", "lt", "lv", "nl", "pl", "pt", "ro", "ru", "sk", "sl", "sv", "tr", "uk", "vi", "na" }; } // ============================================================================ diff --git a/flutter/lib/helper.dart b/flutter/lib/helper.dart index ed554b6..734380e 100644 --- a/flutter/lib/helper.dart +++ b/flutter/lib/helper.dart @@ -12,7 +12,7 @@ final logger = Logger( ); // Available languages for multilingual TTS -const List availableLangs = ['en', 'ko', 'ja', 'ar', 'bg', 'cs', 'da', 'de', 'el', 'es', 'et', 'fi', 'fr', 'hi', 'hr', 'hu', 'id', 'it', 'lt', 'lv', 'nl', 'pl', 'pt', 'ro', 'ru', 'sk', 'sl', 'sv', 'tr', 'uk', 'vi']; +const List availableLangs = ['en', 'ko', 'ja', 'ar', 'bg', 'cs', 'da', 'de', 'el', 'es', 'et', 'fi', 'fr', 'hi', 'hr', 'hu', 'id', 'it', 'lt', 'lv', 'nl', 'pl', 'pt', 'ro', 'ru', 'sk', 'sl', 'sv', 'tr', 'uk', 'vi', 'na']; bool isValidLang(String lang) => availableLangs.contains(lang); diff --git a/go/helper.go b/go/helper.go index f3c1d97..f456469 100644 --- a/go/helper.go +++ b/go/helper.go @@ -19,7 +19,7 @@ import ( ) // Available languages for multilingual TTS -var AvailableLangs = []string{"en", "ko", "ja", "ar", "bg", "cs", "da", "de", "el", "es", "et", "fi", "fr", "hi", "hr", "hu", "id", "it", "lt", "lv", "nl", "pl", "pt", "ro", "ru", "sk", "sl", "sv", "tr", "uk", "vi"} +var AvailableLangs = []string{"en", "ko", "ja", "ar", "bg", "cs", "da", "de", "el", "es", "et", "fi", "fr", "hi", "hr", "hu", "id", "it", "lt", "lv", "nl", "pl", "pt", "ro", "ru", "sk", "sl", "sv", "tr", "uk", "vi", "na"} // Config structures type SpecProcessorConfig struct { diff --git a/ios/ExampleiOSApp/TTSService.swift b/ios/ExampleiOSApp/TTSService.swift index 58a25b8..65c9096 100644 --- a/ios/ExampleiOSApp/TTSService.swift +++ b/ios/ExampleiOSApp/TTSService.swift @@ -35,7 +35,8 @@ final class TTSService { case tr = "tr" case uk = "uk" case vi = "vi" - + case na = "na" + var displayName: String { switch self { case .en: return "English" @@ -69,6 +70,7 @@ final class TTSService { case .tr: return "Turkish" case .uk: return "Ukrainian" case .vi: return "Vietnamese" + case .na: return "Auto (language-agnostic)" } } } diff --git a/java/Helper.java b/java/Helper.java index 0f1c978..e09cbad 100644 --- a/java/Helper.java +++ b/java/Helper.java @@ -22,7 +22,7 @@ import java.util.regex.Matcher; * Available languages for multilingual TTS */ class Languages { - public static final List AVAILABLE = Arrays.asList("en", "ko", "ja", "ar", "bg", "cs", "da", "de", "el", "es", "et", "fi", "fr", "hi", "hr", "hu", "id", "it", "lt", "lv", "nl", "pl", "pt", "ro", "ru", "sk", "sl", "sv", "tr", "uk", "vi"); + public static final List AVAILABLE = Arrays.asList("en", "ko", "ja", "ar", "bg", "cs", "da", "de", "el", "es", "et", "fi", "fr", "hi", "hr", "hu", "id", "it", "lt", "lv", "nl", "pl", "pt", "ro", "ru", "sk", "sl", "sv", "tr", "uk", "vi", "na"); public static boolean isValid(String lang) { return AVAILABLE.contains(lang); diff --git a/nodejs/helper.js b/nodejs/helper.js index 2bfedfc..a455e76 100644 --- a/nodejs/helper.js +++ b/nodejs/helper.js @@ -5,7 +5,7 @@ import * as ort from 'onnxruntime-node'; const __filename = fileURLToPath(import.meta.url); -const AVAILABLE_LANGS = ["en", "ko", "ja", "ar", "bg", "cs", "da", "de", "el", "es", "et", "fi", "fr", "hi", "hr", "hu", "id", "it", "lt", "lv", "nl", "pl", "pt", "ro", "ru", "sk", "sl", "sv", "tr", "uk", "vi"]; +const AVAILABLE_LANGS = ["en", "ko", "ja", "ar", "bg", "cs", "da", "de", "el", "es", "et", "fi", "fr", "hi", "hr", "hu", "id", "it", "lt", "lv", "nl", "pl", "pt", "ro", "ru", "sk", "sl", "sv", "tr", "uk", "vi", "na"]; /** * Unicode text processor diff --git a/py/example_pypi.py b/py/example_pypi.py index 26f091f..d1c1c6f 100644 --- a/py/example_pypi.py +++ b/py/example_pypi.py @@ -13,4 +13,5 @@ wav, duration = tts.synthesize(text, voice_style=style) # duration: np.ndarray, shape = (1,) # Save to file -tts.save_audio(wav, "results/example_pypi.wav") \ No newline at end of file +tts.save_audio(wav, "results/example_pypi.wav") +print(f"Generated {duration[0]:.2f}s of audio") \ No newline at end of file diff --git a/py/helper.py b/py/helper.py index c0f12a3..ff9e4da 100644 --- a/py/helper.py +++ b/py/helper.py @@ -10,7 +10,7 @@ import onnxruntime as ort import re -AVAILABLE_LANGS = ["en", "ko", "ja", "ar", "bg", "cs", "da", "de", "el", "es", "et", "fi", "fr", "hi", "hr", "hu", "id", "it", "lt", "lv", "nl", "pl", "pt", "ro", "ru", "sk", "sl", "sv", "tr", "uk", "vi"] +AVAILABLE_LANGS = ["en", "ko", "ja", "ar", "bg", "cs", "da", "de", "el", "es", "et", "fi", "fr", "hi", "hr", "hu", "id", "it", "lt", "lv", "nl", "pl", "pt", "ro", "ru", "sk", "sl", "sv", "tr", "uk", "vi", "na"] class UnicodeProcessor: diff --git a/rust/src/helper.rs b/rust/src/helper.rs index 032541f..8f3acbd 100644 --- a/rust/src/helper.rs +++ b/rust/src/helper.rs @@ -15,7 +15,7 @@ use rand_distr::{Distribution, Normal}; use regex::Regex; // Available languages for multilingual TTS -pub const AVAILABLE_LANGS: &[&str] = &["en", "ko", "ja", "ar", "bg", "cs", "da", "de", "el", "es", "et", "fi", "fr", "hi", "hr", "hu", "id", "it", "lt", "lv", "nl", "pl", "pt", "ro", "ru", "sk", "sl", "sv", "tr", "uk", "vi"]; +pub const AVAILABLE_LANGS: &[&str] = &["en", "ko", "ja", "ar", "bg", "cs", "da", "de", "el", "es", "et", "fi", "fr", "hi", "hr", "hu", "id", "it", "lt", "lv", "nl", "pl", "pt", "ro", "ru", "sk", "sl", "sv", "tr", "uk", "vi", "na"]; pub fn is_valid_lang(lang: &str) -> bool { AVAILABLE_LANGS.contains(&lang) diff --git a/swift/Sources/Helper.swift b/swift/Sources/Helper.swift index cc551ee..f9f4260 100644 --- a/swift/Sources/Helper.swift +++ b/swift/Sources/Helper.swift @@ -4,7 +4,7 @@ import OnnxRuntimeBindings // MARK: - Available Languages -let AVAILABLE_LANGS = ["en", "ko", "ja", "ar", "bg", "cs", "da", "de", "el", "es", "et", "fi", "fr", "hi", "hr", "hu", "id", "it", "lt", "lv", "nl", "pl", "pt", "ro", "ru", "sk", "sl", "sv", "tr", "uk", "vi"] +let AVAILABLE_LANGS = ["en", "ko", "ja", "ar", "bg", "cs", "da", "de", "el", "es", "et", "fi", "fr", "hi", "hr", "hu", "id", "it", "lt", "lv", "nl", "pl", "pt", "ro", "ru", "sk", "sl", "sv", "tr", "uk", "vi", "na"] func isValidLang(_ lang: String) -> Bool { return AVAILABLE_LANGS.contains(lang) diff --git a/web/helper.js b/web/helper.js index 3513e8d..8e16388 100644 --- a/web/helper.js +++ b/web/helper.js @@ -1,7 +1,7 @@ import * as ort from 'onnxruntime-web'; // Available languages for multilingual TTS -export const AVAILABLE_LANGS = ['en', 'ko', 'ja', 'ar', 'bg', 'cs', 'da', 'de', 'el', 'es', 'et', 'fi', 'fr', 'hi', 'hr', 'hu', 'id', 'it', 'lt', 'lv', 'nl', 'pl', 'pt', 'ro', 'ru', 'sk', 'sl', 'sv', 'tr', 'uk', 'vi']; +export const AVAILABLE_LANGS = ['en', 'ko', 'ja', 'ar', 'bg', 'cs', 'da', 'de', 'el', 'es', 'et', 'fi', 'fr', 'hi', 'hr', 'hu', 'id', 'it', 'lt', 'lv', 'nl', 'pl', 'pt', 'ro', 'ru', 'sk', 'sl', 'sv', 'tr', 'uk', 'vi', 'na']; export function isValidLang(lang) { return AVAILABLE_LANGS.includes(lang);