Comment puis-je enregistrer la voix de sortie à un fichier audio dans freetts
-
26-09-2019 - |
Question
Je suis en train d'utiliser freetts pour une simple application java mais je fais face à un problème, quelqu'un peut me dire comment puis-je enregistrer la voix de sortie qui est convertie du texte à la parole dans un fichier wave dans mon programme. Je veux le faire via le code.
Ceci est l'exemple d'application helloworld qui est donnée avec l'échantillon
/**
* 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);
}
}
Ce code fonctionne bien, je veux enregistrer la sortie en tant que fichier audio sur mon disque.
Merci Pranay
La solution
Je me suis dit comment faire, vous devez utiliser simplement SingleFileAudioPlayer
passer le nom de fichier et le type de fichier que vous voulez déclaration échantillon sera comme:
audioPlayer = new SingleFileAudioPlayer("output",Type.WAVE);
Maintenant, vous devez attacher l'objet SinglefileAudioplayer
à votre objet VoiceManager
: par exemple
helloVoice.setAudioPlayer(audioPlayer);
Utilisez:
hellovoice.speak("zyxss");
enregistre le fichier avec tout ce qu'il y en parler. Rappelez-vous de fermer le lecteur audio sinon le fichier ne sera pas enregistré. Mettez audioPlayer.close();
avant de quitter.
Voici le code de travail complet qui fichier de vidage dans votre répertoire 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);
}
}
Autres conseils
Je ne l'ai jamais utilisé FreeTTS, mais une analyse rapide des JavaDocs révèle Voice.setWaveDumpFile (String) . Est-ce que faire ce qui est nécessaire?