2017-04-24 15 views
3

私のテキストをSpeechに出力するには、Pitch - 1とSpeechRate - 0.2(これはすでに行っています)で約32000 Hzに設定する必要があります。しかし、私はサンプルレートを設定することはできません。テキストの音声にサンプルレートを設定するには -

tts = new TextToSpeech(getApplicationContext(), new TextToSpeech.OnInitListener() { 
     @Override 
     public void onInit(int status) { 
      if(status != TextToSpeech.ERROR) { 
       tts.setLanguage(Locale.US); 
       tts.setSpeechRate((float) 0.2); 
       tts.setPitch((float) 1); 
      } 
     } 
    }, TextToSpeech.Engine.KEY_FEATURE_NETWORK_SYNTHESIS); 

私は、サンプルレートを設定するためにAudioTrackを使用しますが、私は持っているので、それは、私はAudioTrackでそれを再生する最初のTTS synthesizeToFileに多くの時間を要しました。

HashMap<String, String> myHasRead = new HashMap<String, String>(); 
myHasRead.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, outPutS); 
String StorePath = Environment.getExternalStorageDirectory().getAbsolutePath(); 
File myF = new File(StorePath+"/tempAudio.wav"); 
          try { 
           myF.createNewFile(); 
          } catch (IOException e) { 
           e.printStackTrace(); 
          } 
          tts.setOnUtteranceProgressListener(new TtsUtteranceListener()); 
          tts.synthesizeToFile("Bla Bla bla",myHasRead, StorePath+"/tempAudio.wav"); 

.... 

private class TtsUtteranceListener extends UtteranceProgressListener { 
     @Override 
     public void onStart(String utteranceId) { 

     } 

     @Override 
     public void onDone(String utteranceId) { 
      playWav(); 
     } 

     @Override 
     public void onError(String utteranceId) { 

     } 
    } 

    public void playWav(){ 
     int minBufferSize = AudioTrack.getMinBufferSize(32000, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT); 
     int bufferSize = 512; 
     AudioTrack at = new AudioTrack(AudioManager.STREAM_MUSIC, 32000, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT, minBufferSize, AudioTrack.MODE_STREAM); 
     String filepath = Environment.getExternalStorageDirectory().getAbsolutePath(); 

     int i = 0; 
     byte[] s = new byte[bufferSize]; 
     try { 
      FileInputStream fin = new FileInputStream(filepath + "/tempAudio.wav"); 
      DataInputStream dis = new DataInputStream(fin); 

      at.play(); 
      while((i = dis.read(s, 0, bufferSize)) > -1){ 
       at.write(s, 0, i); 
      } 
      at.stop(); 
      at.release(); 
      dis.close(); 
      fin.close(); 

     } catch (FileNotFoundException e) { 
      // TODO 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO 
      e.printStackTrace(); 
     } 
    } 

tts.setSampleRate(32000);ようTTSへの直接サンプルレートを設定したり、DataInputStream dis = new DataInputStream(tts.speak("bla bla bla").getDataInputStream);ようAudioTrackするTTSからのストリームを取得する方法があります。 私は、TTSの出力を保存せずに、Android用のChipmunkのText To Speechが必要ですが、synthesizeToFileやDirect StreamのTTS音声データはAudioTrackに保存する必要はありません。

答えて

-1

あなたは直接TTSのサンプリングレートを設定することはできません。

を、私はこのプロジェクトでは、このような何かをした(くぼみがTTSを使用)

これは、レコードを再生するには、

あなたを助けるかもしれません異なる音声タイプ: -

waveSampling = 90000; (Chipmunk)

waveSampling = 24200; ( "スローモーション")

waveSampling = 30000;( "ベイン")/バットマン文字

waveSampling = 18000;(ゴースト)

waveSampling = 70000;(ビー)

waveSampling = 60000;(女性)

waveSampling = 37000;

void playRecord() throws IOException { 




      int minBufferSize = AudioTrack.getMinBufferSize(8000, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT); 
      int bufferSize = 512; 
       at = new AudioTrack(AudioManager.STREAM_MUSIC, waveSampling, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT, minBufferSize, AudioTrack.MODE_STREAM); 
      String filepath = Environment.getExternalStorageDirectory().getAbsolutePath(); 

      int i = 0; 
      byte[] s = new byte[bufferSize]; 
      try { 
       FileInputStream fin = new FileInputStream(Environment.getExternalStorageDirectory().getAbsolutePath()+"/Voice Changer/temp/"+filename+".wav"); 
       DataInputStream dis = new DataInputStream(fin); 

       at.play(); 
       while((i = dis.read(s, 0, bufferSize)) > -1){ 
        at.write(s, 0, i); 

       } 
       at.stop(); 
       at.release(); 
       dis.close(); 
       fin.close(); 

        openmenu(); 


      } catch (FileNotFoundException e) { 
       // TODO 
       e.printStackTrace(); 
      } catch (IOException e) { 
       // TODO 
       e.printStackTrace(); 
      } 



    } 

オーディオを保存するには(ノーマル): -

public void save() throws IOException { 
     Random r = new Random(); 
     final int i1 = r.nextInt(80 - 65) + 65; 
     File tempfile2=new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/Voice Changer/temp/"+i1+filename+".wav"); 

     savedfile=Environment.getExternalStorageDirectory().getAbsolutePath()+"/Voice Changer/"+"VOICE CHANGER"+i1+filename+".mp3"; 






     Toast.makeText(this, "File Saved", Toast.LENGTH_SHORT).show(); 



     rawToWave(tempfile,tempfile2); 

     File wavFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/Voice Changer/temp/"+i1+filename+".wav"); 
     IConvertCallback callback = new IConvertCallback() { 
      @Override 
      public void onSuccess(File convertedFile) { 

       File newfile=new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/Voice Changer/"+"VOICE CHANGER"+i1+filename+".mp3"); 
       File savedmp3=new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/Voice Changer/temp/"+i1+filename+".mp3"); 
       Toast.makeText(MainActivity.this, "SUCCESS: " + newfile.getPath(), Toast.LENGTH_LONG).show(); 

       try { 
        copyit(savedmp3,newfile); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
      @Override 
      public void onFailure(Exception error) { 
       Toast.makeText(MainActivity.this, "ERROR: " + error.getMessage(), Toast.LENGTH_LONG).show(); 


      } 
     }; 
     Toast.makeText(this, "Converting audio file...", Toast.LENGTH_SHORT).show(); 
     AndroidAudioConverter.with(this) 
       .setFile(wavFile) 
       .setFormat(cafe.adriel.androidaudioconverter.model.AudioFormat.MP3) 
       .setCallback(callback) 
       .convert(); 





    } 

出力は.MP3ファイルになります。出力を速くしたい場合は、.wav形式を使用できます。

+0

TTSの出力を保存せずに、synthesizeToFileのないTTS音声出力のサンプルレートを変更したい、またはAudioTrackのDataのTTS音声を直接ストリーミングしたいとします。 –

関連する問題