草庐IT

java - 使用 Java Sound API 进行多 channel USB 录音?

coder 2023-05-14 原文

我正在尝试使用 Snow Leopard 上的 Java Sound 录制/处理来自三个 USB 麦克风的一些音频(但如果可以解决问题,可以切换到 Windows)。问题是,当我尝试使用与 USB 麦克风对应的混音器时,Java Sound 告诉我该线路不受支持。具体来说,它是这样说的……

Available mixers:

Java Sound Audio Engine

USBMIC Serial# 041270067

Built-in Input Built-in Microphone

Soundflower (2ch)

Soundflower (16ch)

Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Line unsupported: interface TargetDataLine supporting format PCM_SIGNED 96000.0 Hz, 8 bit, stereo, 2 bytes/frame,

...当我要求它选择 USBMIC 混音器时:

  Mixer mixer = AudioSystem.
          getMixer(mixerInfo[1]);

我已尝试将音频格式与麦克风的确切规范(16 位、44100Hz、立体声)匹配,但没有任何区别。

问题出现在这里:

 final TargetDataLine line = (TargetDataLine)
        mixer.getLine(info);

看起来混音器和 TargetDataLine 彼此不喜欢。有没有办法让这两者“匹配”并相处融洽?

无可否认,我使用的麦克风有点奇怪。它们被用于名为 SingStar 的卡拉 OK 视频游戏中。麦克风本身具有标准的单声道输入连接器,可插入一个小集线器(两个到一个集线器),将它们转换为单个公 USB 连接器。不过,除了奇怪之外,它们似乎与 Audacity 作为单独的 channel 一起工作得很好,所以用它们进行多 channel 录制显然是可能的,只是在 Java 中可能不行。

我还考虑过使用像 Soundflower 这样的程序来在不同程序之间共享音频。但是,我不确定这是否可行,因为我看不到如何将 USB 麦克风输入到 Soundflower,然后将它们通过管道传输到 Java 中。一个快速的实验告诉我,我可以在 Audacity 中从麦克风录制音频,通过 Soundflower 将其输出,然后在我的 Java 程序中进行处理。不过,我想做的是让这一切都在 Java 中实时发生。

有人熟悉这类问题吗?

最佳答案

我认为一个简单的方法是使用 Soundflower 和 Soundflowerbed。

I can't see how to make the USB mics inputs to Soundflower and then pipe them into a Java.

听起来您已经安装了 Soundflower。 Soundflowerbed 与 Soundflower 位于同一磁盘镜像中,是一个菜单栏应用程序。它允许您在没有内置控件用于选择声音设备的应用程序之间路由声音。从磁盘镜像安装它并单击它运行。

以下所有内容都将使用我的 Echo Audiofire 4,但原则上应该适用于任何音频设备。

使用 Soundflowerbed

打开 Soundflower 并在 Soundflower (16ch) 下勾选您要使用的音频设备。由于我是新用户,我无法发布图片,但它们在下面链接。如果我得到赏金,那么我将编辑帖子以包含内联图像。

从这里您将使用 Soundflower (16ch) 作为 Java 声音中的音频输入设备。

创建聚合音频设备

如果这不起作用,另一种解决方法是创建一个聚合设备。打开 Applications > Utilities > Audio Midi Setup 并单击加号以创建新的聚合设备。

勾选您要聚合的设备。你只想要你的 USBMIC(因为我是一个新的 SO 用户,我每个答案只能发布两张图片,所以接下来的两张在这里链接)。

可能给您带来麻烦的关键部分是设备上的时钟。如果您选择 Mac 作为时钟源,那可能会更稳定。

如果这仍然不起作用,那么您可以尝试将 Mac 内置音频添加到聚合设备,并通过右键单击要成为主设备的设备使其成为主时钟。

其他选项

最后,我以前没有使用过这个,但 Pulse Audio(谷歌它,我不能在这篇文章中插入更多链接)可能是一个可能的解决方案,可以将你的音频流混合在一起。不过它看起来很重。

关于java - 使用 Java Sound API 进行多 channel USB 录音?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4239705/

有关java - 使用 Java Sound API 进行多 channel USB 录音?的更多相关文章

  1. ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法 - 2

    我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div

  2. ruby - 使用 RubyZip 生成 ZIP 文件时设置压缩级别 - 2

    我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看ruby​​zip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d

  3. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  4. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  5. ruby - 在 Ruby 中使用匿名模块 - 2

    假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于

  6. ruby - 使用 ruby​​ 和 savon 的 SOAP 服务 - 2

    我正在尝试使用ruby​​和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我

  7. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  8. ruby-on-rails - 按天对 Mongoid 对象进行分组 - 2

    在控制台中反复尝试之后,我想到了这种方法,可以按发生日期对类似activerecord的(Mongoid)对象进行分组。我不确定这是完成此任务的最佳方法,但它确实有效。有没有人有更好的建议,或者这是一个很好的方法?#eventsisanarrayofactiverecord-likeobjectsthatincludeatimeattributeevents.map{|event|#converteventsarrayintoanarrayofhasheswiththedayofthemonthandtheevent{:number=>event.time.day,:event=>ev

  9. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  10. ruby - 使用 ruby​​ 将 HTML 转换为纯文本并维护结构/格式 - 2

    我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h

随机推荐