如何在android上将TTS输出保存在音频文件中?

如何在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

这是我在这里的第一篇文章。我是Android编程新手。我想创建一个应用程序,在这里我可以将文本到语音的输出保存到我的数据库的音频文件中。我听说过Synthezetofile()但不是它

您应该保存在
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();
            }



        }
    });