我试图将语音保存到wav输出文件。没有任何作用。它返回-1。 我试图检查存储是否可写:
public boolean isExternalStorageWritable() {
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
return true;
}
return false;
}
它返回True。
我尝试使用MODE_WORLD_WRITEABLE预设创建目录,然后向它发誓.-无法正常工作
我试图在清单中给出WRITEABLE预设 - 没有工作
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="18" />
请帮帮我 我该怎么办? 非常感谢
P.s Play方法有效
答案 0 :(得分:0)
TextToSpeech.synthesizeToFile
返回的int是什么?
您确定Environment.getExternalStorageDirectory
给出的路径吗?您可以尝试通过/storage/sdcard0/myTts.wav
之类的方式手动设置路径,并使用文件管理器应用程序搜索该文件。由于android保存文件到外部SD卡的奇怪行为,我在手机上找到合成文件时也遇到了麻烦。
我使用Tts遇到的另一个问题是对最多4000个字符的字符串的限制。但只要您的.speak
方法正常运行,这应该不是问题。
答案 1 :(得分:0)
1)首先创建路径
boolean file = new File("give your path here").mkdirs();
2)您的文件名
String destination_file_name = {"gave your path"}+"Your_file_name";
3)让String Converting_Sting作为您要转换的字符串
String Converting_Sting;
4)让文本到语音引擎的最大容量
TextToSpeech tts;
int max_capacity_tts = tts.getMaxSpeechInputLength();
5)如果您转换的字符串长度大于最大容量,则必须减小长度
if(Converting_Sting.length()>max_capacity_tts())
{
Converting_Sting.substring(0,max_capacity_tts);
}
4)然后,您可以将精简的字符串放在tts引擎中
HashMap<String, String> params = new HashMap();
params.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, parsedText);
tts.synthesizeToFile(Converting_Sting,params,destinationFileName+".wav");
不要欺骗清单上的写权限
祝你好运
答案 2 :(得分:0)
(-1)错误时,< strong> targetsdkversion 小于或等于 28 ,效果很好,请检查最新更新
private void makeRingtoneFilename(String texttoconvertIntoAudiFile) {
File saveFilePath = null;
try {
String rootPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/media/audio/ringtones/";
File root = new File(rootPath);
if (!root.exists()) {
root.mkdirs();
}
saveFilePath = new File(rootPath + "niceSong.m4a");
if (saveFilePath.exists()) {
saveFilePath.delete();
}
saveFilePath.createNewFile();
FileOutputStream out = new FileOutputStream(saveFilePath);
out.flush();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
int i1;
if (Build.VERSION.SDK_INT >= 21) {
//texttoconvertIntoAudiFile is the text you want to convrt into mp3
i1 = textToSpeech.synthesizeToFile( texttoconvertIntoAudiFile, null,saveFilePath, null );
} else {
i1 = textToSpeech.synthesizeToFile( texttoconvertIntoAudiFile, null, String.valueOf( saveFilePath.getAbsoluteFile() ) );
}
Log.e( "i1", i1 + "" );
String outPath=saveFilePath.getAbsolutePath();
String mimeType;
if (outPath.endsWith(".m4a")) {
mimeType = "audio/mp4a-latm";
} else if (outPath.endsWith(".wav")) {
mimeType = "audio/wav";
} else {
// This should never happen.
mimeType = "audio/mpeg";
}
String artist = "hum h yum";
ContentValues values = new ContentValues();
values.put( MediaStore.MediaColumns.DATA, outPath);
values.put( MediaStore.MediaColumns.TITLE, "niceSong.m4a");
values.put( MediaStore.MediaColumns.MIME_TYPE, mimeType);
values.put( MediaStore.Audio.Media.ARTIST, artist);
values.put( MediaStore.Audio.Media.IS_RINGTONE,FILE_KIND_RINGTONE);
// Insert it into the database
Uri uri = MediaStore.Audio.Media.getContentUriForPath(outPath);
final Uri newUri = getContentResolver().insert(uri, values);
setResult(RESULT_OK, new Intent().setData(newUri));
}