Код: Выделить всё
List getAudios(List text)
Код: Выделить всё
for (String s: text) {
futures.add(this.talkService.talk(s));
}
[*] Получает SpeechSynthesEresult аудиодатики как Br/ol>
. Получение звука возвращает только Future , а не overseablefuture :
Код: Выделить всё
Future SpeakSsmlAsync(final String var1)
Код: Выделить всё
CompletableFuture talk(String text) {
CompletableFuture completableFuture = new CompletableFuture();
SpeechSynthesizer speechSynthesizer = new SpeechSynthesizer(config, null);
...
taskExecutor.execute(() -> {
...
Future result = speechSynthesizer.SpeakSsmlAsync(ssmlText);
SpeechSynthesisResult audioResult = result.get();
if (audioResult.getReason() == ResultReason.SynthesizingAudioCompleted) {
byte[] data = audioResult.getAudioData();
String filename = this.fileService.writeToFile(data, "mp3");
completableFuture.complete(filename);
}
});
return completableFuture;
}
мой контроллер вызывает действие , который объединяет все аудио файлы:
public void action(List text) {
List audios = getAudios(text);
// wait for all audios to download and then get the list of names
List filenames = CompletableFuture.allOf(audios.toArray(new CompletableFuture[0]))
.thenApply((v) -> {
return audios.stream().map(CompletableFuture::join)
.collect(Collectors.toList());
}).join();
}
< /code>
Однако, когда я смотрю вывод журнала в консоли, кажется, что все аудиофайлы всегда загружаются в правильном порядке почти так, как если бы не одновременно. код, и как это может быть улучшено с точки зрения производительности?
Подробнее здесь: https://stackoverflow.com/questions/794 ... erformance