合成采样声音

时间:2011-02-10 00:56:49

标签: java arrays audio sampling sine

我正在尝试将整数数组转换为声音表示。目前,我正在将每个值作为单独的短音调播放,但我想从信息中创建一个采样波并播放它,如下所示:

image

每个红点代表一个数据点。理想情况下,我希望最终得到一个简单的方法,例如playSound(int[] array);。我查看了javax.sound.sampled包,但我不知道从哪里开始。

1 个答案:

答案 0 :(得分:0)

首先,一组样本不足以播放声音。

  • 您还需要指定采样率。 (例如,如果以25个样本/秒记录,则重复-1,+ 1等的50个样本可以是50hz正弦波;如果以50个样本/秒记录(我的数学可能关闭),则可以是12.5hz波)。

  • 需要的另一件事是如何存储声音。 MAX_INT是最高音还是峰值音量是255?

  • 您还需要指定编码。您可能需要PCM_SIGNED或PCM_UNSIGNED(取决于您是否有负样本)或者您可能想要使用其他编码。

javax.sound.sampled包在AudioFormat类中表示此信息。

您需要构建一种音频格式,以反映音频采样的方法。例如,如果您的样本占用了整个整数范围,并且您使用整数表示每个样本,并且您以每秒22,000个样本进行采样,并且它是单声道声音,那么您将构建以下AudioFormat ......

AudioFormat desiredFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,22000,32,1,32,22000,true);

拥有AudioFormat后,您可以打开一行并将音频转储给它。 This page演示了如何做到这一点(他们作弊并正在播放音频文件,以便他们从文件中获取AudioFormat)。

当然,您可能无法为所有格式打开一行,因此您可能需要进行一些转换。所有这些都说,可能有Java声音库可以使这更容易。