当前位置: 首页 > 面试题库 >

如何在Java中生成声音效果?

通建安
2023-03-14
问题内容

我正在寻找可用于在运行时生成声音的Java代码-而不是现有声音文件的播放。

例如,在2毫秒的时间内生成440 Hz的锯齿波形的最佳代码是什么? 源代码赞赏!

我记得我的Commodore
128有一个简单的Sound命令,该命令以语音,频率,波形和持续时间作为参数来定义声音。在许多简单的情况下(快速而肮脏的游戏,声音实验等),效果都很好。

我正在专门寻找声音效果,例如声音,而不是音乐或MIDI(JFugue库涵盖的很好)。


问题答案:

您可以使用Java轻松生成采样的声音数据并进行播放,而无需使用本机代码。如果您正在谈论MIDI,可能会遇到一些棘手的问题,但是我还没有涉足该领域。

要生成采样的声音数据,您必须将过程倒退。我们将采取类似于A-to-D的方式,并随时间采样连续的声音功能。您的声卡对通过麦克风或线路输入的音频执行相同的操作。

首先,选择一个采样率(不是我们正在生成的音调的频率)。让我们以44100
Hz为例,因为这可能是声卡的播放速率(因此没有采样率转换,除非硬件做到这一点,否则并不容易)。

// in hz, number of samples in one second
sampleRate = 44100

// this is the time BETWEEN Samples
samplePeriod = 1.0 / sampleRate

// 2ms
duration = 0.002;
durationInSamples = Math.ceil(duration * sampleRate);

time = 0;
for(int i = 0; i < durationInSamples; i++)
{
  // sample a sine wave at 440 hertz at each time tick
  // substitute a function that generates a sawtooth as a function of time / freq
  // rawOutput[i] = function_of_time(other_relevant_info, time);
  rawOutput[i] = Math.sin(2 * Math.PI * 440 * time);
  time += samplePeriod;
}

// now you can playback the rawOutput
// streaming this may be trickier


 类似资料:
  • 问题内容: 在Java中以任何频率生成正弦波声音的最简单方法是什么?样本大小大于2个字节会有所帮助,但这并不 重要。 问题答案: 见一个自包含的例子。 也许更简单? 如链接答案顶部所示,这51行代码段(在下面重复-分隔为单行和行内注释)大约与 生成音调一样简单(好的,您可以取出5行以上用于谐波)。 人们似乎认为这应该是工具包中内置的一种产生 纯净音调的方法。并非如此,要花一点时间就可以做到。

  • 问题内容: 我创建了一个pong克隆,当发生碰撞时,我想添加一些声音效果。我的问题是,考虑到整个应用程序只有90行代码,我发现的每个有关合成声音的示例都需要约30行代码。我正在寻找一种更简单的方法。有没有简单的方法来创建不同音调的提示音?持续时间无所谓。我只想要一系列不同音调的蜂鸣声。 问题答案: 这是从Java Sound 提取(并简化)的一个小示例-示例:生成音频的代码

  • 我在许多论坛和YouTube教程中搜索了一些简单的代码来播放声音文件(.mp3),但我找到的所有内容都不适合我。 我总是收到异常,它找不到文件或其他错误,但它总是以异常结束。 有什么我必须先配置的吗? -编辑- 我再次尝试以下代码来显示我得到的解释: 这是我的代码 添加JFXPanel后,我得到了异常:线程“main”中的异常MEDIA Exception:MEDIA _ UNAVAILABLE

  • 问题内容: Octave似乎假设某个特定的声音播放实用程序将在系统上可用,但似乎没有提供指定备用声音的功能。在以下错误中,Octave正在寻找,这不是在所有系统上都可用的实用程序。 八度:38>声音(beamformed_20) sh:ofsndplay:找不到命令 是否可以使用Octave配置设置或代码片段来指定适合系统的实用程序? 问题答案: 在我的一台Linux机器上,我创建了以下ofsnd

  • 问题内容: 我想用Java生成一个.torrent文件,但是我不想要一个大的API,它可以执行诸如抓取跟踪器,种子等操作。这仅适用于生成元数据的客户端。存在哪些轻量级解决方案?我只生成一个.zip文件的.torrent。 谢谢! 问题答案: 我整理了这段独立的Java代码,以准备一个带有单个文件的.torrent文件。 通过调用.torrent文件的名称,共享文件的名称和跟踪器URL 来创建.to

  • 问题内容: 我正在使用HTML5对游戏进行编程;我现在遇到的障碍是如何播放音效。 具体要求数量很少: 播放和混合多种声音, 多次播放同一样本,可能会重复播放, 随时中断样本播放, 最好播放包含(低质量)原始PCM的WAV文件,但是我当然可以转换它们。 我的第一种方法是使用HTML5 元素并定义页面中的所有声音效果。Firefox只是播放桃花心的WAV文件,但多次调用实际上并不会多次播放示例。根据我