如何在android上将TTS输出保存在音频文件中?
这是我在这里的第一篇文章。我是Android编程新手。我想创建一个应用程序,在这里我可以将文本到语音的输出保存到我的数据库的音频文件中。我听说过Synthezetofile()但不是它 您应该保存在如何在android上将TTS输出保存在音频文件中?,android,text-to-speech,Android,Text To Speech,这是我在这里的第一篇文章。我是Android编程新手。我想创建一个应用程序,在这里我可以将文本到语音的输出保存到我的数据库的音频文件中。我听说过Synthezetofile()但不是它 您应该保存在tts文件资产文件夹中。使用此代码,从资产文件夹获取mp3文件访问权限,然后尝试此代码 mMediaPlayer = new MediaPlayer(); mMediaPlayer = MediaPlayer.create(this,R.raw.button); mMediaPlayer.setAud
tts
文件资产文件夹中。使用此代码,从资产文件夹获取mp3文件访问权限,然后尝试此代码
mMediaPlayer = new MediaPlayer();
mMediaPlayer = MediaPlayer.create(this,R.raw.button);
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mMediaPlayer.start();
mMediaPlayer.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mMediaPlayer.stop();
}
});
synthezetofile()应该创建一个wav(您可以将其解码并发送到您的db或另存为文件或您正在使用它执行的任何操作),并且您可以使用Nitesh的代码播放它
发件人:
HashMap myHashRender=newhashmap();
String wakeUpText=“你起床了吗?”;
字符串destFileName=“/sdcard/myAppCache/wakeUp.wav”;
myHashRender.put(TextToSpeech.Engine.KEY\u PARAM\u outrance\u ID,wakeUpText);
合成文件(wakeUpText、myHashRender、destFileName);
一旦通知您合成完成,您就可以播放
输出文件就像任何其他音频资源一样
android.media.MediaPlayer
mTTS=new TextToSpeech(这是new TextToSpeech.OnInitListener()
私有字符串mAudioFilename=”“;
私有最终字符串mutternaceid=“totts”;
@凌驾
公共无效onInit(int状态){
bsave.setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图v){
保存到音频文件(mEditText.getText().toString().trim());
}
});
CreateFile();
}
私有void CreateFile(){
//执行动态权限请求
if(checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)!=PackageManager.permission_grated)requestPermissions(新字符串[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},REQUEST_permission_WRITE_EXTERNAL_STORAGE);
//创建音频文件位置
File sddir=新文件(Environment.getExternalStorageDirectory()+“/My File/”;
sddir.mkdir();
mAudioFilename=sddir.getAbsolutePath()+“/”+mUtteranceID+“.wav”;
}
私有void saveToAudioFile(字符串文本){
if(Build.VERSION.SDK\u INT>=Build.VERSION\u code.LOLLIPOP){
mTTS.synthezetofile(文本,null,新文件(mAudioFilename),mutternaceid);
Toast.makeText(MainActivity.this,“保存到”+mAudioFilename,Toast.LENGTH_LONG.show();
}否则{
HashMap hm=新的HashMap();
hm.put(TextToSpeech.Engine.KEY_PARAM_speake_ID,mutternaceid);
mTTS.synthezetofile(text,hm,mAudioFilename);
Toast.makeText(MainActivity.this,“保存到”+mAudioFilename,Toast.LENGTH_LONG.show();
}
}
});
谢谢,明白了。但是,我如何将tts输出转换成音频文件?(例如,wav、.mp3…)有什么想法吗?你应该下载mp3文件,然后将其转换成资产文件,然后访问它。我会将你的代码发送给你使用它的人。此代码帮助你保存tts输出的音频。但问题是,当输出第二次写入第一个音频文件时,何时保存输出。如果有人知道这个问题的解决方案,请发布你的代码。
HashMap<String, String> myHashRender = new HashMap();
String wakeUpText = "Are you up yet?";
String destFileName = "/sdcard/myAppCache/wakeUp.wav";
myHashRender.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, wakeUpText);
mTts.synthesizeToFile(wakeUpText, myHashRender, destFileName);
private String mAudioFilename = "";
private final String mUtteranceID = "totts";
@Override
public void onInit(int status) {
bsave.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
saveToAudioFile(mEditText.getText().toString().trim());
}
});
CreateFile();
}
private void CreateFile() {
// Perform the dynamic permission request
if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_PERMISSION_WRITE_EXTERNAL_STORAGE);
// Create audio file location
File sddir = new File(Environment.getExternalStorageDirectory() + "/My File/");
sddir.mkdir();
mAudioFilename = sddir.getAbsolutePath() + "/" + mUtteranceID + ".wav";
}
private void saveToAudioFile(String text) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
mTTS.synthesizeToFile(text, null, new File(mAudioFilename), mUtteranceID);
Toast.makeText(MainActivity.this, "Saved to " + mAudioFilename, Toast.LENGTH_LONG).show();
} else {
HashMap<String, String> hm = new HashMap();
hm.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID,mUtteranceID);
mTTS.synthesizeToFile(text, hm, mAudioFilename);
Toast.makeText(MainActivity.this, "Saved to " + mAudioFilename, Toast.LENGTH_LONG).show();
}
}
});