【问题标题】:Text to Speech save to audio file with silent (long pause)文本到语音以静音(长时间停顿)保存到音频文件
【发布时间】:2019-05-15 09:28:43
【问题描述】:

我想将文本语音另存为音频文件,暂停 5 秒静音。我可以将文本保存到 mp3 文件。我尝试过,但我没有得到任何结果。

将文本保存到 mp3 文件的代码。我需要添加静音 5 秒。

HashMap<String, String> myHashRender = new HashMap();
String text="Name ,How are you.";//After Name i need to stop 5 seconds silent
String destFileName = Environment.getExternalStorageDirectory()+"/myfolder/tts.mp3";
myHashRender.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, text);
tts.synthesizeToFile(text, myHashRender, destFileName);

【问题讨论】:

  • Silent 表示您需要使用处理程序将音频暂停 5 秒或使用倒计时计时器
  • 为什么最后需要 5 秒的静默?播放后可以让程序休眠 5 秒。
  • 我认为你需要在String中添加空格。
  • 使用处理程序或倒计时是当我从另一个应用程序播放时保存音频会静音。?@Piyush
  • @SteveSmith 我需要暂停,因为在那之后我要添加另一个字符串进行保存。我需要长时间暂停保存音频。

标签: java android text-to-speech google-text-to-speech


【解决方案1】:
   // TAKE PERMISSIONS RUNTIME TOO
   private void requestPermission() {
     ActivityCompat.requestPermissions(MainActivity.this, new 
       String[]{WRITE_EXTERNAL_STORAGE, RECORD_AUDIO}, RequestPermissionCode);
   }

   @Override
   public void onRequestPermissionsResult(int requestCode, 
      String permissions[], int[] grantResults) {
       switch (requestCode) {
        case RequestPermissionCode:
          if (grantResults.length> 0) {
           boolean StoragePermission = grantResults[0] == 
              PackageManager.PERMISSION_GRANTED;
           boolean RecordPermission = grantResults[1] == 
             PackageManager.PERMISSION_GRANTED;

        if (StoragePermission && RecordPermission) {
           Toast.makeText(MainActivity.this, "Permission Granted", 
              Toast.LENGTH_LONG).show();
        } else {
           Toast.makeText(MainActivity.this,"Permission 
              Denied",Toast.LENGTH_LONG).show();
        }
     }
     break;
   }
 }

  public boolean checkPermission() {
    int result = ContextCompat.checkSelfPermission(getApplicationContext(), 
     WRITE_EXTERNAL_STORAGE);
   int result1 = ContextCompat.checkSelfPermission(getApplicationContext(), 
     RECORD_AUDIO);
   return result == PackageManager.PERMISSION_GRANTED && 
      result1 == PackageManager.PERMISSION_GRANTED;
  }

   //Prepare RECORDER
    String outputFile = Environment.getExternalStorageDirectory().getAbsolutePath() + "/recording.3gp";
    private MediaRecorder myAudioRecorder = new MediaRecorder();
    myAudioRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    myAudioRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
    myAudioRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB);
    myAudioRecorder.setOutputFile(outputFile);


   // START THE RECORDING
       try {
                myAudioRecorder.prepare();
                myAudioRecorder.start();

                // START YOUR TEXT_TO_SPEECH HERE

            } catch (IllegalStateException ise) {
                // make something ...
            } catch (IOException ioe) {
                // make something
            }           
            Toast.makeText(getApplicationContext(), "Recording started", Toast.LENGTH_LONG).show();


           // NOW TO STOP OR TO SAVE USE BELOW CODE 
           // when TTS is done playing, the OnUtteranceCompletedListener() get called automatically, for this your activity needs to IMPLEMENTS OnUtteranceCompletedListener 
  // It's callback // After 5 sec of TTS's speaking, file have saved

  public void onUtteranceCompleted(String utteranceId) {
    Log.i(TAG, utteranceId); //utteranceId == "SOME MESSAGE"

    new Handler().postDelayed(new Runnable() {
       @Override
       public void run() {
          myAudioRecorder.stop();
          myAudioRecorder.release();
          myAudioRecorder = null;
          Toast.makeText(getApplicationContext(), "Audio Recorder successfully", Toast.LENGTH_LONG).show();                
       }
    }, 5000);

  }

【讨论】:

  • 感谢重播。您在哪里添加静音或长时间暂停
  • 已编辑答案,现在检查。在需要暂停的地方,您可以使用 Handler 来完成。我在文件末尾添加了 5 秒的暂停。 TTS 和 Recorder 都具有启动、停止、暂停任务的功能。
  • 您好,感谢您的回答。但它记录的是我周围的噪音,而不是文字转语音。我不想保存这种噪音,我需要保存文字转语音的音频
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-23
  • 2019-08-12
  • 2022-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
  • 2013-04-07
相关资源
最近更新 更多