私のテキストを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に保存する必要はありません。
TTSの出力を保存せずに、synthesizeToFileのないTTS音声出力のサンプルレートを変更したい、またはAudioTrackのDataのTTS音声を直接ストリーミングしたいとします。 –