[英]how can i store output voice to an audio file in freetts
I am trying to use freetts for a simple java application but i am facing a problem, can anyone tell me how can i save the output voice which is converted from text to speech into a wave file in my program. 我正在尝试将freetts用于一个简单的java应用程序,但是我遇到了一个问题,有人能告诉我如何保存输出语音,该语音在我的程序中从文本转换为语音转换为波形文件。 I want to do it via code.
我想通过代码来做。
This is the sample helloworld application which is given with the sample 这是示例helloworld应用程序,随样本一起提供
/**
* Copyright 2003 Sun Microsystems, Inc.
*
* See the file "license.terms" for information on usage and
* redistribution of this file, and for a DISCLAIMER OF ALL
* WARRANTIES.
*/
import com.sun.speech.freetts.FreeTTS;
import com.sun.speech.freetts.Voice;
import com.sun.speech.freetts.VoiceManager;
import com.sun.speech.freetts.audio.JavaClipAudioPlayer;
/**
* Simple program to demonstrate the use of the FreeTTS speech
* synthesizer. This simple program shows how to use FreeTTS
* without requiring the Java Speech API (JSAPI).
*/
public class FreeTTSHelloWorld {
/**
* Example of how to list all the known voices.
*/
public static void main(String[] args) {
// listAllVoices();
FreeTTS freetts;
String voiceName = "kevin16";
System.out.println();
System.out.println("Using voice: " + voiceName);
/* The VoiceManager manages all the voices for FreeTTS.
*/
VoiceManager voiceManager = VoiceManager.getInstance();
Voice helloVoice = voiceManager.getVoice(voiceName);
if (helloVoice == null) {
System.err.println(
"Cannot find a voice named "
+ voiceName + ". Please specify a different voice.");
System.exit(1);
}
/* Allocates the resources for the voice.
*/
helloVoice.allocate();
/* Synthesize speech.
*/
helloVoice.speak("Thank you for giving me a voice. "
+ "I'm so glad to say hello to this world.");
/* Clean up and leave.
*/
helloVoice.deallocate();
System.exit(0);
}
}
This code is working fine I want to save the output as a audio file on my disk. 这段代码工作正常我想将输出保存为我的磁盘上的音频文件。
Thanks Pranay 谢谢Pranay
I figured out how to do that you have to simply use SingleFileAudioPlayer
pass the file name and file type which you want sample declaration will be like: 我想办法怎么做你必须简单地使用
SingleFileAudioPlayer
传递你希望样本声明的文件名和文件类型:
audioPlayer = new SingleFileAudioPlayer("output",Type.WAVE);
Now you need to attach the SinglefileAudioplayer
object to your VoiceManager
object: eg 现在您需要将
SinglefileAudioplayer
对象附加到VoiceManager
对象:例如
helloVoice.setAudioPlayer(audioPlayer);
Now use: 现在使用:
hellovoice.speak("zyxss");
This will save the file with whatever there in speak. 这将保存文件与任何说话。 Remember to close the audioplayer otherwise the file will not be saved.
请记得关闭音频播放器,否则文件将无法保存。 Put
audioPlayer.close();
把
audioPlayer.close();
before exiting. 在退出之前。
Here is the complete working code which will dump file in your C directory 这是完整的工作代码,它将把文件转储到C目录中
/**
* Copyright 2003 Sun Microsystems, Inc.
*
* See the file "license.terms" for information on usage and
* redistribution of this file, and for a DISCLAIMER OF ALL
* WARRANTIES.
*/
import com.sun.speech.freetts.FreeTTS;
import com.sun.speech.freetts.Voice;
import com.sun.speech.freetts.VoiceManager;
import com.sun.speech.freetts.audio.AudioPlayer;
import com.sun.speech.freetts.audio.SingleFileAudioPlayer;
import javax.sound.sampled.AudioFileFormat.Type;
/**
* Simple program to demonstrate the use of the FreeTTS speech
* synthesizer. This simple program shows how to use FreeTTS
* without requiring the Java Speech API (JSAPI).
*/
public class FreeTTSHelloWorld {
/**
* Example of how to list all the known voices.
*/
public static void main(String[] args) {
// listAllVoices();
FreeTTS freetts;
AudioPlayer audioPlayer = null;
String voiceName = "kevin16";
System.out.println();
System.out.println("Using voice: " + voiceName);
/* The VoiceManager manages all the voices for FreeTTS.
*/
VoiceManager voiceManager = VoiceManager.getInstance();
Voice helloVoice = voiceManager.getVoice(voiceName);
if (helloVoice == null) {
System.err.println(
"Cannot find a voice named "
+ voiceName + ". Please specify a different voice.");
System.exit(1);
}
/* Allocates the resources for the voice.
*/
helloVoice.allocate();
/* Synthesize speech.
*/
//create a audioplayer to dump the output file
audioPlayer = new SingleFileAudioPlayer("C://output",Type.WAVE);
//attach the audioplayer
helloVoice.setAudioPlayer(audioPlayer);
helloVoice.speak("Thank you for giving me a voice. "
+ "I'm so glad to say hello to this world.");
/* Clean up and leave.
*/
helloVoice.deallocate();
//don't forget to close the audioplayer otherwise file will not be saved
audioPlayer.close();
System.exit(0);
}
}
I have never used FreeTTS, but a quick scan of the JavaDocs reveals Voice.setWaveDumpFile(String) . 我从未使用FreeTTS,但快速扫描JavaDocs会显示Voice.setWaveDumpFile(String) 。 Does that do what is required?
这样做是否需要?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.