gpt4 book ai didi

android - SpeechToText synthesizeToFile 不排队

转载 作者:行者123 更新时间:2023-11-29 00:52:39 26 4
gpt4 key购买 nike

我正在尝试使用 TextToSpeech.synthesizeToFile 方法将一些语音写入 mp3。文本超过 4000 个字符,因此我不得不将其分成 block 。问题是只有最后一段文本最终成为音频文件,该方法似乎是覆盖文件而不是添加文件。

int maxLength = 1000; // TextToSpeech.getMaxSpeechInputLength() - 1; smaller chunks = start streaming sooner?
String fileName = Environment.getExternalStorageDirectory().getAbsolutePath() + "/test_p.mp3";
File file = new File(fileName);
final String utteranceId = "fooo";
for (int i = 0; i < elementListJson.length(); i++) {
JSONArray elArray = elementListJson.getJSONArray(i);
nodeType = elArray.get(0).toString();
nodeText = elArray.get(1).toString();
ArrayList<String> chunkedNodeText = StringHelper.splitToLineLengthWithoutBreakingWords(nodeText, maxLength);
for(String chunk : chunkedNodeText) {
Log.d("TTSW", "p"+partsProcessed+" = "+chunk);
int speechStatus = textToSpeech.synthesizeToFile(
chunk
, null, file, utteranceId);
if (speechStatus == TextToSpeech.ERROR) {
showNotificationHint("Error converting text to speech! #1");
}
}
}

此代码适用于 speak() 方法和 QUEUE 参数,但我需要将其写入单个文件以允许用户暂停/倒回/快进控制。我找不到告诉 synthesizeToFile 排队的参数,但根据文档注释,它无论如何都应该排队工作。

最佳答案

我尝试了一下,但它有点像潘多拉魔盒!

似乎没有办法使用 synthesizeToFile() 将新话语“附加”到现有文件——它总是会重写文件。

因此看来完成您想要做的事情的唯一方法是:

A) 写入所有单独的文件(file1、file2、file3 等),然后在它们全部创建完成后按顺序合并它们。

B) 使用循环为每个连续的话语写入“临时”文件,每次迭代将临时文件合并到“主”文件。但是,由于 sythesizeToFile() 是异步的,您需要使用 UtteranceProgressListener 暂停/控制此循环的流程,以防止临时文件被过早覆盖。

其他注意事项:

1) synthesizeToFile() 只会生成 WAV,即使您将其命名为 mp3。

2) * - synthesizeToFile() 是异步的,因此您将不可避免地需要使用 UtteranceProgressListener 来防止过早覆盖。

3) WAV 文件很大,因此您需要清理它们。

关于android - SpeechToText synthesizeToFile 不排队,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57840268/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com