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