【问题标题】:Looking for a way to control sound volume and panning寻找一种控制音量和平移的方法
【发布时间】:2015-09-28 01:07:15
【问题描述】:

我一直在创建一个 Java 项目,我希望同时播放多个声音,以及如何控制每个声音的音量和声相。我用谷歌搜索并阅读了 3 种不同的方法;问题是,我似乎找不到任何关于如何使用它们的教程或示例。它们是:

 import java.applet.AudioClip;
 import javax.sound.sampled;
 import sun.audio.SomethingOrOther; // Sorry, don't recall off-hand.  It was an "un-documented" site

当我继续阅读时,我发现 AudioClip 仅用于某种​​应用程序(“applet”?),而第三个仅在一百个站点中的一个上被提及。第二个是在这个网站上提出的,但它完全涉及一个​​不同的主题(关于“线条”的东西)。无论如何,我对 Java 语法已经足够熟悉,可以理解这个想法,但我无法找到任何以直接方式呈现的内容;因此,如果有人能指出我正确的方向,将不胜感激。

【问题讨论】:

  • 标题中无需添加major标签。
  • 这可能也可能不相关:jsresources.org

标签: java audio javasound audio-panning


【解决方案1】:

查看 Java 教程中的这条线索:Trail: Sound,特别是 Processing Audio with Controls

按照 Andrews 评论中的建议,您应该查看 FloatControl.Type(例如 PAN)。

【讨论】:

    【解决方案2】:

    在我看来,立体声混音的唯一真正选择是在帧(即每个样本)级别访问声音数据。用于平移和音量等的内置控件有点可疑,并且同时执行多个 SourceDataLine 甚至无法在某些操作系统(某些 Linux)上运行。

    为此,有两种选择:编写自己的或使用库。

    Java 教程“Trail:Sound”在“控件”教程的末尾轻轻提到了直接操作选项。他们给出的解释有助于弄清楚如何访问各个声音帧。如果您是第一次接触这些东西,那么学习这些东西是一项艰巨的工作(如果您使用的是 AudioClips,听起来您就是这样)。

    我怀疑对您来说最好的选择是使用诸如TinySound 之类的库。你可以在Java-Gaming.org阅读更多关于它的信息。另一个要研究的图书馆是JAudioLibs

    我正在编写自己的用于游戏编码的立体声混音器,并且已经实现了控制音量和声相的粗略功能。在这样做的过程中,我发现 Java 并没有提供任何实时保证,只是它会尝试保持输出声音的连续性。诸如垃圾收集、线程切片、字节码与内存播放之类的事情,所有这些都违背了实时一致性。请参阅这篇文章了解更多详细信息:REAL-TIME, LOW LATENCY AUDIO PROCESSING IN JAVA

    从好的方面来说,Java 的核心实现(例如,AudioInputStream 和 SourceDataLine 之类的东西)非常强大,并且可以进行大量实时处理。但这需要一些仔细的编码。

    【讨论】:

      猜你喜欢
      • 2021-11-14
      • 1970-01-01
      • 2013-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多