从麦克风捕获声音

3
所以,我查看了Java的声音教程,但并没有发现它有多大帮助。无论如何,从麦克风录制声音的教程中,我理解到以下内容:
sound 虽然他们展示了如何获取目标数据线等信息,但并没有告诉你如何实际录制声音[或者可能是我没有完全理解]。
到目前为止,我的理解是:
  • Mixer 可以是你的声卡或处理声音的软件驱动程序,无论是输入还是输出
  • 当您想将声音输出到计算机时,使用 TargetDataLine,例如将其保存到磁盘中
  • Port 是您连接外部设备(如麦克风等)的地方
  • 仍存在的问题

  • 如何选择正确的混音器? Java的教程说,您可以获取所有可用的混音器,并查询每个混音器以查看它是否拥有您想要的功能。对于初学者来说,这相当模糊
  • 如何获取集成麦克风所在的端口?具体来说,如何从中获取输入并将其输出到混音器中?
  • 如何将此输出到磁盘?

  • 浏览一下Java Sound Resources中的一些源代码(作为从Java Sound tag Wiki链接过来的)。值得注意的是,自1.3版本以来,JMF没有带来任何Java Sound无法完成的功能。 - Andrew Thompson
    1个回答

    2
    使用 AudioSystem.getTargetDataLine(AudioFormat format) 方法,您将获得一个目标数据行,可以用于以 AudioFormat 对象指定的格式录制音频数据。返回的线路将由默认系统混音器提供,或者如果不可能,则由安装在支持匹配 TargetDataLine 对象的系统中的任何其他混音器提供。
    请参见接受的答案 Java Sound API - capturing microphone 以获取示例。
    如果您想更多地控制要使用哪个数据线,则可以枚举所有混音器及其支持的数据线,并选择您想要的数据线。以下是有关如何执行此操作的更多信息:Java - recording from mixer
    一旦您获得了TargetDataLine,您应该调用open()函数打开它,然后反复调用read()函数从该数据线获取数据。您每次调用read()时填充的byte[]可以通过FileOutputStream写入磁盘。

    好的,谢谢可能有点儿过于频繁了,但无所谓。感谢你,那是我曾经遇到的最好的答案。 - An SO User

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接