java - 我可以获取数组形式的声音数据吗?

标签 java audio javasound

我正在为主动噪声控制制作程序(也使用自适应而不是主动/使用取消而不是控制)

系统非常简单。

  1. 通过麦克风获取声音
  2. 将声音转换为我可以读取的数据(类似于整数数组)
  3. 使声音反相。
  4. 将数据转为声音文件

以下是我的问题

  1. 我可以将声音读取为整数数组吗?
  2. 如果我可以使用整数数组,我该如何制作反相?只需将每个数据乘以 -1 即可?
  3. 对我的项目有任何有用的想法
  4. 除了java之外还有其他推荐的语言吗?

我听说 stackoverflow 有很多顶级程序员。所以,我期待关键的答案:D

最佳答案

回答您的问题:

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

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

(3 & 4) 我不知道延迟时间的容差是多少!我认为,如果您只是简单地进行输入、解码、乘以 -1、重新编码和输出,则可能会获得非常的处理时间。我不知道 Java 在这里能做什么,但我打赌它的规模将是十几毫秒,或多或少。取消预订需要多少钱?声音从麦克风传播到扬声器位置有多远?这允许多少时间? (或者我是否遗漏了它是如何工作的?我以前没有做过此类事情。)

Java 的速度非常快,并且通过读写和简单的数字转换,您将相对接近 native 代码级别。使用以下教程示例作为模板,核心代码(用于测试)可能可以在一个下午编写完成:Reading/Writing sound files, see code snippets 。我会特别注意注释“这里对字节数组中的音频数据做一些有用的事情......”的地方。 您可以输入代码将字节转换为 DSP,乘以 -1,然后转换回字节。

如果 Java 不够快,我想接下来要尝试的是 C 语言。

关于java - 我可以获取数组形式的声音数据吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26729926/

相关文章:

java - Google App Script logger.log 未显示任何内容

python - 波形文件的频谱图

ios - 返回另一个 View Controller IOS7 后如何暂停音频一次

Java 播放声音。有默认的系统声音吗?

java - 只能第一次从 TargetDataLine 记录

java - OOP 设计问题与纸牌游戏

java - 在 Tomcat 7/8 中部署时,Hibernate 4 不创建表

java - Jtwig 如何获取HttpSession/HttpServletRequest?

c++ - 在做其他事情的同时用c++播放声音

java - 如何在 Java 中以 (MIDI) 序列播放音频剪辑?