一个使用Java音频?
我正在构建一个语音合成器,除了音频,其他一切都可以工作。我有一个存储为.wav文件的音素列表,我用AudioInputStreams调用它们,但它们不会重复。我不知道会是什么问题,所以任何帮助都将不胜感激。 初始化充满电话的HashMap的代码是一个使用Java音频?,java,audio,javasound,wav,Java,Audio,Javasound,Wav,我正在构建一个语音合成器,除了音频,其他一切都可以工作。我有一个存储为.wav文件的音素列表,我用AudioInputStreams调用它们,但它们不会重复。我不知道会是什么问题,所以任何帮助都将不胜感激。 初始化充满电话的HashMap的代码是 for(File phone : listOfFiles){ String path = phone.getPath(); if(path.startsWith(".")){continue
for(File phone : listOfFiles){
String path = phone.getPath();
if(path.startsWith(".")){continue;}
path = path.replace(".wav", "").replace("phones/", "");
AudioInputStream clip1 = AudioSystem.getAudioInputStream(phone);
phonemes.put(path,clip1);
}
组合并输出声音的代码是
public void speak(String[] input){
AudioInputStream phrase = phonemes.get(input[0]);
AudioInputStream phone;
int x = input.length;
for(int i=1; i<input.length; i++){
phone = phonemes.get(input[i]);
phrase = new AudioInputStream(new SequenceInputStream(phrase, phone), phrase.getFormat(), phrase.getFrameLength() + phone.getFrameLength());
}
try {
Clip clip = AudioSystem.getClip();
clip.open(phrase);
clip.start();
} catch (Exception e) {
e.printStackTrace();
}
}
public void speak(字符串[]输入){
AudioInputStream短语=phonemes.get(输入[0]);
音频输入流电话;
int x=输入长度;
对于(int i=1;i要重播某个剪辑,您必须停止它并重新定位它,然后启动它。我认为您无法关闭和重新打开给定的剪辑。但是尝试这样做应该会生成LineUnavailable异常,并且您说您没有异常
要排除故障,我首先要验证在将.wav文件放入哈希表之前是否可以播放它们。有时,意外的格式(例如,24位或32位编码,或大端而非小端)可能会导致.wav文件无法播放
如果您试图将一系列剪辑或音频数据连接到单个剪辑中,这也可能会有问题。我认为AudioInputStream需要.wav文件中的一组“头”数据,但SequenceInputStream实际上可能会发送多个“头”,每个源文件一个。我以前从未见过这样的连接尝试
您可能需要为每个音素的原始音频创建自己的数据存储,然后根据该数据存储而不是直接从.wav文件构建组合音素。不要加载到剪辑,而是将原始PCM从AudioInputStream加载到字节数组中。要输出原始音频字节,可以使用SourceDataLine。什么错误或异常你明白了吗?没有错,他们就是不玩。