实时java音量调整

时间:2009-07-28 15:15:43

标签: java audio

我使用Java的SourceDataLine播放声音,但每当我尝试调整音量(增益)时,动作和扬声器中的响应之间会有0.2-0.5秒的延迟。音频数据以4k-16k块(16bit单声道,22kHz~44k / s)写入。

如何更实时地进行音量调节?

write(byte[], int, int)是否会锁定FloatControl的增益调整?

我是否需要恢复DSP同时调整声音缓冲区数据量的方式或提交较小的块?

JDK7,体面的Windows PC

3 个答案:

答案 0 :(得分:2)

声音系统从SourceDataLine获取几个(百...)千字节的数据并缓冲它们。如果更改了params,它将在系统回放缓冲区为空并且从SDL读取新数据后才会生效。

您需要做的是在某处改变系统播放音量(这会产生直接影响),而不是为您提供的数据。

答案 1 :(得分:0)

如果您能以某种方式影响/创建混音器为Line.Info包含的Line类,则可以更改其最小和最大缓冲区。然后,您可以将缓冲区设置为您正在为其提供的块的大小,然后您的延迟将减少到无(假设)

答案 2 :(得分:0)

调用SourceDataLine.open()时是否尝试使用自定义(较低)缓冲区大小?

SourceDataLine.open( AudioFormat format, int bufferSize )

这应该可以减少延迟。主播放音量解决方案仍然可能会更快。