gpt4 book ai didi

java - 一个使用Java音频?

转载 作者:行者123 更新时间:2023-12-01 13:49:04 24 4
gpt4 key购买 nike

我正在构建一个语音合成器,除了音频之外,一切正常。我有一个存储为 .wav 文件的音素列表,我使用 AudioInputStreams 调用它们,但它们不会重复。我不知道可能是什么问题,所以任何帮助将不胜感激。初始化一个充满手机的HashMap的代码是

       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();
}

}

最佳答案

要重播剪辑,您必须停止它并重新定位它,然后启动它。我认为您无法关闭并重新打开给定的剪辑。但是尝试这样做应该会生成 LineUnavailable 异常,而您说没有异常。

为了排除故障,我首先验证是否可以播放 .wav 文件,然后再将它们放入哈希表中。有时,意外的格式(例如,24 位或 32 位编码,或大端而非小端)可能会导致 .wav 文件无法播放。

如果您尝试将一系列剪辑或音频数据连接到单个剪辑中,这也可能会出现问题。我认为 AudioInputStream 期望来自 .wav 文件的一组“ header ”数据,但 SequenceInputStream 实际上可能发送多个“ header ”,每个源文件一个。我以前从未见过这样的串联尝试。

您可能需要为每个音素的原始音频创建自己的数据存储,然后从中构建组合音素,而不是直接从 .wav 文件。不是加载到剪辑,而是将原始 PCM 从 AudioInputStream 加载到字节数组中。要输出原始音频字节,您可以使用 SourceDataLine。

关于java - 一个使用Java音频?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20110658/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com