代码之家  ›  专栏  ›  技术社区  ›  akarnokd

实时Java音量调整

  •  0
  • akarnokd  · 技术社区  · 15 年前

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

    我怎样才能使这个音量调节更实时?

    write(byte[], int, int) 锁定浮动控制的增益调整?

    我需要恢复到同步调整声音缓冲数据量的DSP方式还是提交较小的块?

    JDK7,体面的Windows PC

    3 回复  |  直到 14 年前
        1
  •  2
  •   Marcin    15 年前

    Sound System从SourceDataline获取的数据以几个(百…)千字节为单位,并对其进行缓冲。如果您更改它的参数,它将不会生效,直到系统回放缓冲区为空,并且从SDL中读取新数据。

    你需要做的是围绕着改变系统回放音量(有即时效果)进行黑客攻击,而不是修改你提供给它的数据。

        2
  •  0
  •   Aviad Ben Dov    15 年前

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

        3
  •  0
  •   Tomas Andrle    14 年前

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

    SourceDataLine.open( AudioFormat format, int bufferSize )
    

    这样可以减少延迟。不过,主播放音量的解决方案可能会更快。