【问题标题】:How can I save TTS output in an audio file on android?如何将 TTS 输出保存在 android 上的音频文件中?
【发布时间】:2020-04-04 03:40:02
【问题描述】:

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

【问题讨论】:

    标签: android text-to-speech


    【解决方案1】:

    synthesizeToFile() 应该创建一个 wav(您可以将其解码并发送到您的数据库或保存为文件或您正在使用它做什么),您可以使用 Nitesh 的代码播放它。

    来自http://android-developers.blogspot.fi/2009/09/introduction-to-text-to-speech-in.html

    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);
    

    一旦您收到合成完成的通知,您就可以播放 输出文件就像任何其他音频资源一样 android.media.MediaPlayer。

    【讨论】:

      【解决方案2】:

      使用此代码并从 assets 文件夹中获取 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();
          }
      });
      

      【讨论】:

        【解决方案3】:

        您应该保存在tts 文件资产文件夹中。

        【讨论】:

        • 谢谢,知道了。但是如何将 tts 输出到音频文件中?(即 .wav、.mp3 ...)有什么想法吗?
        • 您应该下载 mp3 文件,然后将其放入 assets 文件中,然后访问它。我将您的代码发送给您使用它。
        【解决方案4】:

        mTTS =new TextToSpeech(this, new TextToSpeech.OnInitListener()

                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();
                    }
        
        
        
                }
            });
        

        【讨论】:

        • 此代码可帮助您保存 TTS 输出的音频。但问题是何时第二次保存输出,它会覆盖第一个音频文件。如果有人知道此问题的解决方案,请发布您的代码。
        猜你喜欢
        • 2012-03-31
        • 2022-11-10
        • 1970-01-01
        • 1970-01-01
        • 2021-02-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-01
        相关资源
        最近更新 更多