java - 合成采样声音

标签 java arrays audio sampling trigonometry

我正在尝试将整数数组转换为声音表示形式。目前,我将每个值作为一个单独的音调播放,但我想根据这些信息创建一个采样的波形并进行回放,如下所示:

image

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

最佳答案

首先,样本数组不足以播放声音的信息。

  • 您还需要指定采样率。 (例如,如果以25个样本/秒的速度记录,重复-1,+ 1等50个样本可能是50hz正弦波,如果以50个样本/秒的记录速度,则可能是12.5hz波(我的数学可能关闭了))。
  • 另一件事是声音的存储方式。 MAX_INT是您的最高声音还是255是您的峰值音量?
  • 您还需要指定一种编码。您可能需要PCM_SIGNED或PCM_UNSIGNED(取决于是否有负采样),或者甚至可能要使用其他编码。

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

    您将需要构建一种音频格式,以反射(reflect)音频采样的方法。例如,如果您的样本占据了整个整数范围,并且每个样本都用一个整数表示,并且您以每秒22,000个样本进行采样,并且它是单声道声音,则可以构建以下AudioFormat ...
    AudioFormat desiredFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,22000,32,1,32,22000,true);
    

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

    当然,您可能无法为所有格式打开一行,因此您可能必须进行一些转换。综上所述,可能有Java声音库可以使这变得容易得多。

    关于java - 合成采样声音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4952326/

    相关文章:

    audio - 使用 FFMPEG 将音频(带偏移)添加到视频

    java - 如何将Java swing黑色背景工具栏集成到polaxes中?

    java - Mac 编程到 Android 编程

    java - 我是否正确覆盖了 equals 和 hashcode?

    c++ - 在 C++ 中复制和操作大型密集二维数组的最快方法是什么

    php - 访问从 jquery 传递给 php 的数组元素

    java - 在android中拖动手指时选择多个 View

    java - 在微调器中隐藏字符串数组值

    java - Mozilla MediaRecorder 的音频输出格式是什么以及如何在 Java(或 Scala)中解码 ogg 格式

    audio - 2013 年带有 Web MIDI API 的浏览器?