我可以将声音数据作为数组获得吗?

时间:2014-11-04 07:39:28

标签: java audio javasound

我正在制作有源噪音控制的程序(也使用自适应而不是使用取消代替控件)

系统很简单。

  1. 通过麦克风获取声音
  2. 将声音转换为数据,我可以阅读(像整数数组
  3. 使声音反相。
  4. 将数据转换为声音文件
  5. Follwing是我的问题

    1. 我可以将声音读作整数数组吗?
    2. 如果我可以使用整数数组,我怎样才能反相?只需将-1乘以每个数据?
    3. 任何有用的想法我的项目
    4. 有没有推荐的语言而不是java?
    5. 我听说stackoverflow有很多顶级程序员。所以,我期待得到批判的答案:D

1 个答案:

答案 0 :(得分:1)

回答你的问题:

(1)当您读取声音时,返回一个字节数组。字节可以很容易地解码成整数,短路,浮点数等等。 Java支持许多常见格式,并且可能有一个与麦克风输入和扬声器输出相匹配的格式。例如,Java支持16位编码,立体声,44100 fps,这被认为是CD质量的标准。 StackOverflow上已经有几个问题显示了解码和重新编码的编码。

(2)是的,只需将-1乘以PCM数组的每个元素即可。将负数添加到正确排列的对应项时,将产生0。

(3& 4)我不知道延迟时间的公差是多少!我想如果你只是简单地接受输入,解码,乘以-1,重新编码和输出,就有可能获得非常少量的处理时间。我不知道Java在这里有什么能力,但我敢打赌它会在十几毫米的范围内,给予或接受。取消多少钱?声音从麦克风到扬声器的位置有多远?这允许多长时间? (或者我错过了一些关于它是如何工作的东西?我之前没有做过这样的事情。)

Java非常快,通过读写和简单的数字转换,您将与本机代码级别相对接近。核心代码(用于测试)可能在下午编写,使用以下教程示例作为模板:Reading/Writing sound files, see code snippets。我特别注意评论所在的位置"这里对字节数组中的音频数据做了一些有用的事情......"在此刻, 您可以将代码转换为DSP,再乘以-1,然后再转换回字节。

如果Java没有足够快的证明,我认为接下来要尝试的是C的某种风格。