使用特定端口和数据线的Java声音

使用特定端口和数据线的Java声音,java,javasound,Java,Javasound,这感觉像是我在这个网站上问的第100个与Java声音相关的问题,但我在Java声音API或jsresources.org上都找不到答案。我正在制作一个多音轨录音机,到目前为止,它工作得很好,比预期的好,我目前遇到的问题是允许用户在运行时为每个音轨选择一个输入。现在,我的程序只需要从混音器中取出一条可用的TargetDataLine,我就可以在录制过程中控制音量和平衡。如果我列出了端口,并允许用户选择特定的端口,例如笔记本电脑中的内置麦克风,我如何为特定的端口获取用于录制的目标数据线?是否关闭所有

这感觉像是我在这个网站上问的第100个与Java声音相关的问题,但我在Java声音API或jsresources.org上都找不到答案。我正在制作一个多音轨录音机,到目前为止,它工作得很好,比预期的好,我目前遇到的问题是允许用户在运行时为每个音轨选择一个输入。现在,我的程序只需要从混音器中取出一条可用的
TargetDataLine
,我就可以在录制过程中控制音量和平衡。如果我列出了
端口
,并允许用户选择特定的
端口
,例如笔记本电脑中的内置麦克风,我如何为特定的
端口
获取用于录制的
目标数据线
?是否关闭所有未使用的
端口

我还注意到,当列出
端口时,源代码指的是输入和目标输出,我只是习惯了
数据线
是另一种方式,如果有人能澄清我会很感激的


有一点可以帮助我解决当前的问题,那就是理解
端口
数据线
之间的关系,我知道这两者是什么,但我不明白为什么你不能像混音器一样从
端口
获得
数据线
,那么这两者之间的关系是什么呢?

你已经超越了我的努力,但也许我仍然可以帮你一点忙

您看到端口和数据线之间的差异摘要了吗?

在我看来,给定的端口只能与SourceDataLine或TargetDataLine中的一个工作,这取决于它是输入端口还是输出端口

你也试过这里的例子吗?

在我看来,由于端口扩展了线路,如果用端口替换线路(假设是输入端口),那么读取音频的示例代码应该可以工作。示例代码对您有用吗


我猜想,如果您从多个端口混合声音,则需要解压缩声音数据,自行添加声音值,并将其重新打包为PCM样本(即自行进行音频混合)对于一条输出线。

我在那里计算了3个问题。它从一个半开始,然后在列出端口时,我注意到端口看起来是向后的,并意识到我实际上可能要问的是这两个端口是如何相互作用的。我不是在问三个具体的答案,任何建议都是非常感谢的。老实说,我可能是在超越自己。我已经阅读了包括样本包摘要在内的文档。我知道端口是输入或输出,因此数据线必须匹配。我的问题是如何从特定端口获取数据线?我尝试了各种各样的例子,甚至修复了从jsresources.org编译Jam会话的源代码,但仍然没有成功。端口确实扩展了Line,但在本例中,他们使用的数据线也继承自Line,但端口和数据线不可互换,例如,您无法写入/读取端口。抱歉,空间不足。至于混音,你指的是一种混音方式,它可以将多首曲目保存为mp3或wav等格式。但是数据被记录到不同的曲目中,同时播放,jsresources.org上有一个叫做Audio Concat的例子,看看这个例子,混合音频文件。我要做的是获取一个从特定的、用户选择的端口读取的TargetDataLine和一个写入不同的特定用户选择的端口的SourceDataLine。谢谢你的回答,我很感谢你的意见。如果你正在用Java处理声音,你可能会发现这很有用,我离弄明白它有点近了。混合器似乎成对出现。数据线混频器和端口混频器。因此,对于SourceDataLines、Clips和TargetDataLines,您将至少有一个混音器,对于每个硬件设备的端口,您将至少有一个混音器,我一直在通过我认为的位置(例如hw:0、hw:1等)来识别它们。因此,首先我确定要使用的硬件设备,并获取其位置,然后创建DataLine.Info和Port.Info对象,并使用isLineSupported(Line.Info)方法。如果希望端口混合器传入Port.Info对象,并为数据线混合器使用参数中的DataLine.Info对象来查找适当的混合器。现在我需要做的是弄清楚如何将数据线从混频器与端口混频器的端口基本对齐。这实际上可能只是确保端口混合器上未使用的端口关闭的问题,但这似乎可能与用户机器上的其他软件冲突,因此我希望每个端口都有一条特定的数据线,并且我能够匹配它们,因此其他软件打开和使用的内容无关紧要。