Java 如何将SourceDataLine的内容写入文件?

Java 如何将SourceDataLine的内容写入文件?,java,audio,file-io,javasound,Java,Audio,File Io,Javasound,我正在修改一个播放音频数据的应用程序,改为将数据写入文件。在当前的实现中,字节数组是动态填充的,每次填充时都会将该缓冲区的内容写入SourceDataLine。我基本上想以指定的格式将缓冲区写入文件 我已通读并偶然发现了以下代码,这些代码是为将音频数据写入文件而截取的: File fileOut = new File(someNewPathName); AudioFileFormat.Type fileType = fileFormat.getType(); if (AudioSystem.is

我正在修改一个播放音频数据的应用程序,改为将数据写入文件。在当前的实现中,字节数组是动态填充的,每次填充时都会将该缓冲区的内容写入SourceDataLine。我基本上想以指定的格式将缓冲区写入文件

我已通读并偶然发现了以下代码,这些代码是为将音频数据写入文件而截取的:

File fileOut = new File(someNewPathName);
AudioFileFormat.Type fileType = fileFormat.getType();
if (AudioSystem.isFileTypeSupported(fileType, 
    audioInputStream)) {
  AudioSystem.write(audioInputStream, fileType, fileOut);
}
我从API文档中看到,我可以使用TargetDataLine构建AudioInputStream,但是在我的例子中,我有一个SourceDataLine。我不知道如何将字节数组中的数据放入TargetDataLine,因为它实现了read()方法而不是write()。在该文档和其他文档中,AudioInputStream的其他用法将其视为从文件读取的一种方式,因此我对它与AudioSystem.write()的用法感到有点困惑

那么,如何将数据从SourceDataLine或直接从缓冲区获取到TargetDataLine或AudioInputStream,以便将其写入文件

  • 使用
    byte[]
    建立
    ByteArrayInputStream
  • 将BAI提供给
  • 音响系统中使用AIS。写入(..)

  • 用这个替换对SourceDataLine.write()的调用后,我在第3步得到一个不支持的DaudioFileException:“无法从输入流获取音频输入流”。为什么数据在写入SourceDataLine时有效,而在创建AudioInputStream时无效?在这种情况下,SSCCE实际上不可行。我转向了另一个解决方案,但这是我最初面临的问题的答案,所以我接受了。你使用的解决方案是什么?你能在文件中写下扬声器播放/收听的内容吗?@coding\u idiot音频只是一系列音调,因此我能从音调生成器中复制它们,比通过编程复制它们更容易