如何在Java中生成声音效果?
我正在寻找可用于在运行时生成声音的Java代码-而不是现有声音文件的播放。
例如,在2毫秒的时间内生成440 Hz的锯齿波形的最佳代码是什么?
我记得我的Commodore
128有一个简单的Sound命令,该命令以语音,频率,波形和持续时间作为参数来定义声音。在许多简单的情况下(快速而肮脏的游戏,声音实验等),效果都很好。
我正在专门寻找声音效果,例如声音,而不是音乐或MIDI(JFugue库涵盖的很好)。
回答:
您可以使用Java轻松生成采样的声音数据并进行播放,而无需使用本机代码。如果您正在谈论MIDI,可能会遇到一些棘手的问题,但是我还没有涉足该领域。
要生成采样的声音数据,您必须将过程倒退。我们将采取类似于A-to-D的方式,并随时间采样连续的声音功能。您的声卡对通过麦克风或线路输入的音频执行相同的操作。
首先,选择一个采样率(不是我们正在生成的音调的频率)。让我们以44100
Hz为例,因为这可能是声卡的播放速率(因此没有采样率转换,除非硬件做到这一点,否则并不容易)。
// in hz, number of samples in one secondsampleRate = 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中生成声音效果? 的全部内容, 来源链接: utcz.com/qa/403810.html