我正在尝试将整数数组转换为声音表示。目前,我将每个值作为单独的短音播放,但我想从信息中创建一个采样波并播放它,如下所示:
每个红点代表一个数据点。理想情况下,我希望得到一个简单的方法,例如playSound(int[] array);
. 我查看了 javax.sound.sampled 包,但我不知道从哪里开始。
首先,样本数组不足以播放声音。
您还需要指定采样率。(例如,重复-1,+1等的50个样本如果以25个样本/秒的速度记录,则可能是50赫兹的正弦波,如果以50个样本/秒的速度记录,则可能是12.5赫兹的波(我的数学可能是关闭的))。
需要的另一件事是如何存储声音。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 后,您可以打开一行并将音频转储到其中。 此页面演示了如何做到这一点(他们作弊并正在播放音频文件,以便他们从文件中获取 AudioFormat)。
当然,您可能无法为所有格式打开一行,因此您可能需要进行一些转换。综上所述,可能有 Java 声音库可以使这变得更容易。