这感觉就像我在这个网站上提到的第100个与Java Sound相关的问题,但我无法在Java Sound API或jsresources.org中找到答案。我正在制作一个多轨录音机,到目前为止它工作得很好,比预期好,我目前遇到的问题是允许用户在运行时为每个音轨选择一个输入。现在我的程序只从TargetDataLine
获取Mixer
,我可以在录制期间控制音量以及余额。如果我列出Ports
并允许用户选择特定的Port
,例如笔记本电脑中的内置麦克风,如何获取特定TargetDataLine
的{{1}}用于录音?这是关闭所有未使用的Port
的问题吗?
我还注意到,当列出Ports
来源引用输入和目标输出时,我只是习惯了Ports
,如果有人能够澄清我会很感激它。 / p>
可以帮助我解决当前问题的是理解DataLines
和Ports
之间的关系,我知道这两者是什么,但我不明白为什么你不能得到{{1}来自DataLines
就像你的混音器一样,那两者之间的关系是什么?
答案 0 :(得分:0)
你已经超越了我试图做的事情,但也许我仍然可以帮助一点!
您是否看到了Port和DataLine之间差异的摘要? http://docs.oracle.com/javase/7/docs/api/javax/sound/sampled/package-summary.html
在我看来,给定的端口只能使用SourceDataLine或TargetDataLine中的一个,具体取决于它是输入端口还是输出端口。
您是否也尝试过这里的例子? http://docs.oracle.com/javase/tutorial/sound/capturing.html
在我看来,由于Port扩展了Line,如果你用你的Port替换它的Line(假设它是一个输入端口),读取音频的示例代码应该有效。示例代码是否适合您?
我猜测如果你混合来自多个端口的声音,则需要解压缩声音数据,自己添加声音值并将它们重新打包为PCM样本(即,进行自己的音频混合)对于单个输出线。