# tts-edge-java **Repository Path**: WhiteMagic2014/tts-edge-java ## Basic Information - **Project Name**: tts-edge-java - **Description**: Edge Read Aloud 功能java调用 - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 13 - **Forks**: 11 - **Created**: 2023-06-29 - **Last Updated**: 2025-06-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: TTS, TTS-EDGE ## README # tts-edge-java java sdk for Edge Read Aloud [click me have a try](https://server.whitemagic2014.com/tts/) ## Setup ### maven ``` io.github.whitemagic2014 tts-edge-java version ``` ### gradle ``` implementation group: 'io.github.whitemagic2014', name: 'tts-edge-java', version: 'version' short implementation 'io.github.whitemagic2014:tts-edge-java:version' ``` ## demo ``` @Test void should_convert_to_mp3_file_success_with_single_content() { String voiceName = "zh-CN-XiaoyiNeural"; Optional voiceOptional = TTSVoice.provides() .stream() .filter(v -> voiceName.equals(v.getShortName())) .findFirst(); if (!voiceOptional.isPresent()) { throw new IllegalStateException("voice not found:" + voiceName); } Voice voice = voiceOptional.get(); String filename = voiceName + "-" + "test-tts"; String content = "你好,有什么可以帮助你的吗,今天的天气很不错呢"; TTS tts = new TTS(voice, content) .findHeadHook() .isRateLimited(true) // Set to true to resolve the rate limiting issue in certain regions. .fileName(filename)// You can customize the file name; if omitted, a random file name will be generated. .overwrite(true) // When the specified file name is the same, it will either overwrite or append to the file. .formatMp3(); // default mp3. // .formatOpus() // or opus // .voicePitch() // .voiceRate() // .voiceVolume() // .storage() // the output file storage ,default is ./storage // .connectTimeout(0) // set connect timeout tts.trans(); // you can find the voice file in storage folder } void should_convert_to_mp3_file_success_with_multi_content() throws IOException { String voiceName = "zh-CN-XiaoyiNeural"; Optional voiceOptional = TTSVoice.provides() .stream() .filter(v -> voiceName.equals(v.getShortName())) .findFirst(); if (!voiceOptional.isPresent()) { throw new IllegalStateException("voice not found:" + voiceName); } Voice voice = voiceOptional.get(); List recordList = new ArrayList<>(); String store = "./storage"; // create batch task for (int i = 0; i < 100; i++) { TransRecord record = new TransRecord(); record.setContent(i + ", hello tts, 你好,有什么可以帮助你的吗"); record.setFilename(i + ".test-tts"); recordList.add(record); Files.deleteIfExists(Paths.get(buildFilename(store, record))); } new TTS(voice) .findHeadHook() .isRateLimited(true) .overwrite(true) .batch(recordList) // set batch task .parallel(12) // set up 12 parallel threads .storage(store) .formatMp3() .batchTrans(); // trans for (TransRecord record : recordList) { Path path = Paths.get(buildFilename(store, record)); Assertions.assertTrue(Files.exists(path), "file not found in " + path.toString()); } } private static String buildFilename(String store, TransRecord record) { return store + File.separator + record.getFilename() + ".mp3"; } ``` ## Version ### 1.3.1 - Optimize: Optimize parallel tasks [PR#15](https://github.com/WhiteMagic2014/tts-edge-java/pull/15) ### 1.3.0 - New: Now supports batch conversion of multiple text tasks within a single TTS transaction. - Optimize: A new parameter, `enableVttFile`, has been added. This parameter determines whether VTT file support is enabled, with the default setting being `false` - Optimize: Refactored some of the code. - Update: Upgraded some dependency packages. - Thanks to user [lifeopsgo](https://github.com/lifeopsgo) for making nearly all the contributions to this version update.[PR#13](https://github.com/WhiteMagic2014/tts-edge-java/pull/13) ### 1.2.6 - Resolve Conversion Issues Caused by Special Characters.[PR#9](https://github.com/WhiteMagic2014/tts-edge-java/pull/9) ### 1.2.5 - Optimize: Setting the parameter `isRateLimited` to true can resolve rate limiting issues in certain regions. - Thanks to user [PoliceZ](https://github.com/PoliceZ), the answer in the [issue](https://github.com/Mai-Onsyn/VeloVoice/issues/9) was helpful to me. ### 1.2.4 - Optimize: The default value for the `overWrite` parameter is now true. ### 1.2.3 - Optimize: A new parameter, `overWrite`, has been added. When the same file name is provided, if overWrite = `true`, it will overwrite the original audio file and VTT subtitle file. If overWrite = `false`, it will continue to append to the original audio file and VTT subtitle file. ### 1.2.2 - Optimize: TTS can now set connectTimeout. ### 1.2.1 - New: In this update, 17 new supported voices have been added, as follows: ``` en-US-AvaMultilingualNeural en-US-AndrewMultilingualNeural en-US-EmmaMultilingualNeural en-US-BrianMultilingualNeural en-US-AvaNeural en-US-AndrewNeural en-US-EmmaNeural en-US-BrianNeural fr-CA-ThierryNeural fr-FR-VivienneMultilingualNeural fr-FR-RemyMultilingualNeural de-DE-SeraphinaMultilingualNeural de-DE-FlorianMultilingualNeural it-IT-GiuseppeNeural ko-KR-HyunsuNeural pt-BR-ThalitaNeural es-ES-XimenaNeural ``` ### 1.2.0 - Optimize: Now You can customize the file name; if omitted, a random file name will be generated. - New: Now, while generating audio, a VTT subtitle file with the same name will be created.[issue:3](https://github.com/WhiteMagic2014/tts-edge-java/issues/3) ### 1.1.1 - Optimize: Fix high CPU usage while waiting for a response. [PR#2](https://github.com/WhiteMagic2014/tts-edge-java/pull/2) ### 1.1.0 - Optimize: Now, the TTS.trans function offers the choice of receiving the output file in two formats, MP3 or opus. - Optimize: Add two methods to parse voice file ### 1.0.1 - Optimize: Now, the TTS.trans function will return the name of the voice file. ### 1.0.0 - Edge Read Aloud Text To Speech ## License This project is an open-sourced software licensed under the [MIT license](LICENSE).