2013-11-28 57 views
1

所以,我一直在做一个宠物项目一段时间,我终于完成了所有的工作...大部分。我的项目代码已经在JAVA audio data streaming 0s(请原谅我忘记开始我的TargetDataLine xp)。我的问题更具理论性,可能会被解释为“使用更低级别的语言”,但我很好奇是否有办法在Java中使用它。以我的代码设置synchronously的方式,我的音频数据的读取/写入之间存在一个延迟,这个延迟随缓冲区大小而变化,我想知道是否有方法来流式传输音频(最好从TargetDataLine)延迟时间最短,这样一首歌或其他相对较高质量的声音就可以被认出。我的逻辑是:通过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

*“JAVA:通过TargetDataLine流实时音频”* 1)不需要在标题中包含主标签。 2)它是'Java',而不是'JAVA'。 3)你的*问题*? –

+0

1&2)对不起,我看到有人曾这样做过。认为它可能是自定义的。 3)我有一种方法可以将音频(最好是来自TargetDataLine)以最小的延迟进行流式传输,以便歌曲或其他相对较高质量的声音可以被可视地播放出来? – Kyle

+0

对不起,我没有足够的说明。我将音频数据从麦克风输入传输到扬声器输出。 – Kyle

回答

2

SourceDataLine是非常低的水平。它依赖于Java适应的每个操作系统的本地代码实现。

减少延迟的主要方法是减小缓冲区。

还有其他与Java音频和“实时”保证有关的问题。您可能会发现这篇感兴趣的文章: Real-Time Low Latency Audio Processing in Java

+0

非常丰富,谢谢! – Kyle