所以,我已经有一段时间从事宠物项目了,我终于完成了所有工作......主要是。我的项目代码已经出现在JAVA audio data streaming 0s(请原谅我忘了启动我的TargetDataLine
xp)。我的问题更具理论性,可能会受到诸如“使用低级语言”等问题的答案,但我很好奇是否有办法在Java中实现。在我的代码设置为synchronously
的情况下,我的音频数据的读/写与缓冲区大小之间存在延迟,我想知道是否有一种流式传输音频的方式(最好是来自TargetDataLine
)具有最小延迟,以便可以识别地播放歌曲或其他相对高质量的声音。我的逻辑是:
while (Stream.RENDERING_BUFFER.isOpen()) {
int readLength = Stream.PROCESSING_BUFFER.read(Stream.READ_BUFFER, 0, Stream.BUFFER_SIZE);
Stream.RENDERING_BUFFER.write(Stream.READ_BUFFER, 0, readLength);
}
谢谢!
答案 0 :(得分:2)
SourceDataLine相当低级别。它依赖于Java所适用的每个操作系统的本机代码实现。
减少延迟的主要方法是缩小缓冲区。
还有其他与Java音频和“实时”保证有关的问题。您可能会发现这篇文章: Real-Time Low Latency Audio Processing in Java